Spaces:
Running
Running
import { Button, Container, Stack, TextInput, Title } from "@mantine/core"; | |
import { type FormEvent, useState } from "react"; | |
import { validateAccessKey } from "../../modules/accessKey"; | |
import { addLogEntry } from "../../modules/logEntries"; | |
export default function AccessPage({ | |
onAccessKeyValid, | |
}: { | |
onAccessKeyValid: () => void; | |
}) { | |
const [accessKey, setAccessKey] = useState(""); | |
const [error, setError] = useState(""); | |
const handleSubmit = async (formEvent: FormEvent<HTMLFormElement>) => { | |
formEvent.preventDefault(); | |
setError(""); | |
try { | |
const isValid = await validateAccessKey(accessKey); | |
if (isValid) { | |
addLogEntry("Valid access key entered"); | |
onAccessKeyValid(); | |
} else { | |
setError("Invalid access key"); | |
addLogEntry("Invalid access key attempt"); | |
} | |
} catch (error) { | |
setError("Error validating access key"); | |
addLogEntry(`Error validating access key: ${error}`); | |
} | |
}; | |
return ( | |
<Container size="xs"> | |
<Stack p="lg" mih="100vh" justify="center"> | |
<Title order={2} ta="center"> | |
Access Restricted | |
</Title> | |
<form onSubmit={handleSubmit}> | |
<Stack gap="xs"> | |
<TextInput | |
value={accessKey} | |
onChange={({ target }) => setAccessKey(target.value)} | |
placeholder="Enter your access key to continue" | |
required | |
autoFocus | |
error={error} | |
styles={{ | |
input: { | |
textAlign: "center", | |
}, | |
}} | |
/> | |
<Button size="xs" type="submit"> | |
Submit | |
</Button> | |
</Stack> | |
</form> | |
</Stack> | |
</Container> | |
); | |
} | |