* @brief Capability token produced by LemonSqueezy or Trial after successful * validation. */
| 101 | * validation. |
| 102 | */ |
| 103 | class CommercialToken { |
| 104 | public: |
| 105 | CommercialToken(); |
| 106 | |
| 107 | [[nodiscard]] static const CommercialToken& current(); |
| 108 | static void setCurrent(const CommercialToken& token); |
| 109 | static void clearCurrent(); |
| 110 | |
| 111 | [[nodiscard]] SS_HIDDEN_NOINLINE bool isValid() const; |
| 112 | [[nodiscard]] FeatureTier featureTier() const noexcept; |
| 113 | [[nodiscard]] int graceDaysRemaining() const noexcept; |
| 114 | [[nodiscard]] const QString& variantName() const noexcept; |
| 115 | [[nodiscard]] const QString& instanceName() const noexcept; |
| 116 | |
| 117 | void setFeatureTier(FeatureTier tier); |
| 118 | void setGraceDaysRemaining(int days); |
| 119 | void setVariantName(const QString& name); |
| 120 | void setInstanceName(const QString& name); |
| 121 | void seal(); |
| 122 | |
| 123 | private: |
| 124 | [[nodiscard]] SS_HIDDEN_NOINLINE quint64 computeHmac() const; |
| 125 | [[nodiscard]] SS_HIDDEN_NOINLINE static quint64 deobfuscateSalt(); |
| 126 | |
| 127 | private: |
| 128 | FeatureTier m_tier; |
| 129 | int m_graceDays; |
| 130 | QString m_variantName; |
| 131 | QString m_instanceName; |
| 132 | quint64 m_hmac; |
| 133 | }; |
| 134 | |
| 135 | } // namespace Licensing |