From 8c8779162bf003ab65e2a6361d51ea0bc75092f3 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Thu, 6 Oct 2022 02:57:39 -0700 Subject: handle internal payments better --- src/routes/[username]/receive/+page.svelte | 1 + src/routes/send/[...text]/+page.server.js | 13 ++--- src/routes/send/[uuid=uuid]/+page.server.js | 23 ++++++++ src/routes/send/[uuid=uuid]/+page.svelte | 88 +++++++++++++++++++++++++++++ src/routes/sent/+page.svelte | 11 ++++ 5 files changed, 128 insertions(+), 8 deletions(-) create mode 100644 src/routes/send/[uuid=uuid]/+page.server.js create mode 100644 src/routes/send/[uuid=uuid]/+page.svelte (limited to 'src/routes') diff --git a/src/routes/[username]/receive/+page.svelte b/src/routes/[username]/receive/+page.svelte index d205e6e6..7b0562d5 100644 --- a/src/routes/[username]/receive/+page.svelte +++ b/src/routes/[username]/receive/+page.svelte @@ -11,6 +11,7 @@
+ diff --git a/src/routes/send/[...text]/+page.server.js b/src/routes/send/[...text]/+page.server.js index ca1ce652..6bd3ae6a 100644 --- a/src/routes/send/[...text]/+page.server.js +++ b/src/routes/send/[...text]/+page.server.js @@ -5,31 +5,28 @@ import { invalid, redirect } from '@sveltejs/kit'; let parse = async (t) => { if (!t) return; - let user; + let uuid; // lightning if (t.startsWith('ln')) { try { - ({ user } = await get(`/invoice/${t}`)); + ({ uuid } = await get(`/invoice/${t}`)); } catch (e) { throw redirect(303, `/send/lightning/${t}`); } - if (user) { - let { amount } = await post('/lightning/parse', { payreq: t }); - throw redirect(303, `/send/user/${user.username}/${amount}`); - } + if (uuid) throw redirect(303, `/send/${uuid}`); } // bitcoin if (validate(t)) { try { - ({ user } = await get(`/invoice/${t}`)); + ({ uuid } = await get(`/invoice/${t}`)); } catch (e) { throw redirect(303, `/send/bitcoin/${t}`); } - if (user) throw redirect(303, `/send/user/${user.username}`); + if (uuid) throw redirect(303, `/send/${uuid}`); } // ln address diff --git a/src/routes/send/[uuid=uuid]/+page.server.js b/src/routes/send/[uuid=uuid]/+page.server.js new file mode 100644 index 00000000..661e9e7b --- /dev/null +++ b/src/routes/send/[uuid=uuid]/+page.server.js @@ -0,0 +1,23 @@ +import { error, invalid, redirect } from '@sveltejs/kit'; +import { btc as asset, auth, get, post } from '$lib/utils'; + +export async function load({ params, parent }) { + let { user } = await parent(); + let { amount, address, text, user: recipient } = await get(`/invoice/${params.uuid}`); + if (recipient.username === user.username) throw error(500, { message: 'Cannot send to self' }); + return { amount, address, payreq: text, recipient }; +} + +export const actions = { + default: async ({ cookies, params, request }) => { + let body = Object.fromEntries(await request.formData()); + let { confirmed } = body; + + if (!confirmed) { + return invalid(403, { amount, confirm: true }); + } + + await post('/send', body, auth(cookies)); + throw redirect(307, '/sent'); + } +}; diff --git a/src/routes/send/[uuid=uuid]/+page.svelte b/src/routes/send/[uuid=uuid]/+page.svelte new file mode 100644 index 00000000..f625978f --- /dev/null +++ b/src/routes/send/[uuid=uuid]/+page.svelte @@ -0,0 +1,88 @@ + + + + +
+ {#if amount} +
+

Send

+

+ {fiat ? f(amountFiat, currency) : s(amount)} + {#if !fiat} + sats + {/if} +

+ +

to

+

{recipient.username}

+
+ {:else} + + {/if} + + + + + + + + +
+ {#if amount} + + {:else} + + {/if} +
+ +
diff --git a/src/routes/sent/+page.svelte b/src/routes/sent/+page.svelte index f79166e4..95612a17 100644 --- a/src/routes/sent/+page.svelte +++ b/src/routes/sent/+page.svelte @@ -1,4 +1,5 @@ @@ -15,6 +22,10 @@

Sent!

+

+ {f(fiat, user.currency)} +

+

({s(amount)} SAT)