12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- '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<SSOAuthProps> = ({
- 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 (
- <Button
- tabIndex={0}
- onClick={() => { handleSSOLogin() }}
- disabled={isLoading}
- className="w-full"
- >
- <Lock01 className='mr-2 w-5 h-5 text-text-accent-light-mode-only' />
- <span className="truncate">{t('login.withSSO')}</span>
- </Button>
- )
- }
- export default SSOAuth
|