import { Box, Button, Heading, Input, Stack, Image, Text } from "@chakra-ui/react"; import { Policy } from "@lib/Policies"; import { Resource } from "@lib/vix/AppResources"; import { SyntheticEvent, useState } from "react"; import { toast } from "react-toastify"; import { useAuth } from "@src/ctx/AuthContext"; import { Links, rootLink, useAutoRedirect } from "@src/util/links"; import { ClientError } from "@dunemask/vix/bridge"; import { AuthErrors } from "@lib/vix/ClientErrors"; import { PasswordInput } from "@src/components/common/Inputs"; import { ResourcePolicyType } from "@dunemask/vix/util"; import { postProjectAuthLogin } from "@src/util/api/GeneratedRequests"; import { Navigate, useSearchParams } from "react-router-dom"; import { useProjectContext } from "@src/ctx/ProjectContext"; export default function AuthenticateView() { const { auth, login } = useAuth(); const { projectId } = useProjectContext(); const autoRedirect = useAutoRedirect(); const [search] = useSearchParams(); const [identity, setIdentity] = useState(""); const [password, setPassword] = useState(""); const identityChange = (e: SyntheticEvent) => setIdentity((e.target as HTMLInputElement).value); function submitCredentials() { const loginPromise = postProjectAuthLogin(projectId, { identity: identity, password }).then(async (creds) => { if (!creds.token) return toast.error("Server didn't provide token!"); await login( creds.user, creds.token, Policy.parseResourcePolicies(creds.policies as ResourcePolicyType[]), ); autoRedirect(); }); toast.promise(loginPromise, { pending: "Logging in", success: "Logged in successfully!", error: { render({ data }) { const clientError = data as ClientError; if (clientError.isError(AuthErrors.UnauthorizedRequest)) return "Incorrect credentials!"; console.error(data); return "Error logging in!"; }, }, }); setPassword(""); } function detectEnter(e: KeyboardEvent) { if (e.key === "Enter") submitCredentials(); } if (auth) return ; return ( Sign in Logo Please enter your credentials below ); }