Remove PostgreSQL and move to SQLite3
This commit is contained in:
+54
-1
@@ -30,6 +30,13 @@ export default function App() {
|
||||
|
||||
// Auth/Login UI state
|
||||
const [me, setMe] = useState(null);
|
||||
const [setupRequired, setSetupRequired] = useState(null);
|
||||
const [setupEmail, setSetupEmail] = useState("");
|
||||
const [setupDisplayName, setSetupDisplayName] = useState("");
|
||||
const [setupPassword, setSetupPassword] = useState("");
|
||||
const [setupPasswordConfirm, setSetupPasswordConfirm] = useState("");
|
||||
const [setupError, setSetupError] = useState("");
|
||||
const [setupSaving, setSetupSaving] = useState(false);
|
||||
const [loginEmail, setLoginEmail] = useState("");
|
||||
const [loginPassword, setLoginPassword] = useState("");
|
||||
const [showPw, setShowPw] = useState(false);
|
||||
@@ -182,8 +189,12 @@ export default function App() {
|
||||
useEffect(() => {
|
||||
(async () => {
|
||||
try {
|
||||
const status = await api("/setup/status");
|
||||
setSetupRequired(!!status.setup_required);
|
||||
await load();
|
||||
} catch {}
|
||||
} catch {
|
||||
// The login/setup screen handles unauthenticated sessions.
|
||||
}
|
||||
})();
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
}, []);
|
||||
@@ -278,6 +289,36 @@ export default function App() {
|
||||
await load();
|
||||
};
|
||||
|
||||
const doSetup = async () => {
|
||||
setSetupError("");
|
||||
if (setupPassword.length < 8) {
|
||||
setSetupError("Password must be at least 8 characters long.");
|
||||
return;
|
||||
}
|
||||
if (setupPassword !== setupPasswordConfirm) {
|
||||
setSetupError("Passwords do not match.");
|
||||
return;
|
||||
}
|
||||
|
||||
setSetupSaving(true);
|
||||
try {
|
||||
await api("/setup/admin", {
|
||||
method: "POST",
|
||||
body: JSON.stringify({
|
||||
email: setupEmail,
|
||||
display_name: setupDisplayName,
|
||||
password: setupPassword,
|
||||
}),
|
||||
});
|
||||
setSetupRequired(false);
|
||||
await load();
|
||||
} catch (e) {
|
||||
setSetupError(e?.message || "Setup failed.");
|
||||
} finally {
|
||||
setSetupSaving(false);
|
||||
}
|
||||
};
|
||||
|
||||
const doLogout = async () => {
|
||||
await api("/auth/logout", { method: "POST" });
|
||||
setMe(null);
|
||||
@@ -540,6 +581,18 @@ export default function App() {
|
||||
showPw={showPw}
|
||||
setShowPw={setShowPw}
|
||||
doLogin={doLogin}
|
||||
setupRequired={setupRequired}
|
||||
setupEmail={setupEmail}
|
||||
setSetupEmail={setSetupEmail}
|
||||
setupDisplayName={setupDisplayName}
|
||||
setSetupDisplayName={setSetupDisplayName}
|
||||
setupPassword={setupPassword}
|
||||
setSetupPassword={setSetupPassword}
|
||||
setupPasswordConfirm={setupPasswordConfirm}
|
||||
setSetupPasswordConfirm={setSetupPasswordConfirm}
|
||||
setupError={setupError}
|
||||
setupSaving={setupSaving}
|
||||
doSetup={doSetup}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user