feat: 完成 Passkey 能力与前后台加载优化
更新说明:\n1. 新增用户端与管理员端 Passkey 登录/注册/设备管理(最多3台,支持设备备注、删除设备)。\n2. 修复 Passkey 注册与登录流程中的浏览器/证书/CSRF相关问题,增强错误提示。\n3. 前台登录页改为独立入口,首屏仅加载必要资源,其他页面按需加载。\n4. 系统配置页改为静默获取金山文档状态,避免首屏阻塞,并优化状态展示为“检测中/已登录/未登录/异常”。\n5. 补充后端接口与页面渲染适配,修复多入口下样式依赖注入问题。\n6. 同步更新前后台构建产物与相关静态资源。
This commit is contained in:
@@ -9,7 +9,7 @@ from typing import Iterator
|
||||
import database
|
||||
from app_config import get_config
|
||||
from app_security import is_safe_path
|
||||
from flask import Blueprint, jsonify, send_from_directory
|
||||
from flask import Blueprint, jsonify, request, send_from_directory
|
||||
from flask_login import current_user, login_required
|
||||
from PIL import Image, ImageOps
|
||||
from services.client_log import log_to_client
|
||||
@@ -100,6 +100,27 @@ def _remove_thumbnail(filename: str) -> None:
|
||||
os.remove(thumb_path)
|
||||
|
||||
|
||||
def _parse_optional_pagination(default_limit: int = 24, *, max_limit: int = 100) -> tuple[int | None, int | None, bool]:
|
||||
limit_raw = request.args.get("limit")
|
||||
offset_raw = request.args.get("offset")
|
||||
if (limit_raw is None) and (offset_raw is None):
|
||||
return None, None, False
|
||||
|
||||
try:
|
||||
limit = int(limit_raw if limit_raw is not None else default_limit)
|
||||
except (ValueError, TypeError):
|
||||
limit = default_limit
|
||||
limit = max(1, min(limit, max_limit))
|
||||
|
||||
try:
|
||||
offset = int(offset_raw if offset_raw is not None else 0)
|
||||
except (ValueError, TypeError):
|
||||
offset = 0
|
||||
offset = max(0, offset)
|
||||
|
||||
return limit, offset, True
|
||||
|
||||
|
||||
@api_screenshots_bp.route("/api/screenshots", methods=["GET"])
|
||||
@login_required
|
||||
def get_screenshots():
|
||||
@@ -128,6 +149,12 @@ def get_screenshots():
|
||||
for item in screenshots:
|
||||
item.pop("_created_ts", None)
|
||||
|
||||
limit, offset, paged = _parse_optional_pagination(default_limit=24, max_limit=100)
|
||||
if paged:
|
||||
total = len(screenshots)
|
||||
items = screenshots[offset : offset + limit]
|
||||
return jsonify({"items": items, "total": total, "limit": limit, "offset": offset})
|
||||
|
||||
return jsonify(screenshots)
|
||||
except Exception as e:
|
||||
return jsonify({"error": str(e)}), 500
|
||||
|
||||
Reference in New Issue
Block a user