11
22
3+ from fastapi import FastAPI
34from sqlmodel import Session , select
45from apps .datasource .models .datasource import CoreDatasource
56from apps .system .models .system_model import AssistantModel
67from apps .system .schemas .auth import CacheName , CacheNamespace
78from apps .system .schemas .system_schema import UserInfoDTO
89from common .core .sqlbot_cache import cache
9-
10+ from common .core .db import engine
11+ from starlette .middleware .cors import CORSMiddleware
12+ from common .core .config import settings
1013
1114@cache (namespace = CacheNamespace .EMBEDDED_INFO , cacheName = CacheName .ASSISTANT_INFO , keyExpression = "assistant_id" )
1215async def get_assistant_info (* , session : Session , assistant_id : int ) -> AssistantModel | None :
@@ -23,3 +26,28 @@ def get_assistant_ds(*, session: Session, assistant: AssistantModel):
2326 # filter private ds if offline
2427 return db_ds_list
2528 pass
29+
30+
31+ def init_dynamic_cors (app : FastAPI ):
32+ try :
33+ with Session (engine ) as session :
34+ list_result = session .exec (select (AssistantModel ).order_by (AssistantModel .create_time )).all ()
35+ seen = set ()
36+ unique_domains = []
37+ for item in list_result :
38+ if item .domain :
39+ for domain in item .domain .split (',' ):
40+ domain = domain .strip ()
41+ if domain and domain not in seen :
42+ seen .add (domain )
43+ unique_domains .append (domain )
44+ cors_middleware = None
45+ for middleware in app .user_middleware :
46+ if middleware .cls == CORSMiddleware :
47+ cors_middleware = middleware
48+ break
49+ if cors_middleware :
50+ updated_origins = list (set (settings .all_cors_origins + unique_domains ))
51+ cors_middleware .kwargs ['allow_origins' ] = updated_origins
52+ except Exception as e :
53+ return False , e
0 commit comments