85 lines
2.3 KiB
C++
85 lines
2.3 KiB
C++
#pragma once
|
|
|
|
#include <string>
|
|
#include "UIBranding.h"
|
|
|
|
// License file format version
|
|
const int LICENSE_FILE_VERSION = 1;
|
|
|
|
// Magic constant (警告:BRAND_LICENSE_MAGIC 为系统保留,请勿修改!)
|
|
const char* const LICENSE_MAGIC = BRAND_LICENSE_MAGIC;
|
|
|
|
// License file data structure
|
|
struct LicenseFileData {
|
|
std::string sn;
|
|
std::string password;
|
|
std::string pwdHmac;
|
|
std::string authorization;
|
|
std::string frpConfig; // FRP 代理配置(可选)
|
|
std::string createTime;
|
|
int version;
|
|
|
|
// Helper: check if V2 auth
|
|
bool IsV2Auth() const {
|
|
return pwdHmac.size() >= 3 && pwdHmac.substr(0, 3) == "v2:";
|
|
}
|
|
};
|
|
|
|
// SN match result
|
|
enum class SNMatchResult {
|
|
Match,
|
|
HardwareMismatch,
|
|
IPMismatch
|
|
};
|
|
|
|
// Import result enum
|
|
enum class LicenseImportResult {
|
|
Success = 0,
|
|
FileNotFound,
|
|
InvalidFormat,
|
|
InvalidMagic,
|
|
VersionTooHigh,
|
|
ChecksumMismatch,
|
|
SNMismatchHardware,
|
|
SNMismatchIP,
|
|
IncompleteData
|
|
};
|
|
|
|
// Export license to file
|
|
// filePath: output file path
|
|
// sn: serial number / device ID
|
|
// password: password string
|
|
// pwdHmac: HMAC signature
|
|
// authorization: optional multi-layer auth
|
|
// frpConfig: optional FRP proxy config
|
|
// Returns: true on success
|
|
bool ExportLicenseFile(const std::string& filePath,
|
|
const std::string& sn,
|
|
const std::string& password,
|
|
const std::string& pwdHmac,
|
|
const std::string& authorization = "",
|
|
const std::string& frpConfig = "");
|
|
|
|
// Import license from file
|
|
// filePath: input file path
|
|
// outData: output license data
|
|
// outError: output error message
|
|
// Returns: LicenseImportResult
|
|
LicenseImportResult ImportLicenseFile(const std::string& filePath,
|
|
LicenseFileData& outData,
|
|
std::string& outError);
|
|
|
|
// Apply license data to current program
|
|
// data: license data to apply
|
|
// Returns: true on success
|
|
bool ApplyLicenseData(const LicenseFileData& data);
|
|
|
|
// Get import error message
|
|
std::string GetImportErrorMessage(LicenseImportResult result);
|
|
|
|
// Validate SN (hardware ID or IP)
|
|
SNMatchResult ValidateLicenseSN(const std::string& licenseSN);
|
|
|
|
// Check if SN is IPv4 format
|
|
bool IsIPv4Format(const std::string& sn);
|