1313from common .core import security
1414from common .core .config import settings
1515from common .core .schemas import TokenPayload
16+ from common .utils .locale import I18n
1617from common .utils .utils import SQLBotLogUtil
1718from common .utils .whitelist import whiteUtils
1819from fastapi .security .utils import get_authorization_scheme_param
20+ from common .core .deps import get_i18n
1921class TokenMiddleware (BaseHTTPMiddleware ):
2022
2123
@@ -29,27 +31,31 @@ async def dispatch(self, request, call_next):
2931 return await call_next (request )
3032 assistantTokenKey = settings .ASSISTANT_TOKEN_KEY
3133 assistantToken = request .headers .get (assistantTokenKey )
34+ trans = await get_i18n (request )
3235 #if assistantToken and assistantToken.lower().startswith("assistant "):
3336 if assistantToken :
3437 validator : tuple [any ] = await self .validateAssistant (assistantToken )
3538 if validator [0 ]:
3639 request .state .current_user = validator [1 ]
3740 request .state .assistant = validator [2 ]
3841 return await call_next (request )
39- return JSONResponse (f"Unauthorized:[{ validator [1 ]} ]" , status_code = 401 , headers = {"Access-Control-Allow-Origin" : "*" })
42+ message = trans ('i18n_permission.authenticate_invalid' , msg = validator [1 ])
43+ return JSONResponse (message , status_code = 401 , headers = {"Access-Control-Allow-Origin" : "*" })
4044 #validate pass
4145 tokenkey = settings .TOKEN_KEY
4246 token = request .headers .get (tokenkey )
43- validate_pass , data = await self .validateToken (token )
47+ validate_pass , data = await self .validateToken (token , trans )
4448 if validate_pass :
4549 request .state .current_user = data
4650 return await call_next (request )
47- return JSONResponse (f"Unauthorized:[{ data } ]" , status_code = 401 , headers = {"Access-Control-Allow-Origin" : "*" })
51+
52+ message = trans ('i18n_permission.authenticate_invalid' , msg = data )
53+ return JSONResponse (message , status_code = 401 , headers = {"Access-Control-Allow-Origin" : "*" })
4854
4955 def is_options (self , request : Request ):
5056 return request .method == "OPTIONS"
5157
52- async def validateToken (self , token : Optional [str ]):
58+ async def validateToken (self , token : Optional [str ], trans : I18n ):
5359 if not token :
5460 return False , f"Miss Token[{ settings .TOKEN_KEY } ]!"
5561 schema , param = get_authorization_scheme_param (token )
@@ -63,17 +69,15 @@ async def validateToken(self, token: Optional[str]):
6369 with Session (engine ) as session :
6470 session_user = await get_user_info (session = session , user_id = token_data .id )
6571 if not session_user :
66- raise Exception (f"User not found with id: { token_data .id } " )
72+ message = trans ('i18n_not_exist' , msg = trans ('i18n_user.account' ))
73+ raise Exception (message )
6774 session_user = UserInfoDTO .model_validate (session_user )
6875 if session_user .status != 1 :
69- raise Exception (f"User is not active!" )
76+ message = trans ('i18n_login.user_disable' , msg = trans ('i18n_concat_admin' ))
77+ raise Exception (message )
7078 if not session_user .oid or session_user .oid == 0 :
71- raise Exception (f"User default space is not set!" )
72- """ if token_data.oid != session_user.oid:
73- raise HTTPException(
74- status_code=401,
75- detail="Default space has been changed, please login again!"
76- ) """
79+ message = trans ('i18n_login.no_associated_ws' , msg = trans ('i18n_concat_admin' ))
80+ raise Exception (message )
7781 return True , session_user
7882 except Exception as e :
7983 SQLBotLogUtil .exception (f"Token validation error: { str (e )} " )
0 commit comments