Resolve licensing aspects for the generic controller
Handling the active license
Downloading new licenses
Validating licenses and execution requests
Check internet settings
LicenseModel (dll)
Representing the license data in a standard way.
Serializing and deserializing the data
Encryption
License WebService:
Provide license files on request
Add new licenses to DB
Query licenses DB
Licensing WebApp:
Provide UX for licensing manager users
Show status of licenses
Create new licenses
Sequence Diagrams
Open Active or Install New License
Validate License
Database Migration
There are currently 3 software components where licenses are created, each of them with its corresponding database:
Studio: for Snow
VBUC CLI License Generator: for VBUC manually generated licenses.
VBUC in Sales Web Flow for automatic VBUC sales.
License Model
After considering Snow, VBUC and other experiences with licenses, this is the purposed LicenseModel:
Pending Questions:
LicenseFile: why is this text field stored in the VBUC DB?
DateIssued: should it be the original date when the license was inserted into the DB? (makes more sense) or the date when the current license file was serialized?
Unmutable License Files: Where to handle ConsumedAccummulatedLines & LastUsedDate?
LicenseType & ExecutionMode: define a generic mechanism to solve all possible scenarios.
Serialization of new files: available in the LicenseModel, or only in a separate private dll?
public class LicenseModel
{
private Dictionary<string,object> licenseData;
private string LicenseFile;
public const int unlimitedUnits = -1;
public readonly DateTime unlimitedDate = DateTime.MinValue;
// Create and Save
public LicenseModel(string filename);
// Will save be available here or in a different dll?
// Basic Data
public string GUID; //license key
public DateTime DateIssued;
public DateTime LastExecutionDate;
public string Product;
public string ProductFriendlyName;
public string OwnerCompany;
public string OwnerName;
public string OwnerEmail;
public string CreatedBy;
public string OwnerIpAddress;
public string CreatedAtComputer;
public List<string> Products;
public List<string> ProductFriendlyNames;
public string LicensingAssemblyVersion;
// Restrictions
public string LicenseType
public string UnitsType;
public int AccumulatedUnits;
public int UnitsPerExecution;
public DateTime StartDate;
public DateTime EndDate;
public int TimesDownloaded;
public int AvailableActivations;
public Fingerprint Fingerprint;
public ExecutionMode ExecutionMode; // (Scanning | Migration)
// How to store status?: ConsumedAccumulatedUnits & LastUsedDate
// Other
public int NotifyDays;
public IEnumerable<KeyValuePair<string,string>> FriendlyRestrictions;
public List<string> AllowedCustomFeatures; // CSharp, ASP, ...
}