订单需管理员审核后才开通节点,并更新登录页文案。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-10-10 23:04:24 +08:00
parent 8b55b9cf55
commit f329f647c7
22 changed files with 583 additions and 81 deletions
+12 -1
View File
@@ -2,6 +2,7 @@
from __future__ import annotations
import hmac
from datetime import datetime, timedelta
from sqlalchemy import select
@@ -14,10 +15,20 @@ from app.models import ComputeNode, NodeStatus, UptimeInterval
from app.services.common import get_node_by_sn
def record_heartbeat(session: Session, sn: str, now: datetime | None = None) -> ComputeNode:
def assert_node_token(node: ComputeNode, token: str | None) -> None:
"""旧节点没有 Token 时仍按序列号接入。审核开通的节点必须带上专属 Token。"""
if not node.node_token:
return
supplied = (token or "").strip()
if not supplied or not hmac.compare_digest(node.node_token, supplied):
raise AppError("节点 Token 不正确", 403)
def record_heartbeat(session: Session, sn: str, token: str | None = None, now: datetime | None = None) -> ComputeNode:
"""刷新最后活跃时间。离线节点收到心跳后重新打开一段在线区间。"""
moment = now or utcnow()
node = get_node_by_sn(session, sn.strip())
assert_node_token(node, token)
if node.license_expires_at <= moment:
raise AppError("节点授权已到期", 403)