细节优化
This commit is contained in:
@@ -23,7 +23,7 @@ from fastapi import Path as PathParam
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from app.api.deps import get_db
|
||||
from app.core.errors import NotFoundError, RateLimitedError
|
||||
from app.core.errors import LinkExpiredError, NotFoundError, RateLimitedError
|
||||
from app.core.rate_limit import check_rate_limit
|
||||
from app.core.security import decrypt_token
|
||||
from app.models.document_category import DocumentCategory
|
||||
@@ -33,6 +33,51 @@ from app.services.kb_public_service import KbPublicService
|
||||
router = APIRouter(prefix="/k", tags=["public"])
|
||||
|
||||
|
||||
async def link_expired_handler(request: Request, exc: LinkExpiredError) -> Response:
|
||||
"""链接过期:HTML 路径返回友好失效页,JSON/MD/TXT 返回对应格式的错误信息。"""
|
||||
path = request.url.path
|
||||
message = "链接已失效,请联系分享者重新生成链接。"
|
||||
|
||||
if path.endswith(".json"):
|
||||
return Response(
|
||||
status_code=410,
|
||||
content=json.dumps({"code": "LINK_EXPIRED", "message": message, "detail": None}, ensure_ascii=False),
|
||||
media_type="application/json",
|
||||
)
|
||||
if path.endswith(".md") or path.endswith(".txt"):
|
||||
return PlainTextResponse(content=message, status_code=410, media_type="text/plain; charset=utf-8")
|
||||
|
||||
return HTMLResponse(
|
||||
status_code=410,
|
||||
content=f"""<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>链接已失效</title>
|
||||
<meta name="robots" content="noindex,nofollow,noarchive">
|
||||
<style>
|
||||
body {{ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
|
||||
display: flex; justify-content: center; align-items: center; min-height: 100vh;
|
||||
margin: 0; background: #f5f7fa; color: #333; text-align: center; }}
|
||||
.box {{ background: #fff; padding: 50px 40px; border-radius: 12px;
|
||||
box-shadow: 0 2px 12px rgba(0,0,0,0.08); max-width: 420px; }}
|
||||
.icon {{ font-size: 52px; margin-bottom: 16px; }}
|
||||
h1 {{ font-size: 20px; margin: 0 0 12px; }}
|
||||
p {{ color: #888; font-size: 14px; line-height: 1.8; margin: 0; }}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="box">
|
||||
<div class="icon">⏰</div>
|
||||
<h1>链接无效或已失效</h1>
|
||||
<p>该知识库链接已过期。<br>请联系分享者重新生成链接后,获取新的访问地址。</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>""",
|
||||
)
|
||||
|
||||
|
||||
def _log_access(db: Session, kb_id: str, path: str, request: Request, doc_id: str | None = None, req_type: str | None = None) -> None:
|
||||
"""记录访问日志(best-effort)。"""
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user