190 lines
4.1 KiB
C++
190 lines
4.1 KiB
C++
#include "LicenseChecker.h"
|
|
|
|
#include "ApplicationSettings.h"
|
|
#include "AppPath.h"
|
|
#include "License.h"
|
|
#include "logging.h"
|
|
#include "utilityApp.h"
|
|
|
|
std::string LicenseChecker::getCurrentLicenseString()
|
|
{
|
|
License license;
|
|
bool isLoaded = license.loadFromEncodedString(
|
|
ApplicationSettings::getInstance()->getLicenseString(), AppPath::getAppPath().str());
|
|
|
|
if (isLoaded)
|
|
{
|
|
return license.getLicenseString();
|
|
}
|
|
|
|
return "";
|
|
}
|
|
|
|
void LicenseChecker::saveCurrentLicenseString(const std::string& licenseString)
|
|
{
|
|
License license;
|
|
bool isLoaded = license.loadFromString(licenseString);
|
|
if (!isLoaded)
|
|
{
|
|
return;
|
|
}
|
|
|
|
utility::saveLicense(&license);
|
|
}
|
|
|
|
bool LicenseChecker::isCurrentLicenseValid()
|
|
{
|
|
return checkCurrentLicense() == LICENSE_VALID;
|
|
}
|
|
|
|
LicenseChecker::LicenseState LicenseChecker::checkCurrentLicense()
|
|
{
|
|
ApplicationSettings* appSettings = ApplicationSettings::getInstance().get();
|
|
if (appSettings == nullptr)
|
|
{
|
|
LOG_ERROR_STREAM(<< "Unable to retrieve app settings");
|
|
return LICENSE_EMPTY;
|
|
}
|
|
|
|
const FilePath appPath = AppPath::getAppPath();
|
|
|
|
if (appPath.empty())
|
|
{
|
|
LOG_ERROR_STREAM(<< "Failed to retrieve app path");
|
|
return LICENSE_EMPTY;
|
|
}
|
|
|
|
std::string licenseString = appSettings->getLicenseString();
|
|
if (licenseString.size() == 0)
|
|
{
|
|
LOG_ERROR_STREAM(<< "No license key available.");
|
|
return LICENSE_EMPTY;
|
|
}
|
|
|
|
if (!License::checkLocation(appPath.getAbsolute().str(), appSettings->getLicenseCheck()))
|
|
{
|
|
LOG_ERROR_STREAM(<< "Application was moved, reenter license key.");
|
|
return LICENSE_MOVED;
|
|
}
|
|
|
|
License license;
|
|
bool isLoaded = license.loadFromEncodedString(licenseString, appPath.str());
|
|
if (!isLoaded)
|
|
{
|
|
LOG_ERROR_STREAM(<< "License is invalid or application was moved.");
|
|
return LICENSE_MOVED;
|
|
}
|
|
|
|
return checkLicense(license);
|
|
}
|
|
|
|
LicenseChecker::LicenseState LicenseChecker::checkLicenseString(const std::string& licenseString)
|
|
{
|
|
if (licenseString.size() == 0)
|
|
{
|
|
return LICENSE_EMPTY;
|
|
}
|
|
|
|
License license;
|
|
bool isLoaded = license.loadFromString(licenseString);
|
|
if (!isLoaded)
|
|
{
|
|
return LICENSE_MALFORMED;
|
|
}
|
|
|
|
license.print();
|
|
|
|
return checkLicense(license);
|
|
}
|
|
|
|
MessageEnteredLicense::LicenseType LicenseChecker::getCurrentLicenseType()
|
|
{
|
|
License license;
|
|
bool isLoaded = license.loadFromEncodedString(
|
|
ApplicationSettings::getInstance()->getLicenseString(), AppPath::getAppPath().str());
|
|
|
|
if (!isLoaded)
|
|
{
|
|
return MessageEnteredLicense::LICENSE_NONE;
|
|
}
|
|
|
|
LicenseState state = checkLicense(license);
|
|
if (state != LICENSE_VALID)
|
|
{
|
|
return MessageEnteredLicense::LICENSE_NONE;
|
|
}
|
|
else if (license.isTestLicense())
|
|
{
|
|
return MessageEnteredLicense::LICENSE_TEST;
|
|
}
|
|
else if (license.isNonCommercialLicenseType())
|
|
{
|
|
return MessageEnteredLicense::LICENSE_NON_COMMERCIAL;
|
|
}
|
|
|
|
return MessageEnteredLicense::LICENSE_COMMERCIAL;
|
|
}
|
|
|
|
MessageEnteredLicense::LicenseType LicenseChecker::getLicenseType(const std::string& licenseString)
|
|
{
|
|
if (licenseString.size() == 0)
|
|
{
|
|
return MessageEnteredLicense::LICENSE_NONE;
|
|
}
|
|
|
|
License license;
|
|
bool isLoaded = license.loadFromString(licenseString);
|
|
if (!isLoaded)
|
|
{
|
|
return MessageEnteredLicense::LICENSE_NONE;
|
|
}
|
|
|
|
LicenseState state = checkLicense(license);
|
|
if (state != LICENSE_VALID)
|
|
{
|
|
return MessageEnteredLicense::LICENSE_NONE;
|
|
}
|
|
else if (license.isTestLicense())
|
|
{
|
|
return MessageEnteredLicense::LICENSE_TEST;
|
|
}
|
|
else if (license.isNonCommercialLicenseType())
|
|
{
|
|
return MessageEnteredLicense::LICENSE_NON_COMMERCIAL;
|
|
}
|
|
|
|
return MessageEnteredLicense::LICENSE_COMMERCIAL;
|
|
}
|
|
|
|
std::string LicenseChecker::getCurrentLicenseTypeString()
|
|
{
|
|
// WARNING: Don't change these string. The server API relies on them.
|
|
switch (getCurrentLicenseType())
|
|
{
|
|
case MessageEnteredLicense::LICENSE_NONE:
|
|
case MessageEnteredLicense::LICENSE_NON_COMMERCIAL:
|
|
return "private";
|
|
case MessageEnteredLicense::LICENSE_TEST:
|
|
return "test";
|
|
case MessageEnteredLicense::LICENSE_COMMERCIAL:
|
|
return "commercial";
|
|
}
|
|
|
|
return "private";
|
|
}
|
|
|
|
LicenseChecker::LicenseState LicenseChecker::checkLicense(License& license)
|
|
{
|
|
if (license.isExpired())
|
|
{
|
|
return LICENSE_EXPIRED;
|
|
}
|
|
|
|
if (license.isValid())
|
|
{
|
|
return LICENSE_VALID;
|
|
}
|
|
|
|
return LICENSE_INVALID;
|
|
}
|