#pragma once #include "HTTPClient.h" #include "ModuleUpdate.h" #include "SystemParamsProvider.h" #include #include #include struct ActivationData { std::string activationId; std::string appId; SystemParams systemParams; std::set licensedModules; }; std::optional validateLicenseKey(const std::string& licenseKey); class LicenseClient { public: explicit LicenseClient(SystemParamsProvider& systemParamsProvider, const std::string& licenseFile); virtual ~LicenseClient(); public: void init(); bool isActivated() const { return m_activationData.has_value(); } bool tryPreactivate(HTTPClient &httpClient); bool activate(HTTPClient &httpClient, const std::string& licenseNumber ); auto licensedModules() { if (!isActivated()) { throw std::runtime_error("Not active"); } return m_activationData->licensedModules; } std::vector checkForUpdates(HTTPClient &httpClient, const std::map& currentVersions); private: bool loadActivationData(); bool validateActivationData(const ActivationData& activationData); private: SystemParamsProvider& m_systemParamsProvider; SystemParams m_systemParams; std::string m_licenseFile; std::optional m_activationData; };