This commit is contained in:
parent
a4a4861275
commit
b2c0c1c231
|
|
@ -16,10 +16,12 @@ func GenerateLicenseHandler(db storage.Database) fiber.Handler {
|
|||
return fiber.NewError(fiber.StatusBadRequest, "Invalid request body")
|
||||
}
|
||||
|
||||
if req.MachineID == "" || req.Expiry == "" {
|
||||
return fiber.NewError(fiber.StatusBadRequest, "Missing required fields")
|
||||
if req.MachineID == "" {
|
||||
return fiber.NewError(fiber.StatusBadRequest, "Missing machine ID")
|
||||
}
|
||||
|
||||
// ⚠️ 此时不设置 Expiry 字段,由 Activate 阶段设置
|
||||
|
||||
payloadBytes, err := json.Marshal(req)
|
||||
if err != nil {
|
||||
return fiber.NewError(fiber.StatusInternalServerError, "Failed to encode payload")
|
||||
|
|
@ -68,15 +70,26 @@ func ActivateLicenseHandler(db storage.Database) fiber.Handler {
|
|||
return fiber.NewError(fiber.StatusForbidden, "This machine is already activated")
|
||||
}
|
||||
|
||||
expiry, err := time.Parse("2006-01-02", req.Expiry)
|
||||
if err != nil || time.Now().After(expiry) {
|
||||
return fiber.NewError(fiber.StatusForbidden, "License is invalid or expired")
|
||||
// ✅ 设置新的 Expiry 字段(激活日起算 365 天)
|
||||
req.Expiry = time.Now().AddDate(1, 0, 0).Format("2006-01-02")
|
||||
|
||||
// ✅ 重新生成 payload 和签名
|
||||
newPayload, err := json.Marshal(req)
|
||||
if err != nil {
|
||||
return fiber.NewError(fiber.StatusInternalServerError, "Failed to re-encode payload")
|
||||
}
|
||||
newSignature, err := SignPayload(newPayload)
|
||||
if err != nil {
|
||||
return fiber.NewError(fiber.StatusInternalServerError, "Signing failed")
|
||||
}
|
||||
|
||||
// 绑定激活记录
|
||||
db.SaveActivation(req.MachineID, lf.Payload+"."+lf.Signature)
|
||||
db.SaveActivation(req.MachineID, base64.StdEncoding.EncodeToString(newPayload)+"."+newSignature)
|
||||
|
||||
return c.JSON(fiber.Map{"status": "success", "message": "License activated successfully"})
|
||||
return c.JSON(fiber.Map{
|
||||
"status": "success",
|
||||
"message": "License activated successfully",
|
||||
"expiry": req.Expiry,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -92,25 +105,20 @@ func ValidateLicenseHandler(db storage.Database) fiber.Handler {
|
|||
return fiber.NewError(fiber.StatusBadRequest, "Invalid base64 payload")
|
||||
}
|
||||
|
||||
// 1. 校验签名
|
||||
if !VerifySignature(GetPublicKey(), payloadBytes, lf.Signature) {
|
||||
return fiber.NewError(fiber.StatusUnauthorized, "Invalid license signature")
|
||||
}
|
||||
|
||||
// 2. 解析 payload
|
||||
var req LicenseRequest
|
||||
if err := json.Unmarshal(payloadBytes, &req); err != nil {
|
||||
return fiber.NewError(fiber.StatusBadRequest, "Malformed payload")
|
||||
}
|
||||
|
||||
// 3. 验证是否过期
|
||||
expiry, err := time.Parse("2006-01-02", req.Expiry)
|
||||
if err != nil || time.Now().After(expiry) {
|
||||
return fiber.NewError(fiber.StatusForbidden, "License expired")
|
||||
}
|
||||
|
||||
// ✅ 4. 关键补充:校验调用者的 MachineID 与 license 中一致
|
||||
// 从请求 Header 或 Body 读取实际设备 ID(假设从 Header 传)
|
||||
clientMachineID := c.Get("X-Machine-ID")
|
||||
if clientMachineID == "" {
|
||||
return fiber.NewError(fiber.StatusBadRequest, "Missing machine ID in header")
|
||||
|
|
@ -122,8 +130,7 @@ func ValidateLicenseHandler(db storage.Database) fiber.Handler {
|
|||
return c.JSON(fiber.Map{
|
||||
"valid": true,
|
||||
"features": req.Features,
|
||||
// "machine": req.MachineID,
|
||||
"expiry": req.Expiry,
|
||||
"expiry": req.Expiry,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue