| @@ -6,7 +6,7 @@ import React, { useEffect, useState } from 'react' | |||
| import { useTranslation } from 'react-i18next' | |||
| import Toast from '@/app/components/base/toast' | |||
| import Button from '@/app/components/base/button' | |||
| import { fetchSystemFeatures, fetchWebOIDCSSOUrl, fetchWebSAMLSSOUrl } from '@/service/share' | |||
| import { fetchSystemFeatures, fetchWebOAuth2SSOUrl, fetchWebOIDCSSOUrl, fetchWebSAMLSSOUrl } from '@/service/share' | |||
| import LogoSite from '@/app/components/base/logo/logo-site' | |||
| import { setAccessToken } from '@/app/components/share/utils' | |||
| @@ -90,6 +90,13 @@ const WebSSOForm: FC = () => { | |||
| setIsLoading(false) | |||
| }) | |||
| } | |||
| else if (protocal === 'oauth2') { | |||
| fetchWebOAuth2SSOUrl(appCode, redirectUrl).then((res) => { | |||
| router.push(res.url) | |||
| }).finally(() => { | |||
| setIsLoading(false) | |||
| }) | |||
| } | |||
| else { | |||
| Toast.notify({ | |||
| type: 'error', | |||
| @@ -5,7 +5,7 @@ import type { FC } from 'react' | |||
| import { useEffect, useState } from 'react' | |||
| import { useTranslation } from 'react-i18next' | |||
| import Toast from '@/app/components/base/toast' | |||
| import { getUserOIDCSSOUrl, getUserSAMLSSOUrl } from '@/service/sso' | |||
| import { getUserOAuth2SSOUrl, getUserOIDCSSOUrl, getUserSAMLSSOUrl } from '@/service/sso' | |||
| import Button from '@/app/components/base/button' | |||
| type UserSSOFormProps = { | |||
| @@ -47,7 +47,7 @@ const UserSSOForm: FC<UserSSOFormProps> = ({ | |||
| setIsLoading(false) | |||
| }) | |||
| } | |||
| else { | |||
| else if (protocol === 'oidc') { | |||
| getUserOIDCSSOUrl().then((res) => { | |||
| document.cookie = `user-oidc-state=${res.state}` | |||
| router.push(res.url) | |||
| @@ -55,6 +55,21 @@ const UserSSOForm: FC<UserSSOFormProps> = ({ | |||
| setIsLoading(false) | |||
| }) | |||
| } | |||
| else if (protocol === 'oauth2') { | |||
| getUserOAuth2SSOUrl().then((res) => { | |||
| document.cookie = `user-oauth2-state=${res.state}` | |||
| router.push(res.url) | |||
| }).finally(() => { | |||
| setIsLoading(false) | |||
| }) | |||
| } | |||
| else { | |||
| Toast.notify({ | |||
| type: 'error', | |||
| message: 'invalid SSO protocol', | |||
| }) | |||
| setIsLoading(false) | |||
| } | |||
| } | |||
| return ( | |||
| @@ -159,6 +159,15 @@ export const fetchWebOIDCSSOUrl = async (appCode: string, redirectUrl: string) = | |||
| }) as Promise<{ url: string }> | |||
| } | |||
| export const fetchWebOAuth2SSOUrl = async (appCode: string, redirectUrl: string) => { | |||
| return (getAction('get', false))(getUrl('/enterprise/sso/oauth2/login', false, ''), { | |||
| params: { | |||
| app_code: appCode, | |||
| redirect_url: redirectUrl, | |||
| }, | |||
| }) as Promise<{ url: string }> | |||
| } | |||
| export const fetchAppMeta = async (isInstalledApp: boolean, installedAppId = '') => { | |||
| return (getAction('get', isInstalledApp))(getUrl('meta', isInstalledApp, installedAppId)) as Promise<AppMeta> | |||
| } | |||
| @@ -7,3 +7,7 @@ export const getUserSAMLSSOUrl = () => { | |||
| export const getUserOIDCSSOUrl = () => { | |||
| return get<{ url: string; state: string }>('/enterprise/sso/oidc/login') | |||
| } | |||
| export const getUserOAuth2SSOUrl = () => { | |||
| return get<{ url: string; state: string }>('/enterprise/sso/oauth2/login') | |||
| } | |||