115 lines
3.7 KiB
C++
Raw Normal View History

#include <QCoreApplication>
#include <QTextStream>
#include <QDate>
#include <QString>
#include "AuthManager.h"
#include "AuthConfig.h"
#pragma execution_character_set("utf-8")
// 打印使用说明
void printUsage(const QString& programName)
{
QTextStream out(stdout);
out << QString::fromUtf8("授权码生成工具 - 自动获取本机机器码并保存授权") << "\n";
out << QString::fromUtf8("用法: ") << programName << " [过期日期]\n";
out << "\n";
out << QString::fromUtf8("参数说明:\n");
out << QString::fromUtf8(" 过期日期 - 可选,格式为 yyyyMMdd如 20251231\n");
out << QString::fromUtf8(" 不指定则为永久授权\n");
out << "\n";
out << QString::fromUtf8("示例:\n");
out << QString::fromUtf8(" %1\n").arg(programName);
out << QString::fromUtf8(" 生成永久授权码并保存\n");
out << QString::fromUtf8(" %1 20251231\n").arg(programName);
out << QString::fromUtf8(" 生成截止到 2025年12月31日 的授权码并保存\n");
out.flush();
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QTextStream out(stdout);
QTextStream err(stderr);
// 检查是否请求帮助
if (argc >= 2) {
QString arg1 = QString::fromLocal8Bit(argv[1]);
if (arg1 == "-h" || arg1 == "--help" || arg1 == "/?") {
printUsage(argv[0]);
return 0;
}
}
// 自动获取本机机器码
std::string machineCodeStd = AuthManager::GetMachineCode();
QString machineCode = QString::fromStdString(machineCodeStd);
if (machineCode.isEmpty()) {
err << QString::fromUtf8("错误: 无法获取本机机器码\n");
err.flush();
return 1;
}
QString expireDate;
// 解析过期日期参数
if (argc >= 2) {
expireDate = QString::fromLocal8Bit(argv[1]);
// 验证日期格式
if (expireDate.length() != 8) {
err << QString::fromUtf8("错误: 过期日期格式错误,应为 yyyyMMdd如 20251231\n");
err.flush();
return 1;
}
// 验证日期是否有效
QDate date = QDate::fromString(expireDate, "yyyyMMdd");
if (!date.isValid()) {
err << QString::fromUtf8("错误: 无效的日期: ") << expireDate << "\n";
err.flush();
return 1;
}
// 检查日期是否已过期
if (date < QDate::currentDate()) {
err << QString::fromUtf8("警告: 指定的日期已过期: ") << expireDate << "\n";
err.flush();
}
} else {
// 永久授权
expireDate = PERMANENT_LICENSE_DATE;
}
// 生成授权码
std::string licenseKey = AuthManager::GenerateLicenseKey(
machineCodeStd,
expireDate.toStdString()
);
// 保存授权信息
bool saveResult = AuthManager::SaveLicenseInfo(licenseKey, expireDate.toStdString());
// 输出结果
out << QString::fromUtf8("机器码: ") << machineCode << "\n";
if (expireDate == PERMANENT_LICENSE_DATE) {
out << QString::fromUtf8("授权类型: 永久授权\n");
} else {
QDate date = QDate::fromString(expireDate, "yyyyMMdd");
out << QString::fromUtf8("过期日期: ") << date.toString("yyyy-MM-dd") << "\n";
}
out << QString::fromUtf8("授权码: ") << QString::fromStdString(licenseKey) << "\n";
if (saveResult) {
out << QString::fromUtf8("状态: 授权信息已保存成功\n");
} else {
err << QString::fromUtf8("错误: 授权信息保存失败\n");
err.flush();
return 1;
}
out.flush();
return 0;
}