aboutsummaryrefslogtreecommitdiffstats
path: root/src/routes/(app)/login
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2024-09-10 20:39:47 -0700
committerAdam Soltys <[email protected]>2024-09-17 09:18:36 -0700
commit1f63848ca9fb01336f04b41434de1cc06a5b3d93 (patch)
tree2affa3041863be365f33d99e1f32bda60cf93a32 /src/routes/(app)/login
parent6e48c584605bec5623c12c470d04d07303983801 (diff)
downloadcoinos-ui-1f63848ca9fb01336f04b41434de1cc06a5b3d93.tar.gz
coinos-ui-1f63848ca9fb01336f04b41434de1cc06a5b3d93.zip
move routes
Diffstat (limited to 'src/routes/(app)/login')
-rw-r--r--src/routes/(app)/login/+page.server.ts29
-rw-r--r--src/routes/(app)/login/+page.svelte188
2 files changed, 0 insertions, 217 deletions
diff --git a/src/routes/(app)/login/+page.server.ts b/src/routes/(app)/login/+page.server.ts
deleted file mode 100644
index fd7fec8c..00000000
--- a/src/routes/(app)/login/+page.server.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-import { fail, redirect } from "@sveltejs/kit";
-import { login, fd } from "$lib/utils";
-
-export const load = async ({ parent }) => {
- let { user } = await parent();
- if (user?.pubkey) redirect(307, `/${user.username}`);
-};
-
-export const actions = {
- default: async ({ cookies, request }) => {
- let form = await fd(request);
- let { username, password, token, loginRedirect } = form;
- let user = { username, password, token };
-
- if (loginRedirect === "undefined") loginRedirect = undefined;
-
- try {
- await login(
- user,
- cookies,
- request.headers.get("cf-connecting-ip")
- );
- } catch (e: any) {
- return fail(400, { error: "Login failed", message: e.message, ...form });
- }
-
- redirect(307, loginRedirect || `/${user.username}`);
- },
-};
diff --git a/src/routes/(app)/login/+page.svelte b/src/routes/(app)/login/+page.svelte
deleted file mode 100644
index 61ea23b7..00000000
--- a/src/routes/(app)/login/+page.svelte
+++ /dev/null
@@ -1,188 +0,0 @@
-<script>
- import { onMount } from "svelte";
- import { applyAction, deserialize } from "$app/forms";
- import { tick } from "svelte";
- import { fly } from "svelte/transition";
- import { enhance } from "$app/forms";
- import Pin from "$comp/Pin.svelte";
- import Icon from "$comp/Icon.svelte";
- import Spinner from "$comp/Spinner.svelte";
- import { focus, fail } from "$lib/utils";
- import { password, pin, loginRedirect } from "$lib/store";
- import { t } from "$lib/translations";
- import { page } from "$app/stores";
- import { generate } from "$lib/nostr";
- import { invalidateAll } from "$app/navigation";
-
- onMount(() => {
- $pin = undefined;
- localStorage.clear();
- sessionStorage.clear();
-
- let lang = $page.url.searchParams.get("lang");
- if (lang) document.cookie = `lang=${lang} ;`;
- });
-
- export let form;
-
- let token, formElement;
- let code = [];
- let redirect;
-
- $password = undefined;
-
- $: need2fa = form?.message === "2fa";
- let cancel = () => (need2fa = false);
- $: if (form?.message === "2fa" && form.token === token) token = "";
-
- let username, email, btn;
-
- $: update(form);
- let update = (form) => form && ({ username, password: $password } = form);
-
- $: token && token?.length === 6 && tick().then(() => btn.click());
-
- let revealPassword = false;
-
- let loading;
- async function handleSubmit(e) {
- loading = true;
-
- let data = new FormData(this);
- let user = Object.fromEntries(data);
- await generate(user);
-
- for (let k in user) {
- data.set(k, user[k]);
- }
-
- const response = await fetch("/login", {
- method: "POST",
- body: data,
- });
-
- const result = deserialize(await response.text());
-
- if (result.type === "success") {
- await invalidateAll();
- }
-
- applyAction(result);
- loading = false;
- }
-</script>
-
-{#if need2fa}
- <Pin bind:value={token} title="Enter 2FA Code" {cancel} notify={false} />
-{/if}
-
-<div class="pt-10">
- <div class="w-[243px] mx-auto mb-10">
- <a href="/">
- <Icon icon="logo" />
- </a>
- </div>
-
- <div class="flex justify-center items-center">
- <div
- class="shadow-xl rounded-3xl p-10 pb-12 space-y-5 w-full mx-5 md:mx-0 md:w-[400px]"
- >
- <h1 class="text-2xl font-bold text-center">{$t("login.signIn")}</h1>
-
- {#if form?.error}
- <div class="text-red-600 text-center" in:fly>
- {form.error}
- </div>
- {/if}
-
- <form
- class="space-y-5"
- on:submit|preventDefault={handleSubmit}
- method="POST"
- >
- <input
- type="hidden"
- name="loginRedirect"
- value={$loginRedirect || $page.url.searchParams.get("redirect")}
- />
- <input type="hidden" name="token" value={token} />
-
- <div>
- <label for="username" class="font-semibold"
- >{$t("login.username")}</label
- >
- <input
- name="username"
- type="text"
- required
- class="bg-primary"
- bind:value={username}
- use:focus
- autocapitalize="none"
- />
- </div>
-
- <div class="relative">
- <label for="password" class="block font-semibold"
- >{$t("login.password")}</label
- >
- {#if revealPassword}
- <input
- name="password"
- type="text"
- required
- class="bg-primary"
- bind:value={$password}
- autocapitalize="none"
- />
- {:else}
- <input
- name="password"
- type="password"
- required
- class="bg-primary"
- bind:value={$password}
- autocapitalize="none"
- />
- {/if}
- <button
- type="button"
- on:click={() => (revealPassword = !revealPassword)}
- class="absolute right-5 top-10"
- >
- <Icon icon={revealPassword ? "eye" : "eye-off"} />
- </button>
- </div>
-
- <div class="flex justify-end items-center">
- <a href="/forgot" class="underline underline-offset-4 text-black"
- >{$t("login.forgotUserOrPassword")}</a
- >
- </div>
-
- <button
- type="submit"
- class="bg-black text-white w-full rounded-2xl p-4 font-semibold hover:opacity-80"
- disabled={loading}
- bind:this={btn}
- >
- {#if loading}
- <Spinner />
- {:else}
- {$t("login.signIn")}
- {/if}
- </button>
- </form>
-
- <p class="text-secondary text-center font-medium">
- {$t("login.noAccount")}
- <a
- href={"/register"}
- class="block md:inline text-black underline underline-offset-4 hover:opacity-80"
- >
- {$t("login.register")}
- </a>
- </p>
- </div>
- </div>
-</div>