update server
This commit is contained in:
+46
-5
@@ -174,6 +174,32 @@ function createApp({
|
||||
return event.adminToken === adminToken ? null : "B端管理令牌无效";
|
||||
}
|
||||
|
||||
function logRevokeAction({ event, licenseId, success, errCode = null }) {
|
||||
console.info("[license] revoke", {
|
||||
time: new Date().toISOString(),
|
||||
requestId: event.requestId || null,
|
||||
type: "revokeLicense",
|
||||
licenseId: licenseId || null,
|
||||
result: success ? "success" : "failed",
|
||||
errCode
|
||||
});
|
||||
}
|
||||
|
||||
function normalizeEventCompat(event) {
|
||||
if (!event || typeof event !== "object" || Array.isArray(event)) return event;
|
||||
const type = String(event.type || event.action || "").trim();
|
||||
const legacyRevokeTypes = new Set(["revoke_license", "licenseRevoke", "revoke"]);
|
||||
if (!legacyRevokeTypes.has(type) && !(event.action === "revokeLicense" && !event.type)) return event;
|
||||
console.warn("[license] legacy revoke request mapped", { type: type || null, requestId: event.requestId || null });
|
||||
return {
|
||||
...event,
|
||||
type: "revokeLicense",
|
||||
licenseId: event.licenseId ?? event.license_id ?? event.id,
|
||||
reason: event.reason ?? event.revocationReason,
|
||||
adminToken: event.adminToken ?? event.admin_token ?? event.token
|
||||
};
|
||||
}
|
||||
|
||||
function signDownload(fileID, expiresAtMs) {
|
||||
return createHmac("sha256", adminToken).update(`${fileID}\n${expiresAtMs}`).digest("hex");
|
||||
}
|
||||
@@ -469,15 +495,30 @@ function createApp({
|
||||
}
|
||||
case "revokeLicense": {
|
||||
const authError = requireAdmin(event);
|
||||
if (authError) return { success: false, errMsg: authError };
|
||||
return store.update((database) => {
|
||||
const record = database.licenses.find((item) => item.licenseId === event.licenseId);
|
||||
if (!record) return { success: false, errMsg: "许可证不存在" };
|
||||
const licenseId = String(event.licenseId || "").trim();
|
||||
if (authError) {
|
||||
const errCode = authError === "B端管理令牌无效"
|
||||
? "ADMIN_TOKEN_INVALID"
|
||||
: "ADMIN_TOKEN_NOT_CONFIGURED";
|
||||
const result = { success: false, errMsg: authError, errCode };
|
||||
logRevokeAction({ event, licenseId, success: false, errCode: result.errCode });
|
||||
return result;
|
||||
}
|
||||
if (!licenseId) {
|
||||
const result = { success: false, errMsg: "licenseId 不能为空", errCode: "LICENSE_ID_REQUIRED" };
|
||||
logRevokeAction({ event, licenseId, success: false, errCode: result.errCode });
|
||||
return result;
|
||||
}
|
||||
const result = await store.update((database) => {
|
||||
const record = database.licenses.find((item) => item.licenseId === licenseId);
|
||||
if (!record) return { success: false, errMsg: "许可证不存在", errCode: "LICENSE_NOT_FOUND" };
|
||||
record.status = "revoked";
|
||||
record.revokedAt = new Date().toISOString();
|
||||
record.revocationReason = String(event.reason || "管理员撤销").trim();
|
||||
return { success: true, license: publicLicense(record) };
|
||||
});
|
||||
logRevokeAction({ event, licenseId, success: result.success, errCode: result.errCode });
|
||||
return result;
|
||||
}
|
||||
case "validateLicense": {
|
||||
const database = await store.read();
|
||||
@@ -978,7 +1019,7 @@ function createApp({
|
||||
|
||||
const apiHandler = async (req, res) => {
|
||||
try {
|
||||
res.json(await dispatch(req.body || {}, req));
|
||||
res.json(await dispatch(normalizeEventCompat(req.body || {}), req));
|
||||
} catch (error) {
|
||||
res.status(400).json({ success: false, errMsg: error.message });
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user