Skip to content

Commit b7c2b0b

Browse files
perf: Assistant cors config
1 parent 0082bd7 commit b7c2b0b

File tree

3 files changed

+26
-2
lines changed

3 files changed

+26
-2
lines changed

backend/apps/system/api/assistant.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from common.utils.time import get_timestamp
1313
from starlette.middleware.cors import CORSMiddleware
1414
from common.core.config import settings
15+
from common.utils.utils import get_origin_from_referer
1516
router = APIRouter(tags=["system/assistant"], prefix="/system/assistant")
1617

1718
@router.get("/info/{id}")
@@ -23,7 +24,7 @@ async def info(request: Request, response: Response, session: SessionDep, trans:
2324
raise RuntimeError(f"assistant application not exist")
2425
db_model = AssistantModel.model_validate(db_model)
2526
response.headers["Access-Control-Allow-Origin"] = db_model.domain
26-
origin = request.headers.get("origin") or request.headers.get("referer")
27+
origin = request.headers.get("origin") or get_origin_from_referer(request)
2728
origin = origin.rstrip('/')
2829
if origin != db_model.domain:
2930
raise RuntimeError(trans('i18n_embedded.invalid_origin', origin = origin or ''))

backend/common/utils/utils.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
from datetime import datetime, timedelta, timezone
77
from logging.handlers import RotatingFileHandler
88
from pathlib import Path
9+
from urllib.parse import urlparse
10+
11+
from fastapi import Request
912
from common.core.config import settings
1013
from typing import Optional
1114

@@ -240,4 +243,24 @@ def prepare_model_arg(origin_arg: str):
240243
return json.loads(origin_arg)
241244
except:
242245
return origin_arg
246+
247+
def get_origin_from_referer(request: Request):
248+
referer = request.headers.get("referer")
249+
if not referer:
250+
return None
251+
252+
try:
253+
parsed = urlparse(referer)
254+
if not parsed.scheme or not parsed.hostname:
255+
return None
256+
port = parsed.port
257+
if port:
258+
if (parsed.scheme == "http" and port != 80) or \
259+
(parsed.scheme == "https" and port != 443):
260+
return f"{parsed.scheme}://{parsed.hostname}:{port}"
261+
262+
return f"{parsed.scheme}://{parsed.hostname}"
263+
except Exception as e:
264+
SQLBotLogUtil.error(f"解析 Referer 出错: {e}")
265+
return referer
243266

backend/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "sqlbot"
3-
version = "0.1.0"
3+
version = "1.0.0"
44
description = ""
55
requires-python = ">=3.10,<3.13"
66
dependencies = [

0 commit comments

Comments
 (0)