Skip to content

Commit

Permalink
Merge pull request #12 from muflihun/develop
Browse files Browse the repository at this point in the history
v1.0.3
  • Loading branch information
abumq authored Jan 9, 2018
2 parents 172edd6 + 148f91c commit 59373bb
Show file tree
Hide file tree
Showing 11 changed files with 81 additions and 40 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# Change Log

## [1.0.3] - 10-01-2018
### Fixes
- Fix date format across different timezones

## [1.0.2] - 09-01-2018
### Updates
- Removed unnecessary zlib dependency
Expand Down
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ option (travis "Travis CI" OFF)

set (LICENSEPP_MAJOR "1")
set (LICENSEPP_MINOR "0")
set (LICENSEPP_PATCH "2")
set (LICENSEPP_PATCH "3")

set (LICENSEPP_SOVERSION "${LICENSEPP_MAJOR}.${LICENSEPP_MINOR}.${LICENSEPP_PATCH}")
set (LICENSEPP_NAME "licensepp")
Expand Down
7 changes: 7 additions & 0 deletions license++/license.h
Original file line number Diff line number Diff line change
Expand Up @@ -96,9 +96,16 @@ class License

///
/// \brief Loads itself from base64 input
/// \throws LicenseException if license is invalid
///
bool load(const std::string& licenseBase64);

///
/// \brief Loads itself from license file containing base64 license
/// \throws LicenseException if license is invalid
///
bool loadFromFile(const std::string& licensefile);

protected:

unsigned long m_issueDate;
Expand Down
11 changes: 11 additions & 0 deletions sample/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
### Sample

After you build using `make` run:

```
./license-manager-sample --license sample.licensepp
```

```
./license-manager-sample --license sample-with-signature.licensepp --signature sample-signature
```
7 changes: 2 additions & 5 deletions sample/license-manager.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,12 @@ class LicenseKeysRegister

const unsigned char LicenseKeysRegister::LICENSE_MANAGER_SIGNATURE_KEY[] =
{
0x27, 0xD4, 0x91, 0x55, 0xE6, 0x6D, 0xC3, 0x11, 0x8D, 0xC0, 0x52, 0x0B, 0x2C, 0x9F, 0x84, 0xF3,
0x5B, 0x6A, 0xF5, 0x93, 0xED, 0xAB, 0xB3, 0x10, 0xF5, 0xBE, 0x00, 0xE6, 0x4F, 0x1B, 0x70, 0xC8
};

const std::vector<IssuingAuthority> LicenseKeysRegister::LICENSE_ISSUING_AUTHORITIES = {
IssuingAuthority("custom-license-manager-1", "Muflihun Labs 1", "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlDV3dJQkFBS0JnUUMrTU9RbGhUUlhRTXRuK1JpdjNwVWNWdmdZdkpiWG5SeHdSL24xcTFPR1llUWlEdVY4CmlOOVcyQlVDQWVjVE1CVEJMK0xZSndpMnErWEVWclZZZjF6NTVPRWpicmJyK3hRQitJYU5uNTIzWUpRRGdQd1IKU0ROMnp5dzhmSDRBUVVENjk3VnRYamJaVXFaL1ZOZU1iaFJoRnhJV2lkMDVIVkE1THM5bkdFMllNd0lCRVFLQgpnRTVRWGZGVTkyODR6RG5mQ2lwTWw4QmdDODN6VFN1YkM3WERTTTZSMXhrM1hlL29CQ1E0Vy9hVk5kT21ialVUCnpFK01NRHJpNVhoazVpT3JPNXpwSmtnUjJpVGszb2xJK1YvUVNacXBnZ2xBRnJ5aVMzVW1IMTlLVmVKdERaTmgKK2ZtU21WL0Y0T0xhNTFIVTY5eEYzZUdTRmlMVnNiY2ZMUVhtdVpUNDBJNDVBa0VBMWVkMDJOdDd0VUp2VU5vdApoWGUwTk1FTWFUdFZsbVk3WHFxcTNNOG5kRFhoTkxmL1loVFQ1MVNRQkp6U1hYa2pNRnI1NU5NclhQMkxjdnFkClhTeXNwd0pCQU9PZXdyTXN0U2JocWZiNW4xbnFOZGxTbXJJdURPZUJDdUNNYTd0cFRrelFseFhTRjYzYlRETWcKS0pSSEVOU2s5WVB2RVRCYWRaa3VldFNrWC9FbWJaVUNRUUN3S0FYZnc4OUorbm5LSFJadDZodnZOWkhBRXI3MApWRERrakl5MTE4WWpkNnBucHBZVWlaOXpOcFM0Z1NXMlk4S2dTdXZwbnRocXNxOFRaUG9RZnlURkFrQnJIWWpNCnliNm80cXBXR3gzUDliNzgyNVFYblRNL3hFRmFuRzd1eUNUWTJxRnpyaWxDd1kxRlBFOVUxaVlKdHdvZitBZ1cKd1NoSUZkOXpJQzBtTURPUkFrRUFnck92a2F6ZHJkVm0rT3ViUksrcUFyb2I0anJzWS9HQURiVE9rMkZmZndzQwpRd1NGdE9TcnkvZjhDRDRuRkcySDh6ekRrQjFvZUc3Z1ZPdC81R2dscEE9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=:LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlHZE1BMEdDU3FHU0liM0RRRUJBUVVBQTRHTEFEQ0Jod0tCZ1FDK01PUWxoVFJYUU10bitSaXYzcFVjVnZnWQp2SmJYblJ4d1IvbjFxMU9HWWVRaUR1VjhpTjlXMkJVQ0FlY1RNQlRCTCtMWUp3aTJxK1hFVnJWWWYxejU1T0VqCmJyYnIreFFCK0lhTm41MjNZSlFEZ1B3UlNETjJ6eXc4Zkg0QVFVRDY5N1Z0WGpiWlVxWi9WTmVNYmhSaEZ4SVcKaWQwNUhWQTVMczluR0UyWU13SUJFUT09Ci0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQo=", 24U, true), // 1 day - no-secret
IssuingAuthority("custom-license-manager-2", "Muflihun Labs 2", "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlDV2dJQkFBS0JnUUN6amhXNEx4TVVEMzQzT2pyZyt6TEJpWmVsQ1lEMjFReEdKS2liUDVKTnN1d0xlSEUzCmZ1RzV5VjBEbEJ4R3YwazdmNDgvRHhwSDdCcmk2TU4vaUxYYU1wYkFBUVZBYXBBWTFUcys1UndCTXN5OGdvNzEKYWdoektQRFRTenB0V3hsVFFRbkpxakJXamp5V3BwdklqbWJBdnpFZXNMUEwzMHpyeW56Y0xkeG8xd0lCRVFLQgpnQ28vaktQTzExQURwVG9yMFo1Wk9SNTZ1a1R6TFdkQk1CQ0JHSnovNWpCbVZhaFlreHdkMnNKTmYwd2kyWG9PCjVBMy81WGcveWZMT0pIR2dMZi9qN28xTVRpMUlBTUk4czNYSFk3R084TUprVERaTVdSV3hpamE2YllWSFNnTUoKNVlsRmZseTVvSTVOMDQyZUV3OG54YUF0cmxTcnJKSW9KbHRIMHZKalI4TFJBa0VBNlJOMXgwWnk4YXZaMmdUawpMbTZnYlAzQVluUTR1T2hCdHJ4emE5RS9NNDJsSGkzUThqK3Q3M0phMTIzK1dlUXExb0hTOEk5RHFJbXZMT010ClVBT3hQUUpCQU1VM0NjZTdrL2JwaW12T3FCY3VKcHVMRlZ1Z0lINlV5Tm5pNlhCdW9UMThKcnVDN3FNR1M5UUgKSWU5Y3ljdDZyU2FLWSthSEd3d2dPS3haS0xmbnU2TUNRUUNraGpVRklxdDlhajlzdUNpWlB3ZlVkdUluWVJqNgova3lBL1g2bWRaWUdSZDMzTDJaUXBXdTRGSHhiMVN3RE42WEVsK0F4VmhHa0pQUWZyMnRIaWlMQkFrQi9uQlZqCkh3VmppQTVGd2ZSTE8vcmRIY0tHbE1tN1VUYXJHbHJRUjVXQ0l5Z2UrbDR0UUU4dTEzQlBsbVIwbXF4R0hVK3oKU0Z6TG5HRG4vWFN6TzVlSEFrQUtCOEdLODhFSmZmVDBkOWs5eitjT3hnSmdVbVNMa2o3NWxKalpCbXZhaUZ0dgpQanN0L2J2Z0xXQ09Fd1ZJY1l6aHFoK1JNTURGYlpiSy9tbjlTVVV5Ci0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg==:LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlHZE1BMEdDU3FHU0liM0RRRUJBUVVBQTRHTEFEQ0Jod0tCZ1FDempoVzRMeE1VRDM0M09qcmcrekxCaVplbApDWUQyMVF4R0pLaWJQNUpOc3V3TGVIRTNmdUc1eVYwRGxCeEd2MGs3ZjQ4L0R4cEg3QnJpNk1OL2lMWGFNcGJBCkFRVkFhcEFZMVRzKzVSd0JNc3k4Z283MWFnaHpLUERUU3pwdFd4bFRRUW5KcWpCV2pqeVdwcHZJam1iQXZ6RWUKc0xQTDMwenJ5bnpjTGR4bzF3SUJFUT09Ci0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQo=", 25U, true), // 25 hours max - no-secret
IssuingAuthority("custom-license-manager-3", "Muflihun Labs 3", "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpQcm9jLVR5cGU6IDQsRU5DUllQVEVECkRFSy1JbmZvOiBBRVMtMjU2LUNCQyw1RUQ3NkIwQzM0Q0QwMzM5ODY5NzJEMTg1QTRDNzk4QwoKNkp6UENtTUVQbjJJeWxaLzhJYlRmNzlTYVJmT281WXAweTgwVjU5TDNZZXQyekswQ3l6aUpBQWdpMHdJN1pobgpkSFZoNTBVeFBEQmZuem42SWwyOXJncDlFSDNSY1VwMlRpNkN5N21IUE5Pb1lMeXlOVXZCd2VGS1cxTEx4czV5CkRKWnFQVmFkZllpNGx4SUZPdFd3K3V4V3BoOWVzcFh1bk0vK0p3d29qd24wL1FnODBNT0ZDYU5YdG9WMUh5ZUgKUWI0TEZUQmk5Qk04RHZMeGJ4Q0xwTCtjZ0hrcTZ4S29sREtKYk0wN0N1ckU0ZktjaXFPREIvaUxUK1BjazRrawpkcUNuem1GWjd2b1NOZ2tBblNtWWw2d2drWmROc0pqaGpwVGJDd0tVcUdTQ1Y0MnRoZElQeVNvSE5sdkw2ZU1WCmRnQmd3ckhiR3RUOWVqN25qcGVKcjNDSFhKWTlaWUEybUJTcGJST0hYZHRJcGROVE9aRllwS0RPUEc0U2pZNi8KUzNBUlJtN0hZazFhNUFjWndBRTlTelEyODI5dFBMcGhnR0R3K2QzTU5SakpnME44a2tBZ3NSQ29DMEx5WVExdwpxM3hFVnJHcjRwWHd5R1A0ckp1T0VaaTg1Q0loYzY2Mnp1Tml1elBRYW9WNVlyY1hDZE1JUjRQRkZiNkErcUs5CkZtN3ovRFVIOXhGZkt2di9ibFI2RW5UOG8rc3hQWnYrWXpWdTVHV0xONmRDc3ExYWgvNXhyQWF4WlRVSFRWUG4KYy9YMHNJbGhUM0Q0TUNSbnNWRGJsZVdKL2R3V25MNm02TFA5RlpOckZFTXAzamFyanhPWVNkcTA1NmpnUW5EUQpXbFA4SWJLTi9udC9TVU1zZXcrbDFaM01vMW43aE1FL3VPbkxzYWNJZi9ZR1ArbWlJYXVFTDc1cVpwZGpzK1ZQCjRqUWFoTUxFUkZHMWRzK002MWJFbU9SRFRtY3pabWozRmMzQ01tRzVwSG41ZFFmaWNNSmdDZ29ZT3RBLzUwYzAKVjZWUXZyYnhFTXRGRmxjamZKRmpXZjFpaGJXbWdPMmVudDZUUzFqTjd5MD0KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0K:LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlHZE1BMEdDU3FHU0liM0RRRUJBUVVBQTRHTEFEQ0Jod0tCZ1FEZytydnlLWlRqSGhsWVB2Uy8yeUlWaDRlRQpOZ09Eb2U5YmhFbVFiZ1hHSVJYbjY5azhnejdUWnFRbzNFUzQ3Vy9uR2Q4K2tYWk82azZTd0ZrS2FMTjlMbzJhCk5XbkhMQUxLa3lOVU5wTGs4Z3Excko1cFErS3ZlSGMvcjdOUVM1Y0RzaW95aXp0T281Y3puNTRxdTFzajlLbVEKd0xNS0trVy8wcjFEazk4Z0lRSUJFUT09Ci0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQo=", 25U, true), // 25 hours - secret: unit-test-issuer-secret
IssuingAuthority("sample-license-authority", "Sample License Authority", "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb1FJQkFBS0NBUUVBdHhnSlBDVklIUGp4VmpnMDVlMnVaNURqNDNIdDF0WFlUK3VkVVRTL3RrSlgyQzltCnFoOGpLUHVPZkF1enFiUCtlenJBdENIQ3ptRE5sZkUwamVOU1VUZlFWbFhxNzd3UGh6ajZWNm1lWTNlcmYxK0oKVGNHUTk1Q0U3QWxRZmlvTm1aMU1OOTBSOXo2QllJMFJpVHh1QVFXckZqdm1rMUsrZ1RRN2dPbVV1WEx1MzJ2RwppNVE0cElKVHBJMExYQkp5QnJVNEs1ZTdWTVhaMHQrb1dRc3djcm05bkJYWVpleVRJcUZ2VmVkbEpxZTArTm9GCk8zeE91VHYxSiticWtWeFFuQlczQ2dyR2tjT0ZWRWtEQ0ROOEZoZ0N5SEpJRDliZkdsNlBJUEp0TE94UlF2M20KSituaktNcnF5a3BPaWp6WXNyUjRSWXlEV0w2dm1hMlpSZGlZS1FJQkVRS0NBUUFKYklnQk5wL3licklSblQ3MQpQdzZmcnZ5cnRPdzk0WmhQYUZ6TmwydS8rQjdmMVVObTM3aGwzOFZ6ajZrL1VxMFpLbzJ1NnlaREY4NVlxS1o0ClBvWWVpSVVUZ0toVDNtS3VmVWtlM1crdWlBcTFuV05OYWZhRk5uOVA2ZVFrbklSMjl5ZXdEVUxPbTdBU0pXRG4KRUVsdE9xVUtqbUNTNEg2QzRyQTlPVEx5OU9NcVpUbU1BZEFTUFZsRGNtNWVkdWVCSGtDeXdrV1lwb2M5N1o2bQpwZG1hOEFOdkcyMUFJOGFZTThTRzgrTmVPZE1pK2tVdmJYT0FlcHUrWHpHRlZxeWRxL0VWdDl2N2xOS0NEY3N3ClJUVC9aSFlDM2xENHd4ejExOXV1eW9zcnhZTUs0QUhTQ1FaM2Zpb3dRY2dMeU44a1hVT1JBa0NrOVBSVEdtUS8KbTlRQkFvR0JBT0drbEZub0hPSlVpeXJ6ZzM4dTY0OW5oUVl4bHpkaTd1bTNIVHhYWU9UbnFYMnkwbmRzSEc1OQpsdS9ySDl5c3Mzck93NFFadDV5alNoclhRUUFKM0dPMERuVUk5Q2F0dE1reGFCYmRYQjVvNGZEL2VzbXowdGJlCk4zaWdHZGVCZ1gvUEF3b3RCVnFXVGNzbSs5QWR4OHpoV0wvMXJocVU4emxLa2dCazBOQlpBb0dCQU0rNkJETW4KNW1jMnZQUzNOYjRtYWVNYnY5dEVacW1Bb1Q3V1RCaUFnY2ZJMlNIRHdNMUFQYVNGcndManN0bFRSNkhMcW1XSQpVYVRvRVhZbkkwejdOUnhlYUdQSTJWdW5uc0pFSGhMS0tRN2Rsa0dSUE1ib292b21EbXBoZVhOOWtnUU9hRzkzCjdBcnVvTWRuZFFhc0VkTlgvcGVYc3FWamZYMjNZLzB4eG94UkFvR0JBS3lNNmVwbU5EU2JBUUs2TjJGQi8yMnAKZzllUFZZUzFFUTBUanRQS1dTZUQraFRVQ2x0U3JGUitLQ0RnK2o5VzQ1b2xwSkl4eUtUMVZzazdNYlM4UHg4UgpPRHRoTXl5aTg2anBpOVUvM1FneUZqRERYZVdKZ3h6SURFMHZJdEg1bjBPZVRaNWVxYjIrTzMwNzdiMUQ4eVF6CjJuU3MwRzZ1STJnTDJROWNKelhwQW9HQVBSaVgwcytBQUQxR29sUUF2M1MxdTBSbG10Zmg5WjVOaXZPOEJ6VGEKNEdnLzNNRWFscmlLbWN6M1BSWExNTnhDUHFWUU8vcnExaVlqUU41VnJUclRZckphOEN3RHNZdW5LaFFJMkZtVAptdlhnNWh1b2RyemtvKzBUVEhjRm1uQTZBVEZxQXFyTTlDZ1JLNWJtTHlPTXhiQjREbmZwUDdQWm5YSXNkNlU2ClpZRUNnWUJzNWlPQlBWaW4waThVWFhHU09xSjIxOHpmUTZUVmdTYk1TaDErZlFyRkY4TlZRR3g1bkxrcUhXZGkKQXRORDhOYWZ2cFdyT2NQNlpNWksxa29JUXJpa1RWNmd4UStJQXVZSXd6R0tTRVNFR3RyM0JMRVdWRnR2OGpHNgp1d2RJejFTdDFpamRhd3J1VldNNFI1eXJaRVJsb1EyWFFXcGZUbVNibUQ4Y1RUNjNrZz09Ci0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg==:LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklEQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FRMEFNSUlCQ0FLQ0FRRUF0eGdKUENWSUhQanhWamcwNWUydQpaNURqNDNIdDF0WFlUK3VkVVRTL3RrSlgyQzltcWg4aktQdU9mQXV6cWJQK2V6ckF0Q0hDem1ETmxmRTBqZU5TClVUZlFWbFhxNzd3UGh6ajZWNm1lWTNlcmYxK0pUY0dROTVDRTdBbFFmaW9ObVoxTU45MFI5ejZCWUkwUmlUeHUKQVFXckZqdm1rMUsrZ1RRN2dPbVV1WEx1MzJ2R2k1UTRwSUpUcEkwTFhCSnlCclU0SzVlN1ZNWFowdCtvV1Fzdwpjcm05bkJYWVpleVRJcUZ2VmVkbEpxZTArTm9GTzN4T3VUdjFKK2Jxa1Z4UW5CVzNDZ3JHa2NPRlZFa0RDRE44CkZoZ0N5SEpJRDliZkdsNlBJUEp0TE94UlF2M21KK25qS01ycXlrcE9panpZc3JSNFJZeURXTDZ2bWEyWlJkaVkKS1FJQkVRPT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==", 87600U, true), // 10 years max
};

class LicenseManager : public BaseLicenseManager<LicenseKeysRegister>
{
public:
Expand Down
29 changes: 13 additions & 16 deletions sample/main.cc
Original file line number Diff line number Diff line change
Expand Up @@ -27,24 +27,21 @@ int main(int argc, char* argv[])
}
}

LicenseManager licenseManager;
if (!licenseFile.empty()) {
std::ifstream stream(licenseFile);
if (!stream.is_open()) {
std::cerr << "Failed to open file " << licenseFile << std::endl;
} else {

std::string licenseKey = std::string((std::istreambuf_iterator<char>(stream)),
(std::istreambuf_iterator<char>()));
stream.close();
License license;
license.load(licenseKey);
if (!licenseManager.validate(&license, true, signature)) {
std::cout << "License is not valid";
} else {
std::cout << "Licensed to " << license.licensee() << std::endl;
std::cout << "Subscription is active until " << license.formattedExpiry() << std::endl << std::endl;
License license;
try {
if (license.loadFromFile(licenseFile)) {
LicenseManager licenseManager;
if (!licenseManager.validate(&license, true, signature)) {
std::cout << "License is not valid";
} else {
std::cout << "Licensed to " << license.licensee() << std::endl;
std::cout << "Subscription is active until " << license.formattedExpiry() << std::endl << std::endl;
}

}
} catch (LicenseException& e) {
std::cerr << "Exception thrown " << e.what() << std::endl;
}
} else {
std::cout << "License file not provided" << std::endl;
Expand Down
1 change: 1 addition & 0 deletions sample/sample-with-signature.licensepp
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
eyJhdXRob3JpdHlfc2lnbmF0dXJlIjoiOEE5MTVGMTAyQzgzQjJDQUY4MEEwNTEyNTJBQjJEODQ0NUVGM0YyRkFEQjBGOERGOUI1MURFMUUwMDg3NUI2NEZBRDNGOTk3Q0EzREQ3QjJCMTFGRjNBMTk5MEU3RkEwMzU1NTczNUY5QTI5MjIyQ0RFNDJBMjQ1OEM3NEM1MkJGRTRDMzA4N0REOUJDQ0U5MEZDQUJGNUY5NzUzMzA0NTcyQTM1NTNGN0VEOTgyOTE0MUQ1QUNGREQ0QzY4MERGRUVEMjk5QjA1ODBFRkQ5MkFDMTA3NDhDOEI0MUM2QTk0NUI2QTBEOTk0RTNBRjQzRDA1RDBBQzJFRTMzOUZEMDMxMDk3NDU4RjdFNzU2MThDMEEyODE3RDBCMzE3NjUyMkNBQjlBRjdENkYzNzA0NjFFRkIxRUNFOTBENEY5NjkyQkE4QkZDRjk3QTg2OENFNkFDRDRDMzcwQUZBQzg4MTVBMEZEMTA5MzBENTBDN0EzNDk2M0M4NzhFMzA1M0UwRTlGOERERjA2OTA3QTc0RjEyREY4RDc0MEM1M0JBQkE4NzQ4MEY3MzIzOEIxMjE0MUVCNzMyRDg5NjQxRjU3QUZEOTI1OEY0RDI3NTIwNDQyQzVBQzZENjFBODE1NzIzOTE2NUVENTg4OTBBNzgwRURBQzk1Q0U5RTg0NDkwNkYiLCJleHBpcnlfZGF0ZSI6MTgzMDg2MDY5MiwiaXNzdWVfZGF0ZSI6MTUxNTUwMDY5MiwiaXNzdWluZ19hdXRob3JpdHkiOiJzYW1wbGUtbGljZW5zZS1hdXRob3JpdHkiLCJsaWNlbnNlZSI6InNhbXBsZS1saWNlbnNlIiwibGljZW5zZWVfc2lnbmF0dXJlIjoiNjY2MjYyMzQ2NDM0MzgzOTYzMzkzNTM2NjQzNTMwNjUzNTYxNjY2MzY2MzQzOTYzMzMzNTMzMzY2MzM5NjQzNTNBMzU3NTRENEE0QzRDNkE0NTQ1NzM0RDM2NDI3QTU5NEY1MTUyNzY1OTYxMzQ2MjM2NkE2NzY0NEUzNjMxNDI3ODMzMzA2QzU1NzQzMDZFNkQ2RjVBNTkzRDBEMEEwRDBBIn0=
1 change: 1 addition & 0 deletions sample/sample.licensepp
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
eyJhdXRob3JpdHlfc2lnbmF0dXJlIjoiMTY0REM1NzEwMUQzQzM1MUQyOTkxNDU3Q0ZGMkE5N0VBOTAzREMxNjkxQUI2MzYxNDRCQjI1MEE3ODYzMDk1QzM3QUI4NDE1QUQ0QTgxODhCM0U4NDJEREI5QzAzQjlDNUZFMTdGNTc5NzQ4MDJGQUM3QThGMUVDQ0IzQTMxNTczNTQ1QjVBODMyMzJFNzhEQ0E1OTNBQ0IwQjg5RTFGODBEMzE2MEFGQzdEN0ZCMjIwMDE4M0FGRjIyOEY5MTU4NTE0ODAxM0E2MDA0RDJBRTQ0QzlENUQ1NDE2MDFERTBFQjI5ODEyRkJDODk0QkZBRUE2NTlGQjZFNDVDNjJFQjgzQURGMDYwMTAxNUU4OEE0Nzc4M0MxNzNGOTgyRkI5QUREQkRENjlENkU2MzA2NzE3QTg3MjBEMDcyMjAxRTk5QzNCN0U2MTc4NjQ5MURCQ0Y1MUJDQjQwQkJDOEY1OUIyNDhFOUNFQjA4RjI5NURCRjY1MzIzQUQzMzI5MUUzMDZCREE3RDVGNkQ0M0IyNjFBODFDRDUxMDg3NDAxRjE4MkI3ODkwMUUxRjBBNjY3QkI5RjE0NTEzQTMwQzY2RTE4MEM5MzlFMTg4NDY5NkUzOTMwRTREMUM3RjIwQTkzNkUzNzg1REY0RkFEMzdGMUMzMDQzNjFDM0JEMDZGOTQiLCJleHBpcnlfZGF0ZSI6MTgzMDg2MDU4NSwiaXNzdWVfZGF0ZSI6MTUxNTUwMDU4NSwiaXNzdWluZ19hdXRob3JpdHkiOiJzYW1wbGUtbGljZW5zZS1hdXRob3JpdHkiLCJsaWNlbnNlZSI6InNhbXBsZS1saWNlbnNlIn0=
21 changes: 19 additions & 2 deletions src/license.cc
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
//

#include <ctime>
#include <fstream>
#include <iterator>
#include <license++/license.h>
#include <license++/license-exception.h>
#include "src/crypto/base64.h"
Expand All @@ -18,7 +20,6 @@ License::License() :
m_issueDate(0),
m_expiryDate(0)
{

}

License::License(const License& other):
Expand Down Expand Up @@ -47,7 +48,6 @@ std::string License::formattedExpiry() const
return Utils::timevalToString(tval, "%d %b, %Y %H:%m UTC");
}


std::string License::toString()
{
JsonObject::Json j;
Expand Down Expand Up @@ -95,3 +95,20 @@ bool License::load(const std::string& licenseBase64)
}
return false;
}

bool License::loadFromFile(const std::string& licenseFile)
{
if (!licenseFile.empty()) {
std::ifstream stream(licenseFile);
if (!stream.is_open()) {
std::cerr << "Failed to open file " << licenseFile << std::endl;
return false;
} else {
std::string licenseContents = std::string((std::istreambuf_iterator<char>(stream)),
(std::istreambuf_iterator<char>()));
stream.close();
return load(licenseContents);
}
}
return false;
}
37 changes: 21 additions & 16 deletions src/utils.cc
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,18 @@

using namespace licensepp;


const char* Utils::kDays[7] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" };
const char* Utils::kDaysAbbrev[7] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
const char* Utils::kMonths[12] = { "January", "February", "March", "Apri", "May", "June", "July", "August", "September", "October", "November", "December" };
const char* Utils::kMonthsAbbrev[12] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
const char* Utils::kDays[7] = { "Sunday", "Monday", "Tuesday",
"Wednesday", "Thursday", "Friday",
"Saturday" };
const char* Utils::kDaysAbbrev[7] = { "Sun", "Mon", "Tue",
"Wed", "Thu", "Fri", "Sat" };
const char* Utils::kMonths[12] = { "January", "February", "March",
"Apri", "May", "June", "July",
"August", "September", "October",
"November", "December" };
const char* Utils::kMonthsAbbrev[12] = { "Jan", "Feb", "Mar", "Apr",
"May", "Jun", "Jul", "Aug",
"Sep", "Oct", "Nov", "Dec" };

unsigned long long Utils::nowUtc()
{
Expand All @@ -38,7 +45,7 @@ struct ::tm* Utils::buildTimeInfo(struct timeval* currTime, struct ::tm* timeInf
{
#if LICENSEPP_OS_UNIX
time_t rawTime = currTime->tv_sec;
::localtime_r(&rawTime, timeInfo);
::gmtime_r(&rawTime, timeInfo);
return timeInfo;
#else
# ifdef (_MSC_VER)
Expand All @@ -49,12 +56,12 @@ struct ::tm* Utils::buildTimeInfo(struct timeval* currTime, struct ::tm* timeInf
# else
_time64(&t);
# endif
localtime_s(timeInfo, &t);
gmtime_s(timeInfo, &t);
return timeInfo;
# else
// For any other compilers that don't have CRT warnings issue e.g, MinGW or TDM GCC- we use different method
time_t rawTime = currTime->tv_sec;
struct tm* tmInf = localtime(&rawTime);
struct tm* tmInf = gmtime(&rawTime);
*timeInfo = *tmInf;
return timeInfo;
# endif // _MSC_VER
Expand All @@ -73,10 +80,8 @@ char* Utils::convertAndAddToBuff(std::size_t n, int len, char* buf, const char*
*--p = '0';
--len;
}
if (zeroPadded) {
while (p > localBuff && len-- > 0) {
*--p = static_cast<char>('0');
}
while (zeroPadded && p > localBuff && len-- > 0) {
*--p = static_cast<char>('0');
}
return addToBuff(p, buf, bufLim);
}
Expand Down Expand Up @@ -105,19 +110,19 @@ char* Utils::parseFormat(char* buf, std::size_t bufSz, const char* format, const
buf = convertAndAddToBuff(tInfo->tm_mday, 2, buf, bufLim);
continue;
case 'a': // Day of week (short)
buf = addToBuff(Utils::kDaysAbbrev[tInfo->tm_wday], buf, bufLim);
buf = addToBuff(kDaysAbbrev[tInfo->tm_wday], buf, bufLim);
continue;
case 'A': // Day of week (long)
buf = addToBuff(Utils::kDays[tInfo->tm_wday], buf, bufLim);
buf = addToBuff(kDays[tInfo->tm_wday], buf, bufLim);
continue;
case 'M': // month
buf = convertAndAddToBuff(tInfo->tm_mon + 1, 2, buf, bufLim);
continue;
case 'b': // month (short)
buf = addToBuff(Utils::kMonthsAbbrev[tInfo->tm_mon], buf, bufLim);
buf = addToBuff(kMonthsAbbrev[tInfo->tm_mon], buf, bufLim);
continue;
case 'B': // month (long)
buf = addToBuff(Utils::kMonths[tInfo->tm_mon], buf, bufLim);
buf = addToBuff(kMonths[tInfo->tm_mon], buf, bufLim);
continue;
case 'y': // year (two digits)
buf = convertAndAddToBuff(tInfo->tm_year + 1900, 2, buf, bufLim);
Expand Down
1 change: 1 addition & 0 deletions test/license-manager-test.h
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ TEST(LicenseManagerTest, VerificationUsingSecureAuthorityAndSignature)
ASSERT_TRUE(licenseManager.validate(&license, true, "unittest-signature"));
ASSERT_FALSE(licenseManager.validate(&license, true, "wrong-signature"));
ASSERT_FALSE(licenseManager.validate(&license, false));
ASSERT_EQ(license.formattedExpiry(), "06 Jan, 2028 17:11 UTC");
}

#endif // LICENSE_MANAGER_TEST_H

0 comments on commit 59373bb

Please sign in to comment.