aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2025-09-28 13:49:03 -0700
committerAdam Soltys <[email protected]>2025-09-28 13:49:03 -0700
commit51401d6bad6fa73500ea8258812ad705b750c93a (patch)
tree2ff0982e2403539176ad09c2a30386eaa88bda0b /src
parentcb10194d0c7ec20f22b46c97cf0259e091a34d30 (diff)
downloadcoinos-ui-51401d6bad6fa73500ea8258812ad705b750c93a.tar.gz
coinos-ui-51401d6bad6fa73500ea8258812ad705b750c93a.zip
captcha
Diffstat (limited to 'src')
-rw-r--r--src/routes/(static)/login/+page.server.ts20
-rw-r--r--src/routes/(static)/login/+page.svelte3
2 files changed, 18 insertions, 5 deletions
diff --git a/src/routes/(static)/login/+page.server.ts b/src/routes/(static)/login/+page.server.ts
index ffe6335d..f75b88d8 100644
--- a/src/routes/(static)/login/+page.server.ts
+++ b/src/routes/(static)/login/+page.server.ts
@@ -1,20 +1,32 @@
+import { randomUUID } from "crypto";
import { PUBLIC_COINOS_URL } from "$env/static/public";
import { fd, get, login } from "$lib/utils";
import { fail, redirect } from "@sveltejs/kit";
+const captchas = new Set();
export const load = async ({ parent }) => {
const { user } = await parent();
if (user?.pubkey) redirect(307, `/${user.username}`);
const { challenge } = await get("/challenge");
- return { challenge };
+ const captcha = randomUUID();
+ captchas.add(captcha);
+ setTimeout(() => captchas.delete(captcha), 120000);
+ return { challenge, captcha };
};
export const actions = {
login: async ({ cookies, request }) => {
- console.log(request.headers.get('referer'));
const form = await fd(request);
- let { username, password, token, loginRedirect } = form;
- const user = { username, password, token };
+ let { username, password, token, loginRedirect, captcha } = form;
+ console.log(captchas, captchas.has(captcha), captcha);
+ if (!captchas.has(captcha))
+ return fail(400, { error: "Login form expired", message: "Login form expired", ...form });
+
+ const user = {
+ username,
+ password,
+ token,
+ };
if (loginRedirect === "undefined") loginRedirect = undefined;
diff --git a/src/routes/(static)/login/+page.svelte b/src/routes/(static)/login/+page.svelte
index 825f6a88..dc43e76d 100644
--- a/src/routes/(static)/login/+page.svelte
+++ b/src/routes/(static)/login/+page.svelte
@@ -36,7 +36,7 @@
if (lang) document.cookie = `lang=${lang} ;`;
});
- let { challenge } = $derived(data);
+ let { challenge, captcha } = $derived(data);
let token = $state("");
let cancel = () => (need2fa = false);
@@ -142,6 +142,7 @@
>
<input type="hidden" name="loginRedirect" value={redirect} />
<input type="hidden" name="token" value={token} />
+ <input type="hidden" name="captcha" value={captcha} />
<input
name="username"