'use client' import { useRouter, useSearchParams } from 'next/navigation' import type { FC } from 'react' import { useState } from 'react' import { useTranslation } from 'react-i18next' import { Lock01 } from '@/app/components/base/icons/src/vender/solid/security' import Toast from '@/app/components/base/toast' import { getUserOAuth2SSOUrl, getUserOIDCSSOUrl, getUserSAMLSSOUrl } from '@/service/sso' import Button from '@/app/components/base/button' import { SSOProtocol } from '@/types/feature' type SSOAuthProps = { protocol: SSOProtocol | '' } const SSOAuth: FC = ({ protocol, }) => { const router = useRouter() const { t } = useTranslation() const searchParams = useSearchParams() const invite_token = decodeURIComponent(searchParams.get('invite_token') || '') const [isLoading, setIsLoading] = useState(false) const handleSSOLogin = () => { setIsLoading(true) if (protocol === SSOProtocol.SAML) { getUserSAMLSSOUrl(invite_token).then((res) => { router.push(res.url) }).finally(() => { setIsLoading(false) }) } else if (protocol === SSOProtocol.OIDC) { getUserOIDCSSOUrl(invite_token).then((res) => { document.cookie = `user-oidc-state=${res.state}` router.push(res.url) }).finally(() => { setIsLoading(false) }) } else if (protocol === SSOProtocol.OAuth2) { getUserOAuth2SSOUrl(invite_token).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 ( ) } export default SSOAuth