From 2a2f4747efcab45819442456f1e286be31e77eaa Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Thu, 11 Dec 2025 09:05:52 +0800 Subject: [PATCH] feat(X-Pack): Supports third-party platforms as the default login method --- backend/apps/system/api/parameter.py | 6 +- backend/apps/system/crud/parameter_manage.py | 4 + backend/common/utils/whitelist.py | 1 + frontend/src/router/index.ts | 5 ++ frontend/src/router/watch.ts | 4 +- frontend/src/views/login/xpack/Handler.vue | 84 +++++++++---------- frontend/src/views/login/xpack/QrcodeLdap.vue | 3 + 7 files changed, 61 insertions(+), 46 deletions(-) diff --git a/backend/apps/system/api/parameter.py b/backend/apps/system/api/parameter.py index dc335281..af254d71 100644 --- a/backend/apps/system/api/parameter.py +++ b/backend/apps/system/api/parameter.py @@ -3,11 +3,15 @@ from sqlbot_xpack.config.model import SysArgModel -from apps.system.crud.parameter_manage import get_parameter_args, save_parameter_args +from apps.system.crud.parameter_manage import get_groups, get_parameter_args, save_parameter_args from common.core.deps import SessionDep router = APIRouter(tags=["system/parameter"], prefix="/system/parameter") +@router.get("/login") +async def get_login_args(session: SessionDep) -> list[SysArgModel]: + return await get_groups(session, "login") + @router.get("") async def get_args(session: SessionDep) -> list[SysArgModel]: return await get_parameter_args(session) diff --git a/backend/apps/system/crud/parameter_manage.py b/backend/apps/system/crud/parameter_manage.py index 118dad51..f80edd29 100644 --- a/backend/apps/system/crud/parameter_manage.py +++ b/backend/apps/system/crud/parameter_manage.py @@ -9,6 +9,10 @@ async def get_parameter_args(session: SessionDep) -> list[SysArgModel]: group_args = await get_group_args(session=session) return [x for x in group_args if not x.pkey.startswith('appearance.')] +async def get_groups(session: SessionDep, flag: str) -> list[SysArgModel]: + group_args = await get_group_args(session=session, flag=flag) + return group_args + async def save_parameter_args(session: SessionDep, request: Request): allow_file_mapping = { """ "test_logo": { "types": [".jpg", ".jpeg", ".png", ".svg"], "size": 5 * 1024 * 1024 } """ diff --git a/backend/common/utils/whitelist.py b/backend/common/utils/whitelist.py index b6565ac0..d9df569b 100644 --- a/backend/common/utils/whitelist.py +++ b/backend/common/utils/whitelist.py @@ -36,6 +36,7 @@ "/system/authentication/platform/status", "/system/authentication/login/*", "/system/authentication/sso/*", + "/system/parameter/login" ] class WhitelistChecker: diff --git a/frontend/src/router/index.ts b/frontend/src/router/index.ts index 275d33a4..51f8aba4 100644 --- a/frontend/src/router/index.ts +++ b/frontend/src/router/index.ts @@ -231,6 +231,11 @@ export const routes = [ name: 'assistantTest', component: assistantTest, }, + { + path: '/admin-login', + name: 'admin-login', + component: login, + }, { path: '/401', name: '401', diff --git a/frontend/src/router/watch.ts b/frontend/src/router/watch.ts index 7c63f131..432840b3 100644 --- a/frontend/src/router/watch.ts +++ b/frontend/src/router/watch.ts @@ -8,7 +8,7 @@ import type { Router } from 'vue-router' const appearanceStore = useAppearanceStoreWithOut() const userStore = useUserStore() const { wsCache } = useCache() -const whiteList = ['/login'] +const whiteList = ['/login', '/admin-login'] const assistantWhiteList = ['/assistant', '/embeddedPage', '/401'] export const watchRouter = (router: Router) => { router.beforeEach(async (to: any, from: any, next: any) => { @@ -40,7 +40,7 @@ export const watchRouter = (router: Router) => { next('/chat') return } - if (to.path === '/login') { + if (to.path === '/login' || to.path === '/admin-login') { console.info(from) next('/chat') } else { diff --git a/frontend/src/views/login/xpack/Handler.vue b/frontend/src/views/login/xpack/Handler.vue index 90d8b5ce..e564583c 100644 --- a/frontend/src/views/login/xpack/Handler.vue +++ b/frontend/src/views/login/xpack/Handler.vue @@ -51,7 +51,7 @@