From 0cce311caecb68ec005b9f162b00a4fae72fa9fd Mon Sep 17 00:00:00 2001 From: jingrow Date: Tue, 10 Mar 2026 23:22:36 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=99=BB=E9=99=86=E7=9B=B8?= =?UTF-8?q?=E5=85=B3api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/jingrow/jingrow/api/auth_api.py | 7 +++-- apps/jingrow/jingrow/sessions.py | 43 ++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 apps/jingrow/jingrow/sessions.py diff --git a/apps/jingrow/jingrow/api/auth_api.py b/apps/jingrow/jingrow/api/auth_api.py index 5e3f8a7..a3f0b8f 100644 --- a/apps/jingrow/jingrow/api/auth_api.py +++ b/apps/jingrow/jingrow/api/auth_api.py @@ -248,13 +248,16 @@ async def get_user_permissions_route(session_cookie: Optional[str] = Depends(get @router.post("/api/action/login") async def saas_login(request: Request): """兼容 SaaS 版前端登录""" + from urllib.parse import unquote + content_type = request.headers.get('content-type', '') if 'application/x-www-form-urlencoded' in content_type: body = await request.body() params = dict(pair.split('=', 1) for pair in body.decode().split('&') if '=' in pair) - username = params.get('usr', params.get('username', '')) - password = params.get('pwd', params.get('password', '')) + # URL 解码参数 + username = unquote(params.get('usr', params.get('username', ''))) + password = unquote(params.get('pwd', params.get('password', ''))) else: data = await request.json() username = data.get('usr', data.get('username', '')) diff --git a/apps/jingrow/jingrow/sessions.py b/apps/jingrow/jingrow/sessions.py new file mode 100644 index 0000000..14bf1ad --- /dev/null +++ b/apps/jingrow/jingrow/sessions.py @@ -0,0 +1,43 @@ +# Copyright (c) 2025, JINGROW and contributors +# For license information, please see license.txt + +""" +会话相关白名单函数 - 转发到 SaaS 端 +""" + +import jingrow +import requests +from jingrow.config import Config +from jingrow.utils.auth import get_request_session_cookie + + +@jingrow.whitelist() +def get_boot_info(): + """获取启动信息 - 转发到 SaaS 端""" + url = f"{Config.jingrow_server_url}/api/action/jingrow.sessions.get_boot_info" + headers = {"Accept": "application/json"} + + session_cookie = get_request_session_cookie() + if session_cookie: + headers["Cookie"] = f"sid={session_cookie}" + + resp = requests.get(url, headers=headers, timeout=30) + if resp.status_code == 200: + return resp.json().get("message", {}) + return {} + + +@jingrow.whitelist() +def get_translations(): + """获取翻译 - 转发到 SaaS 端""" + url = f"{Config.jingrow_server_url}/api/action/jingrow.sessions.get_translations" + headers = {"Accept": "application/json"} + + session_cookie = get_request_session_cookie() + if session_cookie: + headers["Cookie"] = f"sid={session_cookie}" + + resp = requests.get(url, headers=headers, timeout=30) + if resp.status_code == 200: + return resp.json().get("message", {}) + return {}