# License Server A comprehensive microservices-based license management system for software licensing, validation, and analytics. ## Features - **License Management**: Create, update, and manage software licenses - **Hardware-based Validation**: Bind licenses to specific devices - **Offline Support**: Generate offline validation tokens - **Analytics**: Track usage patterns and detect anomalies - **Rate Limiting**: Protect APIs with configurable rate limits - **Event-driven Architecture**: Real-time event processing with RabbitMQ - **Caching**: Redis-based caching for improved performance - **Security**: JWT authentication, API key management, and audit logging ## Architecture The system consists of four microservices: 1. **Auth Service** (Port 5001): JWT token management and API authentication 2. **License API** (Port 5002): License validation and activation 3. **Analytics Service** (Port 5003): Usage analytics and anomaly detection 4. **Admin API** (Port 5004): License administration and management ## Quick Start ### Prerequisites - Docker and Docker Compose - Make (optional, for using Makefile commands) - Python 3.11+ (for local development) ### Installation 1. Clone the repository: ```bash git clone cd lizenzserver ``` 2. Copy environment variables: ```bash cp .env.example .env # Edit .env with your configuration ``` 3. Build and start services: ```bash make build make up ``` Or without Make: ```bash docker-compose build docker-compose up -d ``` 4. Initialize the database: ```bash make init-db ``` ### Verify Installation Check service health: ```bash curl http://localhost:5001/health curl http://localhost:5002/health curl http://localhost:5003/health curl http://localhost:5004/health ``` ## Usage ### Creating a License ```bash curl -X POST http://localhost:5004/api/v1/admin/licenses \ -H "X-Admin-API-Key: your-admin-key" \ -H "Content-Type: application/json" \ -d '{ "customer_id": "cust-123", "max_devices": 5, "expires_in_days": 365, "features": ["premium", "support"] }' ``` ### Validating a License ```bash curl -X POST http://localhost:5002/api/v1/license/validate \ -H "X-API-Key: your-api-key" \ -H "Content-Type: application/json" \ -d '{ "license_key": "LIC-XXXXXXXXXXXX", "hardware_id": "device-123" }' ``` ## API Documentation Detailed API documentation is available in [API_DOCUMENTATION.md](API_DOCUMENTATION.md). ## Configuration ### Environment Variables Key configuration options in `.env`: - `DB_PASSWORD`: PostgreSQL password - `REDIS_PASSWORD`: Redis password - `JWT_SECRET`: Secret key for JWT tokens - `ADMIN_API_KEY`: Admin API authentication key - `FLASK_ENV`: Flask environment (development/production) ### Rate Limiting Default rate limits: - 60 requests per minute - 1000 requests per hour - 10000 requests per day Configure per API key in the database. ## Development ### Running Locally 1. Install dependencies: ```bash pip install -r requirements.txt ``` 2. Set environment variables: ```bash export DATABASE_URL=postgresql://user:pass@localhost:5432/licenses export REDIS_URL=redis://localhost:6379 export RABBITMQ_URL=amqp://guest:guest@localhost:5672 ``` 3. Run a service: ```bash python services/license_api/app.py ``` ### Testing Run tests: ```bash make test ``` ### Database Migrations The database schema is in `init.sql`. Apply migrations: ```bash docker-compose exec postgres psql -U license_admin -d licenses -f /path/to/migration.sql ``` ## Monitoring ### Logs View logs for all services: ```bash make logs ``` View logs for specific service: ```bash make logs-auth make logs-license make logs-analytics make logs-admin ``` ### Metrics Services expose Prometheus metrics at `/metrics` endpoint. ### RabbitMQ Management Access RabbitMQ management UI at http://localhost:15672 - Username: admin (or configured value) - Password: admin_password (or configured value) ## Security ### Best Practices 1. **Change default passwords** in production 2. **Use HTTPS** in production (configure in nginx.conf) 3. **Rotate API keys** regularly 4. **Monitor anomalies** through the analytics service 5. **Set up IP whitelisting** for admin endpoints 6. **Enable audit logging** for compliance ### API Key Management Create API keys through the Auth Service: ```bash curl -X POST http://localhost:5001/api/v1/auth/api-key \ -H "X-Admin-Secret: your-admin-secret" \ -H "Content-Type: application/json" \ -d '{ "client_name": "My Application", "allowed_endpoints": ["license.validate", "license.activate"] }' ``` ## Troubleshooting ### Common Issues 1. **Services not starting**: Check logs with `docker-compose logs ` 2. **Database connection errors**: Ensure PostgreSQL is healthy and credentials are correct 3. **Rate limit errors**: Check rate limit configuration and API key limits 4. **Cache misses**: Verify Redis connection and TTL settings ### Health Checks All services provide health endpoints: - Auth: http://localhost:5001/health - License: http://localhost:5002/health - Analytics: http://localhost:5003/health - Admin: http://localhost:5004/health ## Contributing 1. Fork the repository 2. Create a feature branch 3. Commit your changes 4. Push to the branch 5. Create a Pull Request ## License [Your License Here] ## Support For support, please contact [support@example.com] or create an issue in the repository.