| @@ -25,10 +25,13 @@ const Layout: FC<{ | |||
| } | |||
| let appCode: string | null = null | |||
| if (redirectUrl) | |||
| appCode = redirectUrl?.split('/').pop() || null | |||
| else | |||
| if (redirectUrl) { | |||
| const url = new URL(`${window.location.origin}${decodeURIComponent(redirectUrl)}`) | |||
| appCode = url.pathname.split('/').pop() || null | |||
| } | |||
| else { | |||
| appCode = pathname.split('/').pop() || null | |||
| } | |||
| if (!appCode) | |||
| return | |||
| @@ -25,7 +25,10 @@ export default function CheckCode() { | |||
| const redirectUrl = searchParams.get('redirect_url') | |||
| const getAppCodeFromRedirectUrl = useCallback(() => { | |||
| const appCode = redirectUrl?.split('/').pop() | |||
| if (!redirectUrl) | |||
| return null | |||
| const url = new URL(`${window.location.origin}${decodeURIComponent(redirectUrl)}`) | |||
| const appCode = url.pathname.split('/').pop() | |||
| if (!appCode) | |||
| return null | |||
| @@ -62,7 +65,7 @@ export default function CheckCode() { | |||
| localStorage.setItem('webapp_access_token', ret.data.access_token) | |||
| const tokenResp = await fetchAccessToken({ appCode, webAppAccessToken: ret.data.access_token }) | |||
| await setAccessToken(appCode, tokenResp.access_token) | |||
| router.replace(redirectUrl) | |||
| router.replace(decodeURIComponent(redirectUrl)) | |||
| } | |||
| } | |||
| catch (error) { console.error(error) } | |||
| @@ -23,7 +23,10 @@ const ExternalMemberSSOAuth = () => { | |||
| } | |||
| const getAppCodeFromRedirectUrl = useCallback(() => { | |||
| const appCode = redirectUrl?.split('/').pop() | |||
| if (!redirectUrl) | |||
| return null | |||
| const url = new URL(`${window.location.origin}${decodeURIComponent(redirectUrl)}`) | |||
| const appCode = url.pathname.split('/').pop() | |||
| if (!appCode) | |||
| return null | |||
| @@ -1,3 +1,4 @@ | |||
| 'use client' | |||
| import Link from 'next/link' | |||
| import { useCallback, useState } from 'react' | |||
| import { useTranslation } from 'react-i18next' | |||
| @@ -33,7 +34,10 @@ export default function MailAndPasswordAuth({ isEmailSetup }: MailAndPasswordAut | |||
| const redirectUrl = searchParams.get('redirect_url') | |||
| const getAppCodeFromRedirectUrl = useCallback(() => { | |||
| const appCode = redirectUrl?.split('/').pop() | |||
| if (!redirectUrl) | |||
| return null | |||
| const url = new URL(`${window.location.origin}${decodeURIComponent(redirectUrl)}`) | |||
| const appCode = url.pathname.split('/').pop() | |||
| if (!appCode) | |||
| return null | |||
| @@ -87,7 +91,7 @@ export default function MailAndPasswordAuth({ isEmailSetup }: MailAndPasswordAut | |||
| localStorage.setItem('webapp_access_token', res.data.access_token) | |||
| const tokenResp = await fetchAccessToken({ appCode, webAppAccessToken: res.data.access_token }) | |||
| await setAccessToken(appCode, tokenResp.access_token) | |||
| router.replace(redirectUrl) | |||
| router.replace(decodeURIComponent(redirectUrl)) | |||
| } | |||
| else { | |||
| Toast.notify({ | |||
| @@ -23,7 +23,10 @@ const SSOAuth: FC<SSOAuthProps> = ({ | |||
| const redirectUrl = searchParams.get('redirect_url') | |||
| const getAppCodeFromRedirectUrl = useCallback(() => { | |||
| const appCode = redirectUrl?.split('/').pop() | |||
| if (!redirectUrl) | |||
| return null | |||
| const url = new URL(`${window.location.origin}${decodeURIComponent(redirectUrl)}`) | |||
| const appCode = url.pathname.split('/').pop() | |||
| if (!appCode) | |||
| return null | |||
| @@ -46,7 +46,10 @@ const WebSSOForm: FC = () => { | |||
| } | |||
| const getAppCodeFromRedirectUrl = useCallback(() => { | |||
| const appCode = redirectUrl?.split('/').pop() | |||
| if (!redirectUrl) | |||
| return null | |||
| const url = new URL(`${window.location.origin}${decodeURIComponent(redirectUrl)}`) | |||
| const appCode = url.pathname.split('/').pop() | |||
| if (!appCode) | |||
| return null | |||
| @@ -63,20 +66,20 @@ const WebSSOForm: FC = () => { | |||
| localStorage.setItem('webapp_access_token', tokenFromUrl) | |||
| const tokenResp = await fetchAccessToken({ appCode, webAppAccessToken: tokenFromUrl }) | |||
| await setAccessToken(appCode, tokenResp.access_token) | |||
| router.replace(redirectUrl) | |||
| router.replace(decodeURIComponent(redirectUrl)) | |||
| return | |||
| } | |||
| if (appCode && redirectUrl && localStorage.getItem('webapp_access_token')) { | |||
| const tokenResp = await fetchAccessToken({ appCode, webAppAccessToken: localStorage.getItem('webapp_access_token') }) | |||
| await setAccessToken(appCode, tokenResp.access_token) | |||
| router.replace(redirectUrl) | |||
| router.replace(decodeURIComponent(redirectUrl)) | |||
| } | |||
| })() | |||
| }, [getAppCodeFromRedirectUrl, redirectUrl, router, tokenFromUrl, message]) | |||
| useEffect(() => { | |||
| if (webAppAccessMode && webAppAccessMode === AccessMode.PUBLIC && redirectUrl) | |||
| router.replace(redirectUrl) | |||
| router.replace(decodeURIComponent(redirectUrl)) | |||
| }, [webAppAccessMode, router, redirectUrl]) | |||
| if (tokenFromUrl) { | |||
| @@ -85,14 +85,6 @@ const TextGeneration: FC<IMainProps> = ({ | |||
| const router = useRouter() | |||
| const pathname = usePathname() | |||
| useEffect(() => { | |||
| const params = new URLSearchParams(searchParams) | |||
| if (params.has('mode')) { | |||
| params.delete('mode') | |||
| router.replace(`${pathname}?${params.toString()}`) | |||
| } | |||
| // eslint-disable-next-line react-hooks/exhaustive-deps | |||
| }, []) | |||
| // Notice this situation isCallBatchAPI but not in batch tab | |||
| const [isCallBatchAPI, setIsCallBatchAPI] = useState(false) | |||
| @@ -110,7 +110,7 @@ function unicodeToChar(text: string) { | |||
| function requiredWebSSOLogin(message?: string, code?: number) { | |||
| const params = new URLSearchParams() | |||
| params.append('redirect_url', globalThis.location.pathname) | |||
| params.append('redirect_url', encodeURIComponent(`${globalThis.location.pathname}${globalThis.location.search}`)) | |||
| if (message) | |||
| params.append('message', message) | |||
| if (code) | |||