mirror of
https://gh-proxy.org/https://github.com/klinsmaya/SQLBot.git
synced 2026-11-08 01:06:59 +08:00
perf: Login api entrypt password
This commit is contained in:
@@ -3,6 +3,7 @@ from fastapi import APIRouter, Depends, HTTPException
|
||||
from fastapi.security import OAuth2PasswordRequestForm
|
||||
from apps.system.schemas.system_schema import BaseUserDTO
|
||||
from common.core.deps import SessionDep, Trans
|
||||
from common.utils.crypto import sqlbot_decrypt
|
||||
from ..crud.user import authenticate
|
||||
from common.core.security import create_access_token
|
||||
from datetime import timedelta
|
||||
@@ -11,12 +12,14 @@ from common.core.schemas import Token
|
||||
router = APIRouter(tags=["login"], prefix="/login")
|
||||
|
||||
@router.post("/access-token")
|
||||
def local_login(
|
||||
async def local_login(
|
||||
session: SessionDep,
|
||||
trans: Trans,
|
||||
form_data: Annotated[OAuth2PasswordRequestForm, Depends()]
|
||||
) -> Token:
|
||||
user: BaseUserDTO = authenticate(session=session, account=form_data.username, password=form_data.password)
|
||||
origin_account = await sqlbot_decrypt(form_data.username)
|
||||
origin_pwd = await sqlbot_decrypt(form_data.password)
|
||||
user: BaseUserDTO = authenticate(session=session, account=origin_account, password=origin_pwd)
|
||||
if not user:
|
||||
raise HTTPException(status_code=400, detail=trans('i18n_login.account_pwd_error'))
|
||||
if not user.oid or user.oid == 0:
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
from sqlbot_xpack.core import sqlbot_decrypt as xpack_sqlbot_decrypt
|
||||
|
||||
async def sqlbot_decrypt(text: str) -> str:
|
||||
return await xpack_sqlbot_decrypt(text)
|
||||
@@ -29,6 +29,7 @@ async def lifespan(app: FastAPI):
|
||||
init_sqlbot_cache()
|
||||
init_dynamic_cors(app)
|
||||
SQLBotLogUtil.info("✅ SQLBot 初始化完成")
|
||||
await sqlbot_xpack.core.clean_xpack_cache()
|
||||
yield
|
||||
SQLBotLogUtil.info("SQLBot 应用关闭")
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@ dependencies = [
|
||||
"pyyaml (>=6.0.2,<7.0.0)",
|
||||
"fastapi-mcp (>=0.3.4,<0.4.0)",
|
||||
"tabulate>=0.9.0",
|
||||
"sqlbot-xpack==0.0.3.8",
|
||||
"sqlbot-xpack==0.0.3.9",
|
||||
"fastapi-cache2>=0.2.2",
|
||||
"sqlparse>=0.5.3",
|
||||
"redis>=6.2.0",
|
||||
|
||||
Vendored
+1
@@ -8,4 +8,5 @@ export {}
|
||||
declare global {
|
||||
const ElMessage: typeof import('element-plus-secondary/es')['ElMessage']
|
||||
const ElMessageBox: typeof import('element-plus-secondary/es')['ElMessageBox']
|
||||
const LicenseGenerator: any
|
||||
}
|
||||
|
||||
@@ -1,15 +1,19 @@
|
||||
import { request } from '@/utils/request'
|
||||
|
||||
export const AuthApi = {
|
||||
login: (credentials: { username: string; password: string }) =>
|
||||
request.post<{
|
||||
login: (credentials: { username: string; password: string }) => {
|
||||
const entryCredentials = {
|
||||
username: LicenseGenerator.sqlbotEncrypt(credentials.username),
|
||||
password: LicenseGenerator.sqlbotEncrypt(credentials.password),
|
||||
}
|
||||
return request.post<{
|
||||
data: any
|
||||
token: string
|
||||
}>('/login/access-token', credentials, {
|
||||
}>('/login/access-token', entryCredentials, {
|
||||
headers: {
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
},
|
||||
}),
|
||||
})
|
||||
},
|
||||
logout: () => request.post('/auth/logout'),
|
||||
info: () => request.get('/user/info'),
|
||||
}
|
||||
|
||||
@@ -50,12 +50,10 @@ const loadXpackStatic = () => {
|
||||
if (document.getElementById('sqlbot_xpack_static')) {
|
||||
return Promise.resolve()
|
||||
}
|
||||
const url = '/xpack_static/license-generator.umd.js'
|
||||
const url = `/xpack_static/license-generator.umd.js?t=${Date.now()}`
|
||||
return new Promise((resolve, reject) => {
|
||||
request
|
||||
.loadRemoteScript(url, 'sqlbot_xpack_static', () => {
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
LicenseGenerator?.init(import.meta.env.VITE_API_BASE_URL).then(() => {
|
||||
resolve(true)
|
||||
})
|
||||
|
||||
@@ -99,8 +99,7 @@ class HttpService {
|
||||
// Skip auth for xpack_static requests
|
||||
return config
|
||||
}
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
|
||||
const request_key = LicenseGenerator.generate()
|
||||
config.headers['X-SQLBOT-KEY'] = request_key
|
||||
|
||||
@@ -266,8 +265,6 @@ class HttpService {
|
||||
heads['X-SQLBOT-ASSISTANT-ONLINE'] = assistantStore.getOnline
|
||||
}
|
||||
}
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
const request_key = LicenseGenerator.generate()
|
||||
heads['X-SQLBOT-KEY'] = request_key
|
||||
|
||||
|
||||
@@ -51,8 +51,13 @@
|
||||
@selection-change="handleSelectionChange"
|
||||
>
|
||||
<el-table-column type="selection" width="55" />
|
||||
<el-table-column prop="name" :label="$t('user.name')" width="280" />
|
||||
<el-table-column prop="account" :label="$t('user.account')" width="280" />
|
||||
<el-table-column prop="name" show-overflow-tooltip :label="$t('user.name')" width="280" />
|
||||
<el-table-column
|
||||
prop="account"
|
||||
show-overflow-tooltip
|
||||
:label="$t('user.account')"
|
||||
width="280"
|
||||
/>
|
||||
<el-table-column prop="status" :label="$t('user.user_status')" width="180">
|
||||
<template #default="scope">
|
||||
<div class="user-status-container" :class="[scope.row.status ? 'active' : 'disabled']">
|
||||
|
||||
Reference in New Issue
Block a user