====== License generator ====== This application generates and manages license keys for our products ===== Purpose ===== * This project is meant to replace the existing license key generator **AND** to improve current licensing mechanism * License keys are used to control the usage of our product. * The application will generate commercial and test license keys. * The generated keys will be associated to pre-existing customers and prospects. * It will provide the ability to display and report generated licenses and license usage ===== License key generator ===== ==== Description ==== * This application will be developped in the cockpit source code base * The code must be modular, allowing to safely include or remove it from the application via maven * The availability of this application will be controlled by at least two factor: * If the application lib has been included in the cockpit package * If the application has been activated by superadmin via a specific mean, like a license key * When enabled, the application will be reachable from left menu, within a **CRM** section * The CRM section will contain all apps relative to CRM: * License generator * Customer accounts * Update server, etc... ==== Use cases ==== === Manage customer === * It must be possible to create/update customer accounts * A Customer accounts defines a company which will use our license and are defined the following: * Company name * A unique ID * Contact details for licensing * Contact details for upgrades * Other contact details (Name, email, role) * Open properties * Type: Customer/opportunity * API keys * A list of generated API keys allowing an account to retreive its license information (from Cockpit or collector) === Generate custom license keys === * The generator will allow to generate license keys based on parameters such as * host IP * expiration date * system count * product type: NETWEAVER/HANA/BUSINESSOBJECTS/AGENT/DATADOG * mode: Expire (default)/Perpetual * Each license creation will be associated with: * A creation date * Creation user * Description * Usage type: Commercial/test * **All fields are mandatory** * A license must always be associated with an account * Licenses used for internal usage will use a specific **internal** flag === Quick generate test keys === * It must be possible to quickly generate a license key with default parameters * Reflecting the most common use cases, some action button will help to fast track license creation using default parameters * Usage type: test * Duration quick choice between 15/30 days * Reason: * POC * POC extension * IP: * * License count: TBD === License table === * It must be possible to list, sort and filter licenses by multiple filters * Account * Expiration * Days left * Creator * Usage * Type * filter by Open text (matching the whole object) * By example * List commercial licenses expiring in less than 60 days * List accounts with valid commercial licenses === License dashboard === * The license dashboard allows to display license information through multiple tabs or views: * Current list of valid commercial licenses per account * List of expiring licenses (and maybe recently expired) * List of valid accounts (having a valid license) === Notification === * An email notification mechanism must be implemented to notify when a license is going to expire. * This system will be configured with the following parameters: * Internal recipients * Remaining days Warning notification (To notify when a license is about to expire) * Once a day, the system will send an email listing all licenses which are about to expire or expired today * Account name, license type, license count, creator, creation date === Authorizations === * authorization objects will be defined allowing to control user actions * Allow access to license generator * Allow license creation * Allow account create/update ==== License keys ==== * The license key is an encrypted set of properties: * Customer account * IP * Expiration date * Type * Count * Mode ===== Licensing mechanism improvement ===== * Renew cryptographic to latest standards. * latest algorithms. * stop using the old crypto libraries in back office. * Allow larger license payload. * Example: Can be achieved by using a symmetric key for content, and then ciphering the symmetric key via public/private key. * Enable the use of our "future" license server. * By registering customer API key, our product would fetch its license keys from our license server. * The application could also report its "usage" and we would be able to control it. * Create a new license model for the cockpit to avoid having to set individual licenses on each collector. * When a collector is connected to the cockpit, the cockpit would transfer a SAAS license allowing to monitor anything, but preventing to create any configuration on the collector.