From 5e3d4133760962db28c4f3a595f0566bd59391ff Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Mon, 17 Oct 2022 15:31:08 -0700 Subject: thanks page --- src/lib/store.js | 1 + 1 file changed, 1 insertion(+) (limited to 'src/lib/store.js') diff --git a/src/lib/store.js b/src/lib/store.js index c64ad39f..765e14cf 100644 --- a/src/lib/store.js +++ b/src/lib/store.js @@ -29,6 +29,7 @@ const persistLocal = (key, defaultValue) => { export const redirect = writable(); export const rate = writable(); +export const user = writable(); export const selectedRate = writable(); export const token = persistSession('token'); export const invoices = writable({}); -- cgit v1.2.3 From 02af363d2f0d552a72dc1c90bf8d785e04465d3a Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Mon, 17 Oct 2022 23:29:32 -0700 Subject: invoice redirect --- .env | 3 -- .env.sample | 3 ++ .gitignore | 1 + src/components/RegisterOrLogin.svelte | 6 ++-- src/hooks.server.js | 4 +-- src/lib/socket.js | 4 +-- src/lib/store.js | 3 +- src/lib/upload.js | 2 +- src/lib/utils.js | 11 +++++++ src/routes/+layout.server.js | 9 ++---- src/routes/+layout.svelte | 3 +- src/routes/[username]/dashboard/+page.server.js | 1 + src/routes/invoice/[id]/+page.svelte | 6 ++-- src/routes/launch/+page.server.js | 6 ++++ src/routes/launch/+page.svelte | 22 +++++++++----- src/routes/launch/purchase/+page.server.js | 37 +++++++++++++++++------- src/routes/launch/purchase/+page.svelte | 16 +++++----- src/routes/launch/purchase/card/+page.server.js | 7 ++--- src/routes/launch/purchase/card/+page.svelte | 18 ++++++------ src/routes/launch/thanks/[asset]/+page.server.js | 1 + src/routes/launch/thanks/[asset]/+page.svelte | 4 ++- src/routes/launch/ticket/+page.svelte | 9 +++--- src/routes/login/+page.server.js | 4 +-- src/routes/register/+page.server.js | 4 +-- src/routes/register/+page.svelte | 2 -- 25 files changed, 115 insertions(+), 71 deletions(-) delete mode 100644 .env create mode 100644 .env.sample create mode 100644 src/routes/[username]/dashboard/+page.server.js create mode 100644 src/routes/launch/+page.server.js create mode 100644 src/routes/launch/thanks/[asset]/+page.server.js (limited to 'src/lib/store.js') diff --git a/.env b/.env deleted file mode 100644 index 468bbf9c..00000000 --- a/.env +++ /dev/null @@ -1,3 +0,0 @@ -PUBLIC_COINOS_URL=http://localhost:3119 -PUBLIC_BTC=5ac9f65c0efcc4775e0baec4ec03abdde22473cd3cf33c0419ca290e0751b225 -PUBLIC_SOCKET=ws://localhost:3119/ws diff --git a/.env.sample b/.env.sample new file mode 100644 index 00000000..468bbf9c --- /dev/null +++ b/.env.sample @@ -0,0 +1,3 @@ +PUBLIC_COINOS_URL=http://localhost:3119 +PUBLIC_BTC=5ac9f65c0efcc4775e0baec4ec03abdde22473cd3cf33c0419ca290e0751b225 +PUBLIC_SOCKET=ws://localhost:3119/ws diff --git a/.gitignore b/.gitignore index dad6f805..75631d29 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ node_modules /build /.svelte-kit /package +.env diff --git a/src/components/RegisterOrLogin.svelte b/src/components/RegisterOrLogin.svelte index 0b954387..7f254400 100644 --- a/src/components/RegisterOrLogin.svelte +++ b/src/components/RegisterOrLogin.svelte @@ -3,7 +3,7 @@ import { enhance } from '$app/forms'; import { Icon } from '$comp'; import { focus } from '$lib/utils'; - import { redirect } from '$lib/store'; + import { loginRedirect } from '$lib/store'; import { t } from '$lib/translations'; export let form; @@ -40,8 +40,8 @@ {/if}
- {#if $redirect} - + {#if $loginRedirect} + {/if}
diff --git a/src/hooks.server.js b/src/hooks.server.js index 58882771..a5b1eef3 100644 --- a/src/hooks.server.js +++ b/src/hooks.server.js @@ -2,9 +2,8 @@ import { auth, get } from '$lib/utils'; export async function handle({ event, resolve }) { let token = event.cookies.get('token'); - if (token) { - event.request.headers.set('authorization', `Bearer ${token}`); + if (token) { try { event.locals.user = await get('/me', auth(event.cookies)); } catch (e) { @@ -13,7 +12,6 @@ export async function handle({ event, resolve }) { } const response = await resolve(event); - response.headers.set('x-custom-header', 'potato'); return response; } diff --git a/src/lib/socket.js b/src/lib/socket.js index 7cce0071..fb77333f 100644 --- a/src/lib/socket.js +++ b/src/lib/socket.js @@ -1,5 +1,5 @@ import { get } from 'svelte/store'; -import { invoices, newPayment, rate } from '$lib/store'; +import { invoices, newPayment, rate, user } from '$lib/store'; import { success } from '$lib/utils'; import { env } from '$env/dynamic/public'; @@ -21,7 +21,7 @@ export const messages = (data) => ({ payment() { let { amount, invoice } = data; - if (get(user).account_id !== data.account_id ) return; + if (get(user).account_id !== data.account_id) return; if (invoice) { invoices.set({ ...get(invoices), [invoice.uuid]: invoice }); diff --git a/src/lib/store.js b/src/lib/store.js index 765e14cf..ffafa70b 100644 --- a/src/lib/store.js +++ b/src/lib/store.js @@ -27,7 +27,8 @@ const persistLocal = (key, defaultValue) => { return s; }; -export const redirect = writable(); +export const invoiceRedirect = writable(); +export const loginRedirect = writable(); export const rate = writable(); export const user = writable(); export const selectedRate = writable(); diff --git a/src/lib/upload.js b/src/lib/upload.js index 6354b7f4..0e8a2908 100644 --- a/src/lib/upload.js +++ b/src/lib/upload.js @@ -1,5 +1,5 @@ export const upload = async (file, type, progress, token) => { - console.log("FILE", file) + console.log('FILE', file); let url = `/api/upload/${type}`; let formData = new FormData(); formData.append('file', file); diff --git a/src/lib/utils.js b/src/lib/utils.js index 54e965d9..76ce5077 100644 --- a/src/lib/utils.js +++ b/src/lib/utils.js @@ -9,6 +9,17 @@ export function scroll(section) { const base = browser ? '' : env.PUBLIC_COINOS_URL; +export const g = (url, fetch, headers) => + fetch(base + url, { headers }) + .then((r) => r.text()) + .then((body) => { + try { + return JSON.parse(body); + } catch (e) { + throw new Error(body); + } + }); + export const get = (url, headers = {}) => fetch(base + url, { headers }) .then((r) => r.text()) diff --git a/src/routes/+layout.server.js b/src/routes/+layout.server.js index 7f6e8801..6af13a06 100644 --- a/src/routes/+layout.server.js +++ b/src/routes/+layout.server.js @@ -5,7 +5,8 @@ import { env } from '$env/dynamic/public'; export const { PUBLIC_BTC: btc } = env; -export async function load({ cookies, request, url, params }) { +export async function load({ cookies, locals, request, url, params }) { + url.pathname; let token = cookies.get('token'); let user; let rates; @@ -16,11 +17,7 @@ export async function load({ cookies, request, url, params }) { } if (token && token !== 'undefined') { - try { - user = await get('/me', auth(cookies)); - } catch (e) { - throw redirect(307, '/logout'); - } + user = locals.user; if (protectedRoutes.find((p) => url.pathname.match(p))) { if (user.username !== params.username) throw error(404, 'user not found'); diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 0064cce0..5cc75b30 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -14,7 +14,8 @@ const localeLocalStorageKey = 'sveltekit-i18n-locale'; export let data; - let r, u, token, rates; + + let r, u, token, rates; $: update(data); let update = () => { diff --git a/src/routes/[username]/dashboard/+page.server.js b/src/routes/[username]/dashboard/+page.server.js new file mode 100644 index 00000000..b6206324 --- /dev/null +++ b/src/routes/[username]/dashboard/+page.server.js @@ -0,0 +1 @@ +export const load = ({ parent }) => parent(); diff --git a/src/routes/invoice/[id]/+page.svelte b/src/routes/invoice/[id]/+page.svelte index 04a31813..8e9e6ff4 100644 --- a/src/routes/invoice/[id]/+page.svelte +++ b/src/routes/invoice/[id]/+page.svelte @@ -1,7 +1,7 @@ @@ -29,7 +32,12 @@

- Come join us at our launch party celebrating our new design and 10 years since our first commit! + Come join us at our launch party celebrating our new design and 10 years since our first commit!

When

@@ -58,7 +66,7 @@
diff --git a/src/routes/launch/purchase/+page.server.js b/src/routes/launch/purchase/+page.server.js index b9b20f28..ff5efc84 100644 --- a/src/routes/launch/purchase/+page.server.js +++ b/src/routes/launch/purchase/+page.server.js @@ -1,16 +1,18 @@ import { auth, get, post } from '$lib/utils'; import tickets from '$lib/tickets'; -import { redirect } from "@sveltejs/kit"; +import { redirect } from '@sveltejs/kit'; +import { env } from '$env/dynamic/private'; +import { invalidateAll } from '$app/navigation'; +import { browser } from '$app/environment'; export const load = async ({ parent }) => { - let p = await parent(); - let t = await get('/ticket'); - return { ...p, ...t }; + let tickets = await get('/tickets'); + return { ...(await parent()), tickets }; }; export const actions = { - internal: async ({ cookies, request, parent }) => { - let { ticket } = Object.fromEntries(await request.formData()); + internal: async ({ cookies, request }) => { + let { ticket } = await get('/ticket'); let { asset } = await post( '/assets', @@ -26,7 +28,9 @@ export const actions = { auth(cookies) ); - throw redirect(307, `/launch/thanks/${asset}`); + await post('/ticket', { asset }, { authorization: `Bearer ${env.LAUNCH}` }); + + throw redirect(307, `/launch/thanks/${asset}`); }, lightning: async ({ cookies, request }) => { @@ -35,10 +39,9 @@ export const actions = { let rates = await get('/rates'); let invoice = { - amount: parseInt(form.get('amount')), - tip: parseInt(form.get('tip')), + amount: 25000, network: 'lightning', - prompt: form.get('prompt') === 'true', + prompt: false, rate: rates[form.get('currency')] }; @@ -50,3 +53,17 @@ export const actions = { }, bitcoin: () => console.log('YYEAH') }; + +export async function POST({ request }) { + let { address, amount, confirmed } = await request.json(); + if (!confirmed) return; + + if (request.headers.get('x-webhook') !== env.WEBHOOK) { + throw new Error('access denied'); + } + + let username = invoices[address]; + amount = Math.round(amount / 2100); + + await post('/send', { username, asset, amount }, { authorization: `Bearer ${token}` }); +} diff --git a/src/routes/launch/purchase/+page.svelte b/src/routes/launch/purchase/+page.svelte index a7a2b51c..d31d20f0 100644 --- a/src/routes/launch/purchase/+page.svelte +++ b/src/routes/launch/purchase/+page.svelte @@ -1,21 +1,21 @@ @@ -18,7 +20,7 @@ We've minted your ticket as an NFT on the Liquid Blockchain as a proof of purchase and commemorative token. It may confer some special benefits in the future. + > as a proof of purchase and commemorative token.

diff --git a/src/routes/launch/ticket/+page.svelte b/src/routes/launch/ticket/+page.svelte index acf3b7a5..229c18f0 100644 --- a/src/routes/launch/ticket/+page.svelte +++ b/src/routes/launch/ticket/+page.svelte @@ -1,5 +1,4 @@ - - + diff --git a/src/routes/login/+page.server.js b/src/routes/login/+page.server.js index 94981ff7..aa8797f9 100644 --- a/src/routes/login/+page.server.js +++ b/src/routes/login/+page.server.js @@ -4,7 +4,7 @@ import { login } from '$lib/utils'; export const actions = { default: async ({ cookies, request }) => { let form = Object.fromEntries(await request.formData()); - let { username, password, redirect: r } = form; + let { username, password, loginRedirect } = form; let user = { username, password }; try { @@ -13,6 +13,6 @@ export const actions = { return invalid(400, { error: 'Login failed' }); } - throw redirect(303, r || `/${user.username}/dashboard`); + throw redirect(303, loginRedirect || `/${user.username}/dashboard`); } }; diff --git a/src/routes/register/+page.server.js b/src/routes/register/+page.server.js index bfe1a9b7..c5751d4c 100644 --- a/src/routes/register/+page.server.js +++ b/src/routes/register/+page.server.js @@ -4,7 +4,7 @@ import { post, login } from '$lib/utils'; export const actions = { default: async ({ cookies, request }) => { let form = Object.fromEntries(await request.formData()); - let { username, password, redirect: r } = form; + let { username, password, loginRedirect } = form; let user = { username, password }; let error; @@ -23,6 +23,6 @@ export const actions = { } if (error) return invalid(400, { error }); - throw redirect(307, r || `/${user.username}/dashboard`); + throw redirect(307, loginRedirect || `/${user.username}/dashboard`); } }; diff --git a/src/routes/register/+page.svelte b/src/routes/register/+page.svelte index aa0e66e0..fd9e4417 100644 --- a/src/routes/register/+page.svelte +++ b/src/routes/register/+page.svelte @@ -5,9 +5,7 @@ afterNavigate(async () => { try { - console.log('whoa'); await invalidateAll(); - console.log('no'); } catch (e) { console.log(e); } -- cgit v1.2.3 From ad24f34434368d3767fd147d80d45adc3c28f106 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Tue, 18 Oct 2022 21:03:27 -0700 Subject: tickets wip --- src/lib/socket.js | 3 +- src/lib/store.js | 1 - src/routes/invoice/[id]/+page.svelte | 5 ++- src/routes/invoice/[id]/paid/+page.svelte | 2 +- src/routes/launch/+page.svelte | 33 +++++++++------ src/routes/launch/purchase/+page.server.js | 19 ++++++++- src/routes/launch/purchase/+page.svelte | 28 +++---------- src/routes/launch/ticket/+page.server.js | 9 ++++ src/routes/launch/ticket/+page.svelte | 32 +++++++++++++-- static/icons/party.svg | 64 +++++++++++++++++++++++++++++ static/images/loft.jpg | Bin 0 -> 286853 bytes 11 files changed, 150 insertions(+), 46 deletions(-) create mode 100644 src/routes/launch/ticket/+page.server.js create mode 100644 static/icons/party.svg create mode 100644 static/images/loft.jpg (limited to 'src/lib/store.js') diff --git a/src/lib/socket.js b/src/lib/socket.js index fb77333f..b385db9d 100644 --- a/src/lib/socket.js +++ b/src/lib/socket.js @@ -19,13 +19,14 @@ export const messages = (data) => ({ rate.set(data); }, - payment() { + async payment() { let { amount, invoice } = data; if (get(user).account_id !== data.account_id) return; if (invoice) { invoices.set({ ...get(invoices), [invoice.uuid]: invoice }); } + newPayment.set(true); if (amount > 0) { success(`Received ${amount} sats!`); diff --git a/src/lib/store.js b/src/lib/store.js index ffafa70b..e317ed24 100644 --- a/src/lib/store.js +++ b/src/lib/store.js @@ -27,7 +27,6 @@ const persistLocal = (key, defaultValue) => { return s; }; -export const invoiceRedirect = writable(); export const loginRedirect = writable(); export const rate = writable(); export const user = writable(); diff --git a/src/routes/invoice/[id]/+page.svelte b/src/routes/invoice/[id]/+page.svelte index 8e9e6ff4..cfff251e 100644 --- a/src/routes/invoice/[id]/+page.svelte +++ b/src/routes/invoice/[id]/+page.svelte @@ -1,7 +1,7 @@ +{$invoices[id]?.memo}
diff --git a/src/routes/launch/ticket/+page.server.js b/src/routes/launch/ticket/+page.server.js new file mode 100644 index 00000000..59ea966e --- /dev/null +++ b/src/routes/launch/ticket/+page.server.js @@ -0,0 +1,9 @@ +import { get } from '$lib/utils'; + +export const load = async ({ cookies, parent }) => { + let { user } = await parent(); + let tickets = await get('/tickets'); + let ticket = tickets.findIndex((t) => user.accounts.find((a) => a.asset === t)); + console.log("TICK", ticket) + return { ticket }; +}; diff --git a/src/routes/launch/ticket/+page.svelte b/src/routes/launch/ticket/+page.svelte index 229c18f0..2585c57c 100644 --- a/src/routes/launch/ticket/+page.svelte +++ b/src/routes/launch/ticket/+page.svelte @@ -1,4 +1,28 @@ - + + +
+
+

+ Your Ticket +

+ + Ticket + + +
+
diff --git a/static/icons/party.svg b/static/icons/party.svg new file mode 100644 index 00000000..f33b9fc1 --- /dev/null +++ b/static/icons/party.svg @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/images/loft.jpg b/static/images/loft.jpg new file mode 100644 index 00000000..39ca49ab Binary files /dev/null and b/static/images/loft.jpg differ -- cgit v1.2.3 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 +++++++++++++++++++++++++ src/components/index.js | 1 + src/lib/store.js | 1 + src/locales/en.json | 2 +- src/locales/es.json | 2 +- src/routes/[username]/settings/+page.server.js | 2 +- src/routes/[username]/settings/+page.svelte | 21 +++++++++--- src/routes/[username]/settings/_account.svelte | 5 ++- src/routes/[username]/settings/_security.svelte | 15 ++++++--- 9 files changed, 77 insertions(+), 16 deletions(-) create mode 100644 src/components/Pin.svelte (limited to 'src/lib/store.js') 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

+
+ + + + + + + + +
+ +
+ +
+
+
diff --git a/src/components/index.js b/src/components/index.js index d0af4c38..c3a5000c 100644 --- a/src/components/index.js +++ b/src/components/index.js @@ -1,3 +1,4 @@ +export { default as Pin } from './Pin.svelte'; export { default as Card } from './Card.svelte'; export { default as Lock } from './Lock.svelte'; export { default as Calendar } from './Calendar.svelte'; diff --git a/src/lib/store.js b/src/lib/store.js index e317ed24..4e5421ba 100644 --- a/src/lib/store.js +++ b/src/lib/store.js @@ -38,3 +38,4 @@ export const colorTheme = writable('from-primary to-gradient'); export const tempProfileFiles = writable(); export const avatarUpload = writable(); export const bannerUpload = writable(); +export const pin = writable(); diff --git a/src/locales/en.json b/src/locales/en.json index 60cd1b0e..b5aef47a 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -32,7 +32,7 @@ "bio": "Strategic & Project Management. Jack of all Trades. Can always find time to meet for coffee." }, "cole": { - "name": "Cole Goodwin", + "name": "Cole", "position": "Bitcoin Professional", "bio": "As a Certified Bitcoin Professional, Cole is a driven individual with a passion for freedom. He came across bitcoin in 2016 and studied it in depth. Now he wants to introduce the lightning network to as many users as possible." }, diff --git a/src/locales/es.json b/src/locales/es.json index 5fad6dd8..068d93a5 100644 --- a/src/locales/es.json +++ b/src/locales/es.json @@ -32,7 +32,7 @@ "bio": "Gestión Estratégica y de Proyectos. Ella es una todóloga. Siempre encuentra tiempo para reunirse a tomar un café." }, "cole": { - "name": "Cole Goodwin", + "name": "Cole", "position": "Profesional en Bitcoin", "bio": "Como profesional certificado de Bitcoin, Cole es una persona motivada y apasionada por la libertad. Encontró bitcoin en el año 2016 bitcoin y se dedicó a estudiarlo en profundidad. Ahora quiere presentar Lightning Network a tantos usuarios como sea posible." }, diff --git a/src/routes/[username]/settings/+page.server.js b/src/routes/[username]/settings/+page.server.js index deb4356e..ae7e0a78 100644 --- a/src/routes/[username]/settings/+page.server.js +++ b/src/routes/[username]/settings/+page.server.js @@ -3,7 +3,7 @@ import { auth, get, post } from '$lib/utils'; export const actions = { default: async ({ cookies, request }) => { - let form = Object.fromEntries(await request.formData()) + let form = Object.fromEntries(await request.formData()); let user = { ...(await get('/me', auth(cookies))), diff --git a/src/routes/[username]/settings/+page.svelte b/src/routes/[username]/settings/+page.svelte index a584fc56..7bd4ddcc 100644 --- a/src/routes/[username]/settings/+page.svelte +++ b/src/routes/[username]/settings/+page.svelte @@ -1,21 +1,28 @@ +{#if user.haspin && $pin?.length !== 6} + +{/if} + + +

{$t('user.settings.header')} @@ -74,7 +85,7 @@ class="z-10 fixed bottom-0 bg-white shadow border-t w-full flex justify-center items-center py-3" > select('profile')} + on:keydown={() => select('profile')}>Select { verifying = true; @@ -24,6 +26,7 @@ let locked; $: verifyCode.join('').length > 5 && checkPin(); let checkPin = async () => { + old = $current; if (locked) return; locked = true; @@ -35,7 +38,8 @@ try { if (pin.length > 5 && pin === verify) { - user.pin = pin; + user.haspin = true; + $current = pin; submit.click(); } else { failure('Pin mismatch, try again'); @@ -62,9 +66,9 @@ }; let togglePin = async () => { - if (user.pin) { + if (user.haspin) { try { - user.pin = null; + pin = null; submit.click(); } catch (e) { failure('Failed to disable pin'); @@ -109,7 +113,8 @@
- + + {verifying ? 'Verify' : 'Security'} PIN

{$t('user.settings.securityPINDescription')} @@ -141,7 +146,7 @@

{:else} {user.haspin ? 'Disable Pin' : 'Enable Pin'} {/if}

-- 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/lib/store.js') 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/lib/store.js') 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