diff --git a/src/frontend/src/controllers/API/pro.ts b/src/frontend/src/controllers/API/pro.ts index dc2d32843..3d196f505 100644 --- a/src/frontend/src/controllers/API/pro.ts +++ b/src/frontend/src/controllers/API/pro.ts @@ -78,5 +78,16 @@ export function getUserGroupsProApi() { // GET sso URL export function getSSOurlApi() { // return Promise.resolve(url) - return axios.get(`/api/oauth2/list`).then(res => res.wx); + return axios.get(`/api/oauth2/list`) +} + +export async function getKeyApi() { + return await axios.get('/api/getkey') +} + +export async function ldapLoginApi(username:string, password:string) { + return await axios.post('/api/oauth2/ldap', { + username, + password + }) } \ No newline at end of file diff --git a/src/frontend/src/pages/LoginPage/login.tsx b/src/frontend/src/pages/LoginPage/login.tsx index 8313491fa..833113427 100644 --- a/src/frontend/src/pages/LoginPage/login.tsx +++ b/src/frontend/src/pages/LoginPage/login.tsx @@ -11,8 +11,10 @@ import { useNavigate } from 'react-router-dom'; import { getCaptchaApi, loginApi, registerApi } from "../../controllers/API/user"; import { captureAndAlertRequestErrorHoc } from "../../controllers/request"; import LoginBridge from './loginBridge'; -import { PWD_RULE, handleEncrypt } from './utils'; +import { PWD_RULE, handleEncrypt, handleLdapEncrypt } from './utils'; import { locationContext } from '@/contexts/locationContext'; +import { ldapLoginApi } from '@/controllers/API/pro'; + export const LoginPage = () => { // const { setErrorData, setSuccessData } = useContext(alertContext); const { t, i18n } = useTranslation(); @@ -41,6 +43,7 @@ export const LoginPage = () => { getCaptchaApi().then(setCaptchaData) }; + const ldapRef = useRef(false) const handleLogin = async () => { const error = [] const [mail, pwd] = [mailRef.current.value, pwdRef.current.value] @@ -58,6 +61,12 @@ export const LoginPage = () => { // }); const encryptPwd = await handleEncrypt(pwd) + if(ldapRef.current) { + const encryptLdapPwd = await handleLdapEncrypt(pwd) + captureAndAlertRequestErrorHoc(ldapLoginApi(mail, encryptLdapPwd).then(res => console.log(res))) + fetchCaptchaData() + return + } captureAndAlertRequestErrorHoc(loginApi(mail, encryptPwd, captchaData.captcha_key, captchaRef.current?.value).then((res: any) => { // setUser(res.data) localStorage.setItem('ws_token', res.access_token) @@ -196,7 +205,7 @@ export const LoginPage = () => { disabled={isLoading} onClick={handleRegister} >{t('login.registerButton')} } - {appConfig.hasSSO && } + {appConfig.hasSSO && ldapRef.current = bool} />}
v{json.version} diff --git a/src/frontend/src/pages/LoginPage/loginBridge.tsx b/src/frontend/src/pages/LoginPage/loginBridge.tsx index a1e3f93c9..d8b9a59ae 100644 --- a/src/frontend/src/pages/LoginPage/loginBridge.tsx +++ b/src/frontend/src/pages/LoginPage/loginBridge.tsx @@ -6,13 +6,16 @@ import { useEffect, useRef } from "react"; import { ReactComponent as Wxpro } from "./icons/wxpro.svg"; import { useTranslation } from "react-i18next"; -export default function LoginBridge() { +export default function LoginBridge({onHasLdap}) { const { t } = useTranslation() const urlRef = useRef('') useEffect(() => { - getSSOurlApi().then(url => urlRef.current = url) + getSSOurlApi().then((urls:any) => { + urlRef.current = urls.wx + urls.ldap && onHasLdap(true) + }) }, []) const clickQwLogin = () => { diff --git a/src/frontend/src/pages/LoginPage/utils.ts b/src/frontend/src/pages/LoginPage/utils.ts index 25fe51044..6b5ed6503 100644 --- a/src/frontend/src/pages/LoginPage/utils.ts +++ b/src/frontend/src/pages/LoginPage/utils.ts @@ -1,4 +1,5 @@ import { getPublicKeyApi } from "@/controllers/API/user"; +import { getKeyApi } from "@/controllers/API/pro"; import { JSEncrypt } from 'jsencrypt'; export const handleEncrypt = async (pwd: string): Promise => { @@ -8,4 +9,11 @@ export const handleEncrypt = async (pwd: string): Promise => { return encrypt.encrypt(pwd) as string; }; +export const handleLdapEncrypt = async (pwd: string): Promise => { + const public_key:any = await getKeyApi(); + const encrypt = new JSEncrypt(); + encrypt.setPublicKey(public_key); + return encrypt.encrypt(pwd) as string; +}; + export const PWD_RULE = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[\W_]).{8,}$/ \ No newline at end of file diff --git a/src/frontend/src/pages/SkillPage/l2Edit.tsx b/src/frontend/src/pages/SkillPage/l2Edit.tsx index 301b02740..0f23367ba 100644 --- a/src/frontend/src/pages/SkillPage/l2Edit.tsx +++ b/src/frontend/src/pages/SkillPage/l2Edit.tsx @@ -1,3 +1,6 @@ +import FlowSetting from "@/components/Pro/security/FlowSetting"; +import { useToast } from "@/components/bs-ui/toast/use-toast"; +import { locationContext } from "@/contexts/locationContext"; import { ArrowLeft, ChevronUp } from "lucide-react"; import { useContext, useEffect, useMemo, useRef, useState } from "react"; import { useTranslation } from "react-i18next"; @@ -5,21 +8,14 @@ import { useNavigate, useParams } from "react-router-dom"; import L2ParameterComponent from "../../CustomNodes/GenericNode/components/parameterComponent/l2Index"; import ShadTooltip from "../../components/ShadTooltipComponent"; import { Button } from "../../components/bs-ui/button"; -import { Input } from "../../components/bs-ui/input"; +import { Input, Textarea } from "../../components/bs-ui/input"; import { Label } from "../../components/bs-ui/label"; -import { Textarea } from "../../components/bs-ui/input"; -import { alertContext } from "../../contexts/alertContext"; import { TabsContext } from "../../contexts/tabsContext"; import { userContext } from "../../contexts/userContext"; import { createCustomFlowApi, getFlowApi } from "../../controllers/API/flow"; +import { captureAndAlertRequestErrorHoc } from "../../controllers/request"; import { useHasForm } from "../../util/hook"; import FormSet from "./components/FormSet"; -import { captureAndAlertRequestErrorHoc } from "../../controllers/request"; -import { useToast } from "@/components/bs-ui/toast/use-toast"; -import { SettingIcon } from "@/components/bs-icons/setting"; -import { Switch } from "@/components/bs-ui/switch"; -import FlowSetting from "@/components/Pro/security/FlowSetting"; -import { locationContext } from "@/contexts/locationContext"; export default function l2Edit() { const { t } = useTranslation()