ImagingTools Core SDK
CLicenseControllerComp.h
1// SPDX-License-Identifier: LGPL-2.1-or-later OR GPL-2.0-or-later OR GPL-3.0-or-later OR LicenseRef-ImtCore-Commercial
2#pragma once
3
4
5// Qt includes
6#include <QtCore/QTimer>
7
8// ACF includes
9#include <imod/IModel.h>
10#include <imod/TModelWrap.h>
11#include <ilog/TLoggerCompWrap.h>
12#include <ifile/IFilePersistence.h>
13#include <ifile/IFileNameParam.h>
14
15// ImtCore includes
16#include <imtbase/TModelUpdateBinder.h>
17#include <imtcrypt/IEncryptionKeysProvider.h>
18#include <imtcrypt/IEncryptedFilePersistence.h>
19#include <imtlic/IProductInstanceInfo.h>
20#include <imtlic/ILicenseController.h>
21#include <imtlic/ILicenseStatus.h>
22#include <imtlic/IKeyRing.h>
23
24
25namespace imtlic
26{
27
28
33class CLicenseControllerComp: public QObject, public ilog::CLoggerComponentBase, virtual public ILicenseController
34{
35 Q_OBJECT
36
37public:
38 typedef ilog::CLoggerComponentBase BaseClass;
39
40 I_BEGIN_COMPONENT(CLicenseControllerComp);
41 I_REGISTER_INTERFACE(ILicenseController);
42 I_REGISTER_SUBELEMENT(LicenseStatus);
43 I_REGISTER_SUBELEMENT_INTERFACE(LicenseStatus, imtlic::ILicenseStatus, ExtractLicenseStatus);
44 I_REGISTER_SUBELEMENT_INTERFACE(LicenseStatus, istd::IChangeable, ExtractLicenseStatus);
45 I_REGISTER_SUBELEMENT_INTERFACE(LicenseStatus, imod::IModel, ExtractLicenseStatus);
46 I_ASSIGN(m_productInstanceCompPtr, "ProductInstance", "Instance of the product installation", true, "ProductInstance");
47 I_ASSIGN(m_productInstancePersistenceCompPtr, "ProductInstancePersistence", "Encrypted ersistence for the product instance", true, "ProductInstancePersistence");
48 I_ASSIGN_TO(m_encryptedInstancePersistenceCompPtr, m_productInstancePersistenceCompPtr, true);
49 I_ASSIGN(m_fingerprintInstancePersistenceCompPtr, "FingerprintInstancePersistence", "Fingerprint persistence for the product instance", true, "FingerprintPersistence");
50 I_ASSIGN(m_licensePathCompPtr, "LicenseFilePath", "Path to the license file", true, "LicenseFilePath");
51 I_ASSIGN(m_licenseKeysProviderCompPtr, "LicenseKeys", "Provider of license keys", false, "LicenseKeys");
52 I_ASSIGN(m_keyRingCompPtr, "KeyRing", "Provider/keeper of multiple Keys", false, "KeyRing");
53 I_ASSIGN(m_licenseFingerprintPathCompPtr, "LicenseFingerprintPath", "Folder containing license fingerprint file", false, "LicenseFingerprintPath");
54 I_ASSIGN(m_fingerprintExpirationAttrPtr, "FingerprintExpiration", "Time in days for the license fingerprint expiration", false, 5);
55 I_ASSIGN(m_additionalImportLicenseErrorMessageAttrPtr, "AdditionalImportLicenseErrorMessage", "Additional message for explaining possible license import problems", false, "");
56 I_END_COMPONENT;
57
59
60 // reimplemented (ILicenseController)
61 virtual bool ImportLicense(const QString& licenseFilePath, ilog::IMessageConsumer* logPtr = nullptr) const override;
62 virtual bool CheckLicense(const QByteArray& key) const override;
63 virtual bool CheckLicense(const QByteArray& key, const QString& licensePath) const override;
64
65protected:
66 void OnFingeprintCheckTimer() const;
67
68 // reimplemented (icomp::CComponentBase)
69 virtual void OnComponentCreated() override;
70 virtual void OnComponentDestroyed() override;
71
72private:
73 bool ReadLicenseFromFile(imtlic::IProductInstanceInfo& license) const;
74 bool UpdateFingerprint(const QString& filePath, imtlic::IProductInstanceInfo& license) const;
75 bool LoadFingerprint(const QString& filePath, imtlic::IProductInstanceInfo& license, int& daysUntilExpire) const;
76 QString GetFingerprintPath() const;
77 void OnLicenseKeysUpdated(const istd::IChangeable::ChangeSet& changeSet, const imtcrypt::IEncryptionKeysProvider* licenseKeysProviderPtr);
78
79private:
80 class LicenseStatus: public imtlic::ILicenseStatus
81 {
82 public:
83 LicenseStatus();
84
85 // reimplemented (imtlic::ILicenseStatus)
86 virtual int GetLicenseStatusFlags() const override;
87 virtual void SetLicenseStatusFlags(int licenseStatusFlags) override;
88 virtual QString GetLicenseLocation() const override;
89 virtual void SetLicenseLocation(const QString & licenseLocation) override;
90 virtual int GetGoodwillRemainingDays() const override;
91 virtual void SetGoodwillRemainingDays(int days) override;
92
93 private:
94 int m_licenseStatusFlags;
95 QString m_licenseLocation;
96 int m_goodwillRemainingDays;
97 };
98
99 template <typename InterfaceType>
100 static InterfaceType* ExtractLicenseStatus(CLicenseControllerComp& component)
101 {
102 return &component.m_licenseStatus;
103 }
104
105private:
107 bool m_isInitializing;
108
109 I_REF(imtlic::IProductInstanceInfo, m_productInstanceCompPtr);
110 I_REF(ifile::IFilePersistence, m_fingerprintInstancePersistenceCompPtr);
111 I_REF(ifile::IFilePersistence, m_productInstancePersistenceCompPtr);
112 I_REF(imtcrypt::IEncryptedFilePersistence, m_encryptedInstancePersistenceCompPtr);
113 I_REF(ifile::IFileNameParam, m_licensePathCompPtr);
114 I_REF(ifile::IFileNameParam, m_licenseFingerprintPathCompPtr);
115 I_REF(imtcrypt::IEncryptionKeysProvider, m_licenseKeysProviderCompPtr);
116 I_REF(imtlic::IKeyRing, m_keyRingCompPtr);
117 I_ATTR(int, m_fingerprintExpirationAttrPtr);
118 I_TEXTATTR(m_additionalImportLicenseErrorMessageAttrPtr);
119
120 QTimer m_checkLicenseTimer;
121
122 mutable imod::TModelWrap<LicenseStatus> m_licenseStatus;
123};
124
125
126} // namespace imtlic
127
128
Core licensing domain model providing feature-based product licensing and instance management.