import { Oauth2RequestType, getOauth2RedirectURL } from "@/api/oauth2" import { Button } from "@/components/ui/button" import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form" import { GitHubIcon } from "@/components/ui/icon" import { Input } from "@/components/ui/input" import { Separator } from "@/components/ui/separator" import { useAuth } from "@/hooks/useAuth" import useSetting from "@/hooks/useSetting" import { zodResolver } from "@hookform/resolvers/zod" import i18next from "i18next" import { useEffect } from "react" import { useForm } from "react-hook-form" import { useTranslation } from "react-i18next" import { toast } from "sonner" import { z } from "zod" const formSchema = z.object({ username: z.string().min(2, { message: i18next.t("Results.UsernameMin", { number: 2 }), }), password: z.string().min(1, { message: i18next.t("Results.PasswordRequired"), }), }) function Login() { const { login, loginOauth2 } = useAuth() const { data: settingData } = useSetting() useEffect(() => { const oauth2 = new URLSearchParams(window.location.search).get("oauth2") if (oauth2) { loginOauth2() } }, [window.location.search]) const form = useForm>({ resolver: zodResolver(formSchema), defaultValues: { username: "", password: "", }, }) function onSubmit(values: z.infer) { login(values.username, values.password) } async function loginWith(provider: string) { try { const redirectUrl = await getOauth2RedirectURL(provider, Oauth2RequestType.LOGIN) window.location.href = redirectUrl.redirect! } catch (error: any) { toast.error(error.message) } } const { t } = useTranslation() return (
( {t("Username")} )} /> ( {t("Password")} )} /> {settingData?.config?.oauth2_providers && settingData?.config?.oauth2_providers.length > 0 && (
OAuth2
)}
{settingData?.config?.oauth2_providers?.map((p: string) => ( ))}
) } export default Login