import { FailedSignInResponse } from '@/proxy/auth/models' import ActionLink from '@/components/shared/ActionLink' import Captcha from '@/components/shared/Captcha' import PasswordInput from '@/components/shared/PasswordInput' import TenantSelector from '@/components/shared/TenantSelector' import Alert from '@/components/ui/Alert' import Button from '@/components/ui/Button' import Checkbox from '@/components/ui/Checkbox' import { FormContainer, FormItem } from '@/components/ui/Form' import Input from '@/components/ui/Input' import PlatformLoginResultType from '@/constants/login.result.enum' import { ROUTES_ENUM } from '@/routes/route.constant' import { useStoreActions, useStoreState } from '@/store' import useAuth from '@/utils/hooks/useAuth' import { useLocalization } from '@/utils/hooks/useLocalization' import useTimeOutMessage from '@/utils/hooks/useTimeOutMessage' import { TurnstileInstance } from '@marsidev/react-turnstile' import { Field, Form, Formik } from 'formik' import { motion } from 'framer-motion' import { useRef, useState } from 'react' import { useNavigate } from 'react-router-dom' import * as Yup from 'yup' import { Helmet } from 'react-helmet' import { APP_NAME } from '@/constants/app.constant' type SignInFormSchema = { userName: string password: string rememberMe: boolean twoFactorCode: string captchaResponse: string } const validationSchema = Yup.object().shape({ userName: Yup.string().required(), password: Yup.string().required(), rememberMe: Yup.bool(), twoFactor: Yup.boolean(), twoFactorCode: Yup.string().when('twoFactor', { is: true, then: (schema) => schema.required(), otherwise: (schema) => schema.notRequired(), }), }) const Login = () => { const navigate = useNavigate() const UiVersion = useStoreState((state) => state.locale.currentUiVersion) const { setUiVersion } = useStoreActions((a) => a.locale) const [message, setMessage] = useState('') const [error, setError] = useTimeOutMessage(300000) const [twoFactor, setTwoFactor] = useState(false) const [showCaptcha, setShowCaptcha] = useState(false) const captchaRef = useRef(null) const { setWarning } = useStoreActions((actions) => actions.base.messages) const setWarningTimeout = (message: string) => { setTimeout(() => { setWarning(message) }, 100) } const { signIn } = useAuth() const { translate } = useLocalization() const onSignIn = async ( values: SignInFormSchema, { setSubmitting, isSubmitting, setFieldValue, setFieldTouched }: any, ) => { if (isSubmitting) { return } setSubmitting(true) const { userName, password, twoFactorCode, captchaResponse } = values const result = await signIn({ userName, password, twoFactorCode, captchaResponse, }) if (result.status === 'error') { setError(result.message) } else { setError('') } if (result.status === 'failed') { const data = result.data as FailedSignInResponse setError(data.description) if (data.pResult === PlatformLoginResultType.NotAllowed) { setWarningTimeout(data.description) navigate(ROUTES_ENUM.authenticated.sendConfirmationCode) } else { setWarning('') } if ( data.pResult === PlatformLoginResultType.RequiresTwoFactor || data.pResult === PlatformLoginResultType.WrongTwoFactorCode ) { if (data.pResult === PlatformLoginResultType.RequiresTwoFactor) { setError(undefined) setMessage('Mail adresinize gönderilen doğrulama kodunu giriniz') } else { setMessage('') } setTwoFactor(true) setFieldValue('twoFactor', true) setFieldTouched('twoFactorCode', false) } else { setMessage('') setTwoFactor(false) setFieldValue('twoFactor', false) } setShowCaptcha(data.pResult === PlatformLoginResultType.ShowCaptcha) if (data.pResult === PlatformLoginResultType.ShowCaptcha) { captchaRef.current?.reset() } if ( data.pResult === PlatformLoginResultType.ShouldChangePasswordOnNextLogin || data.pResult === PlatformLoginResultType.ShouldChangePasswordPeriodic ) { setWarningTimeout(data.description) navigate(ROUTES_ENUM.authenticated.forgotPassword) } else { setWarning('') } if (data.pResult === PlatformLoginResultType.LoginEndDateDue) { setWarningTimeout(data.description) navigate(ROUTES_ENUM.authenticated.sendExtendLogin) } else { setWarning('') } } else { // Temizlik setTwoFactor(false) setFieldValue('twoFactorCode', '') setFieldValue('twoFactor', false) setShowCaptcha(false) setError('') setMessage('') // Versiyon kontrolü findUiVersion() } if (showCaptcha) { setFieldValue('captchaResponse', '') captchaRef.current?.reset() } setSubmitting(false) } const findUiVersion = async () => { try { const res = await fetch(`/version.json?ts=${Date.now()}`) const latest = (await res.json())?.releases?.[0]?.version if (latest && UiVersion !== latest) { setUiVersion(latest) navigate(ROUTES_ENUM.protected.admin.changeLog) } } catch (e) { console.warn('Versiyon okunamadı', e) } } return ( <>

{translate('::Abp.Account.WelcomeBack')}

{translate('::Abp.Account.WelcomeBack.Message')}

{({ touched, errors, isSubmitting, setFieldValue }) => (
{!twoFactor && ( )} {!twoFactor && ( )} {twoFactor && ( )}
{translate('::Abp.Account.RememberMe')} {translate('::Abp.Account.ForgotPassword')}
{showCaptcha && ( setFieldValue('captchaResponse', '')} onExpire={() => setFieldValue('captchaResponse', '')} onSuccess={(token: string) => setFieldValue('captchaResponse', token)} /> )} {message && ( {message} )} {error && ( {error} )} {/*
{translate('::Abp.Account.SignUp.Message')} {translate('::Abp.Account.Register')}
*/}
)}
) } export default Login