fe5aa5bbf0
update-client-hardening 四工作流合入(构建/静态检查已过): - 配置:不可变产品策略经 UpdateClientResources.cmake 归一化校验后 内嵌 qrc(URL/相对路径/主程序必须落 install_root/版本/UUID 格式, CMake override 写入前复验);可变机器状态迁系统级原生存储; 运行目录不再落可编辑 app_config.json。 - i18n:生产源全英文(no-Han 检查 41/41),中文进 translations/ zh_CN 目录;翻译加载收敛 Common/TranslationHelper 唯一入口; Bootstrap 补资源文件。 - 依赖:Qt/OpenSSL/架构/Perl 机器路径改 imported targets + UpdateClientDependencies.cmake,3rdparty 由父工程契约供给。 - 清理:旧 README/SDK README/3 个重复 PowerShell 打包脚本/PDF 提取 文本删除,canonical README + 5 份结构化英文文档替代;Launcher requireAdministrator manifest;统一 MSVC /utf-8 删运行时编码设置。
36 lines
1.1 KiB
C++
36 lines
1.1 KiB
C++
#pragma once
|
|
#include <QString>
|
|
#include <QJsonObject>
|
|
|
|
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;
|
|
bool isApplicable(const QString& appId, const QString& channel,
|
|
const QString& currentVersion) 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;
|
|
};
|