#pragma once #include "SystemParamsProvider.h" #include #include #include #include struct ActivationData { std::string activationId; std::string productId; 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(); std::string buildActivationRequest(); bool isActivated() const { return m_activationData.has_value(); } std::optional activationNumber() const { return m_activationData.has_value() ? m_activationData->activationId : std::optional(); } auto licensedModules() { if (!isActivated()) { throw std::runtime_error("Not active"); } return m_activationData->licensedModules; } private: bool loadActivationData(); bool validateActivationData(const ActivationData& activationData); private: SystemParamsProvider& m_systemParamsProvider; SystemParams m_systemParams; std::string m_licenseFile; std::optional m_activationData; };