diff --git a/webui/src/states/Login/Login.jsx b/webui/src/states/Login/Login.jsx
index 165de13..440bc87 100644
--- a/webui/src/states/Login/Login.jsx
+++ b/webui/src/states/Login/Login.jsx
@@ -1,21 +1,44 @@
-import {useContext, useState} from "react";
+import {useContext, useEffect, useState} from "react";
import {TokenContext} from "@/common/contexts/Token";
import {Navigate} from "react-router-dom";
-import {Alert, Box, Button, Container, Divider, Grid, Stack, TextField, Typography} from "@mui/material";
+import {
+ Alert,
+ Box,
+ Button,
+ CircularProgress,
+ Container,
+ Divider,
+ Grid,
+ Stack,
+ TextField,
+ Typography
+} from "@mui/material";
import {t} from "i18next";
+import {jsonRequest, postRequest} from "@/common/utils/RequestUtil.js";
export const Login = () => {
const {tokenValid, checkToken} = useContext(TokenContext);
+ const [isSetupMode, setIsSetupMode] = useState(null);
const [username, setUsername] = useState("");
const [password, setPassword] = useState("");
const [loginFailed, setLoginFailed] = useState(false);
+ useEffect(() => {
+ jsonRequest("setup").then((r) => setIsSetupMode(r.setup));
+ }, []);
+
const login = (e) => {
if (e) e.preventDefault();
localStorage.setItem("token", btoa(`${username}:${password}`));
checkToken().then((r) => setLoginFailed(!r));
}
+ const createAccount = () => {
+ postRequest("setup", {username, password}).then(() => login());
+ }
+
+ if (isSetupMode === null) return