#pragma once #include #include class PolicyHelper { public: explicit PolicyHelper(const QString& baseDir); bool loadPolicy(const QString& relativePath = "config/version_policy.dat"); bool loadPolicyObject(const QJsonObject& policy, const QString& signedText = QString()); bool savePolicy(const QString& relativePath = "config/version_policy.dat") const; bool isValid() const; QString errorString() const; bool isVersionAllowed(const QString& currentVersion) const; bool allowRun() const; bool forceUpdate() const; bool allowRollback() const; bool isOfflineAllowed() const; bool isExpired() const; qint64 policySeq() const; QString message() const; private: QByteArray canonicalPolicyBytes(const QJsonObject& obj) const; bool verifySignature(const QByteArray& payload, const QString& signatureBase64) const; QString m_baseDir; QJsonObject m_policy; QString m_signedText; mutable QString m_error; bool m_loaded = false; };