From 8588de25f16486b56ef0ad533013bd8cb48ff120 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Thu, 9 Jan 2025 23:44:40 -0800 Subject: nostr signing --- src/routes/(static)/+layout.svelte | 2 + src/routes/(static)/login/+page.server.ts | 8 +-- src/routes/(static)/login/+page.svelte | 76 +++++++++++++++++++++------- src/routes/(static)/register/+page.server.ts | 4 +- src/routes/(static)/register/+page.svelte | 48 +++++++++++------- 5 files changed, 95 insertions(+), 43 deletions(-) (limited to 'src/routes/(static)') diff --git a/src/routes/(static)/+layout.svelte b/src/routes/(static)/+layout.svelte index 44310c97..a0061a19 100644 --- a/src/routes/(static)/+layout.svelte +++ b/src/routes/(static)/+layout.svelte @@ -1,6 +1,7 @@

{$t("login.signIn")}

- {#if form?.error && !form?.message.includes("2fa")}
{form.error} @@ -126,10 +159,17 @@ {$t("login.signIn")} - +

{$t("login.noAccount")}

{/if} - - diff --git a/src/routes/(static)/register/+page.server.ts b/src/routes/(static)/register/+page.server.ts index bf908c54..2e5c5f19 100644 --- a/src/routes/(static)/register/+page.server.ts +++ b/src/routes/(static)/register/+page.server.ts @@ -6,9 +6,9 @@ export const load = async ({ parent }) => { if (user) redirect(307, `/${user.username}`); const index = Math.floor(Math.random() * 64) + 1; - const { id } = await get("/challenge"); + const { challenge } = await get("/challenge"); - return { index, id }; + return { index, challenge }; }; export const actions = { diff --git a/src/routes/(static)/register/+page.svelte b/src/routes/(static)/register/+page.svelte index 77394e1a..e7819f4f 100644 --- a/src/routes/(static)/register/+page.svelte +++ b/src/routes/(static)/register/+page.svelte @@ -8,13 +8,12 @@ import { fly } from "svelte/transition"; import { enhance } from "$app/forms"; - import Nostr from "$comp/Nostr.svelte"; import Pin from "$comp/Pin.svelte"; import Spinner from "$comp/Spinner.svelte"; import PasswordInput from "$comp/PasswordInput.svelte"; import { focus, fail } from "$lib/utils"; - import { avatar, password, loginRedirect } from "$lib/store"; + import { avatar, signer, password, loginRedirect } from "$lib/store"; import { t } from "$lib/translations"; import { page } from "$app/stores"; import { @@ -24,11 +23,22 @@ adjectives, animals, } from "unique-names-generator"; + import { sign } from "$lib/nostr"; let { form, data } = $props(); - let { id } = $derived(data); - - let nostrSignin = $state(); + let { challenge } = $derived(data); + + page.subscribe(async () => { + if (browser) { + setTimeout(() => { + password.set(undefined); + pin.set(undefined); + signer.set(undefined); + localStorage.clear(); + sessionStorage.clear(); + }, 500); + } + }); let username = $state(); let { index } = $state(data); @@ -161,24 +171,22 @@ }); let nostrLogin = async () => { - let pubkey = await window.nostr.getPublicKey(); - const formData = new FormData(); - - let ev = { + let event = { kind: 1, - pubkey, created_at: Date.now(), - content: id, + content: challenge, tags: [], }; - try { - let signedEvent = await window.nostr.signEvent(ev); + let signedEvent = await sign(event); + const formData = new FormData(); + + try { formData.append("loginRedirect", redirect); formData.append("token", token); formData.append("event", JSON.stringify(signedEvent)); - formData.append("id", id); + formData.append("challenge", challenge); let response = await fetch("/login?/nostr", { method: "POST", @@ -309,8 +317,14 @@ {/if} - @@ -325,5 +339,3 @@

- - -- cgit v1.2.3