import { useToast } from "@/components/ui/use-toast.ts";
import { ToastAction } from "@/components/ui/toast.tsx";
import { tokenField } from "@/conf/bootstrap.ts";
import { useEffect, useReducer } from "react";
import Loader from "@/components/Loader.tsx";
import "@/assets/pages/auth.less";
import { validateToken } from "@/store/auth.ts";
import { useDispatch } from "react-redux";
import router from "@/router.tsx";
import { useTranslation } from "react-i18next";
import { getQueryParam } from "@/utils/path.ts";
import { setMemory } from "@/utils/memory.ts";
import { appLogo, appName, useDeeptrain } from "@/conf/env.ts";
import { Card, CardContent } from "@/components/ui/card.tsx";
import { goAuth } from "@/utils/app.ts";
import { Label } from "@/components/ui/label.tsx";
import { Input } from "@/components/ui/input.tsx";
import Require, { LengthRangeRequired } from "@/components/Require.tsx";
import { Button } from "@/components/ui/button.tsx";
import { formReducer, isTextInRange } from "@/utils/form.ts";
import { doLogin, LoginForm } from "@/api/auth.ts";
import { getErrorMessage } from "@/utils/base.ts";
function DeepAuth() {
const { toast } = useToast();
const { t } = useTranslation();
const dispatch = useDispatch();
const token = getQueryParam("token").trim();
useEffect(() => {
if (!token.length) {
toast({
title: t("invalid-token"),
description: t("invalid-token-prompt"),
action: (
{t("try-again")}
),
});
setTimeout(goAuth, 2500);
return;
}
setMemory(tokenField, token);
doLogin({ token })
.then((data) => {
if (!data.status) {
toast({
title: t("login-failed"),
description: t("login-failed-prompt", { reason: data.error }),
action: (
{t("try-again")}
),
});
} else
validateToken(dispatch, data.token, async () => {
toast({
title: t("login-success"),
description: t("login-success-prompt"),
});
await router.navigate("/");
});
})
.catch((err) => {
console.debug(err);
toast({
title: t("server-error"),
description: `${t("server-error-prompt")}\n${err.message}`,
action: (
{t("try-again")}
),
});
});
}, []);
return (
);
}
function Login() {
const { t } = useTranslation();
const { toast } = useToast();
const globalDispatch = useDispatch();
const [form, dispatch] = useReducer(formReducer(), {
username: sessionStorage.getItem("username") || "",
password: sessionStorage.getItem("password") || "",
});
const onSubmit = async () => {
if (
!isTextInRange(form.username, 1, 255) ||
!isTextInRange(form.password, 6, 36)
)
return;
try {
const resp = await doLogin(form);
if (!resp.status) {
toast({
title: t("login-failed"),
description: t("login-failed-prompt", { reason: resp.error }),
});
return;
}
toast({
title: t("login-success"),
description: t("login-success-prompt"),
});
if (
form.username.trim() === "root" &&
form.password.trim() === "chatnio123456"
) {
toast({
title: t("admin.default-password"),
description: t("admin.default-password-prompt"),
duration: 30000,
});
}
validateToken(globalDispatch, resp.token);
await router.navigate("/");
} catch (err) {
console.debug(err);
toast({
title: t("server-error"),
description: t("request-error", { reason: getErrorMessage(err) }),
});
}
};
useEffect(() => {
// listen to enter key and auto submit
const listener = async (e: KeyboardEvent) => {
if (e.key === "Enter") await onSubmit();
};
document.addEventListener("keydown", listener);
return () => document.removeEventListener("keydown", listener);
}, []);
return (
);
}
function Auth() {
return useDeeptrain ? : ;
}
export default Auth;