From 0e17224e71296cf6a0336c5a2e7340a3b63cd2dc Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Mon, 24 Oct 2022 22:26:13 -0700 Subject: pin code --- src/components/Pin.svelte | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/components/Pin.svelte (limited to 'src/components/Pin.svelte') diff --git a/src/components/Pin.svelte b/src/components/Pin.svelte new file mode 100644 index 00000000..3e5769b0 --- /dev/null +++ b/src/components/Pin.svelte @@ -0,0 +1,44 @@ + + +
+
+

Please enter your PIN

+
+ + + + + + + + +
+ +
+ +
+
+
-- cgit v1.2.3 From b1f81daaab3b04e8ae0b3e4edd4984aeade8098e Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Tue, 25 Oct 2022 00:11:35 -0700 Subject: send pin --- src/components/Pin.svelte | 6 ++---- src/lib/store.js | 11 +++++++++-- src/lib/utils.js | 2 ++ src/routes/send/+layout.svelte | 18 ++++++++++++++++++ src/routes/send/[uuid=uuid]/+page.server.js | 15 ++++++++++----- src/routes/send/[uuid=uuid]/+page.svelte | 15 ++++++++++++++- src/routes/send/bitcoin/[address]/+page.server.js | 13 +++++++++---- src/routes/send/bitcoin/[address]/+page.svelte | 16 ++++++++++++++++ src/routes/send/lightning/[payreq]/+page.server.js | 16 +++++++++++----- src/routes/send/lightning/[payreq]/+page.svelte | 14 ++++++++++++++ .../send/user/[username]/[...amount]/+page.server.js | 15 ++++++++++----- .../send/user/[username]/[...amount]/+page.svelte | 16 +++++++++++++++- 12 files changed, 130 insertions(+), 27 deletions(-) create mode 100644 src/routes/send/+layout.svelte (limited to 'src/components/Pin.svelte') diff --git a/src/components/Pin.svelte b/src/components/Pin.svelte index 3e5769b0..86e78ac1 100644 --- a/src/components/Pin.svelte +++ b/src/components/Pin.svelte @@ -2,11 +2,10 @@ import { tick } from "svelte"; import { pin } from '$lib/store'; import { Pincode, PincodeInput } from 'svelte-pincode'; - let complete = () => {}; let pinCode = []; let pinInput; - let submit, loading; + let loading; $: pinInput && tick().then(pinInput.focusFirstInput); $: pinCode.length > 5 && ($pin = pinCode.join('')); @@ -16,7 +15,7 @@

Please enter your PIN

- + @@ -28,7 +27,6 @@
+{#if form?.message} +
+ {form.message} +
+{/if} +
{#if amount}
@@ -61,6 +73,7 @@ +
{#if amount} diff --git a/src/routes/send/bitcoin/[address]/+page.server.js b/src/routes/send/bitcoin/[address]/+page.server.js index 9b29a6da..642593ab 100644 --- a/src/routes/send/bitcoin/[address]/+page.server.js +++ b/src/routes/send/bitcoin/[address]/+page.server.js @@ -1,11 +1,16 @@ -import { redirect } from '@sveltejs/kit'; +import { invalid, redirect } from '@sveltejs/kit'; import { auth, post } from '$lib/utils'; export const actions = { default: async ({ cookies, request }) => { - let { address, amount } = Object.fromEntries(await request.formData()); - let { tx } = await post('/bitcoin/fee', { address, amount }, auth(cookies)); - await post('/bitcoin/send', { address, tx }, auth(cookies)); + try { + let { address, amount, pin } = Object.fromEntries(await request.formData()); + let { tx } = await post('/bitcoin/fee', { address, amount }, auth(cookies)); + await post('/bitcoin/send', { address, pin, tx }, auth(cookies)); + } catch (e) { + return invalid(400, { message: e.message }); + } + throw redirect(307, '/sent'); } }; diff --git a/src/routes/send/bitcoin/[address]/+page.svelte b/src/routes/send/bitcoin/[address]/+page.svelte index 8c9e72ff..c9023180 100644 --- a/src/routes/send/bitcoin/[address]/+page.svelte +++ b/src/routes/send/bitcoin/[address]/+page.svelte @@ -3,19 +3,33 @@ import { Icon, Numpad, Spinner } from '$comp'; import { page } from '$app/stores'; import { back } from '$lib/utils'; + import { pin } from '$lib/store'; + export let data; + export let form; let { address } = $page.params; let { currency } = data.user; let amount, loading; let submit = () => (loading = true); + $: update(form); + let update = () => { + if (form?.message.includes('pin')) $pin = undefined; + loading = false; + }; +{#if form?.message} +
+ {form.message} +
+{/if} +

Send to

@@ -26,6 +40,8 @@
+ +
+{#if form?.message} +
+ {form.message} +
+{/if} +
{#if amount}
@@ -38,6 +51,7 @@ +
+{#if form?.message} +
+ {form.message} +
+{/if} +
{#if amount}
@@ -63,6 +76,7 @@ +
{#if amount} -- cgit v1.2.3 From 5a5ea3ccc327ff52fb1c313998d90e4bfefea90a Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Tue, 25 Oct 2022 14:12:05 -0700 Subject: pin expiry --- src/components/Pin.svelte | 13 +++---------- src/lib/store.js | 11 ++++------- src/routes/send/[...text]/+page.server.js | 2 +- 3 files changed, 8 insertions(+), 18 deletions(-) (limited to 'src/components/Pin.svelte') diff --git a/src/components/Pin.svelte b/src/components/Pin.svelte index 86e78ac1..8f33a7f3 100644 --- a/src/components/Pin.svelte +++ b/src/components/Pin.svelte @@ -1,13 +1,11 @@ @@ -29,13 +27,8 @@
diff --git a/src/lib/store.js b/src/lib/store.js index c648a657..3174a86c 100644 --- a/src/lib/store.js +++ b/src/lib/store.js @@ -1,10 +1,8 @@ import { get, writable } from 'svelte/store'; import { browser } from '$app/environment'; -// creates a Svelte store synced to sessionStorage with the given key and default value -const persistSession = (key, defaultValue, expiry = 60 * 5 * 1000) => { - if (browser && new Date() - expiry > sessionStorage.getItem(key + 'time')) { - console.log('expired', sessionStorage.getItem(key + 'time')); +const persistSession = (key, defaultValue, expiry) => { + if (expiry && browser && new Date() - expiry > sessionStorage.getItem(key + 'time')) { sessionStorage.removeItem(key); } @@ -14,14 +12,13 @@ const persistSession = (key, defaultValue, expiry = 60 * 5 * 1000) => { : defaultValue ); - browser && sessionStorage.setItem(key + 'time', Date.now()); + expiry && browser && sessionStorage.setItem(key + 'time', Date.now()); s.subscribe((v) => browser && sessionStorage.setItem(key, JSON.stringify(v))); return s; }; -// creates a Svelte store synced to localStorage with the given key and default value const persistLocal = (key, defaultValue) => { let s = writable( browser && localStorage.getItem(key) && localStorage.getItem(key) !== 'undefined' @@ -45,4 +42,4 @@ export const colorTheme = writable('from-primary to-gradient'); export const tempProfileFiles = writable(); export const avatarUpload = writable(); export const bannerUpload = writable(); -export const pin = persistSession('pin'); +export const pin = persistSession('pin', undefined, 5 * 60 * 1000); diff --git a/src/routes/send/[...text]/+page.server.js b/src/routes/send/[...text]/+page.server.js index 45bb597d..b909ab4d 100644 --- a/src/routes/send/[...text]/+page.server.js +++ b/src/routes/send/[...text]/+page.server.js @@ -55,6 +55,6 @@ export const actions = { const form = await request.formData(); await parse(form.get('text')); - return invalid(403, { error: 'Failed to recognize input' }); + return invalid(403, { error: 'Does not compute, try again' }); } }; -- cgit v1.2.3