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 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