fix: show leave-license interstitial instead of blank black page.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-07-17 18:46:16 +08:00
parent bc00671382
commit 1664693d3d
2 changed files with 93 additions and 11 deletions
+44 -5
View File
@@ -2,11 +2,12 @@
from __future__ import annotations
import html as html_lib
import os
from pathlib import Path
from fastapi import FastAPI, Request
from fastapi.responses import HTMLResponse, JSONResponse, RedirectResponse
from fastapi.responses import HTMLResponse, JSONResponse, RedirectResponse, Response
from lib.license.license_lib import (
get_device_id,
@@ -17,6 +18,7 @@ from lib.license.license_lib import (
)
_TEMPLATE_PATH = Path(__file__).resolve().parent / "templates" / "license.html"
_POST_LICENSE_TARGET = "/login"
def _license_public_path(path: str) -> bool:
@@ -47,6 +49,43 @@ def _license_manage_requested(request: Request) -> bool:
)
def _locally_licensed() -> bool:
return bool(get_license_status(skip_remote=True).get("valid"))
def _leave_license_response(target: str = _POST_LICENSE_TARGET) -> Response:
safe = html_lib.escape(target, quote=True)
body = f"""<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta http-equiv="refresh" content="0;url={safe}">
<title>已授权</title>
<style>
body {{
margin: 0; min-height: 100vh; display: flex; align-items: center; justify-content: center;
background: #0a0a10; color: #e8e8f0; font-family: sans-serif;
}}
a {{ color: #7ec8ff; }}
</style>
</head>
<body>
<p>已激活,正在进入系统… <a href="{safe}">点击进入</a></p>
<script>location.replace({target!r});</script>
</body>
</html>
"""
return Response(
content=body,
status_code=302,
headers={
"Location": target,
"Cache-Control": "no-store, no-cache, must-revalidate",
"Content-Type": "text/html; charset=utf-8",
},
)
def install_license_middleware(app: FastAPI) -> None:
@app.get("/health")
async def _license_health():
@@ -76,8 +115,8 @@ def install_license_middleware(app: FastAPI) -> None:
@app.api_route("/license", methods=["GET", "POST"])
async def _license_page(request: Request):
# 已授权:默认不可再进授权页(续费/换机:/license?renew=1
if is_license_valid() and request.method == "GET" and not _license_manage_requested(request):
return RedirectResponse(url="/", status_code=302)
if _locally_licensed() and request.method == "GET" and not _license_manage_requested(request):
return _leave_license_response()
msg = ""
err = ""
@@ -87,9 +126,9 @@ def install_license_middleware(app: FastAPI) -> None:
ckey = str(form.get("client_api_key") or "").strip()
result = redeem_code(code, client_api_key=ckey or None)
if result.get("ok"):
return RedirectResponse(url="/", status_code=302)
return _leave_license_response()
err = result.get("message") or "激活失败"
status = get_license_status()
status = get_license_status(skip_remote=True)
html = _TEMPLATE_PATH.read_text(encoding="utf-8")
filled = (
html.replace("{{ device_id }}", get_device_id())