diff options
| author | Adam Soltys <[email protected]> | 2022-10-17 23:29:32 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2022-10-17 23:29:32 -0700 |
| commit | 02af363d2f0d552a72dc1c90bf8d785e04465d3a (patch) | |
| tree | 03fe0719e4c623cf6d6b649c0867b910b6db5199 /src/routes | |
| parent | 5e3d4133760962db28c4f3a595f0566bd59391ff (diff) | |
| download | coinos-ui-02af363d2f0d552a72dc1c90bf8d785e04465d3a.tar.gz coinos-ui-02af363d2f0d552a72dc1c90bf8d785e04465d3a.zip | |
invoice redirect
Diffstat (limited to 'src/routes')
| -rw-r--r-- | src/routes/+layout.server.js | 9 | ||||
| -rw-r--r-- | src/routes/+layout.svelte | 3 | ||||
| -rw-r--r-- | src/routes/[username]/dashboard/+page.server.js | 1 | ||||
| -rw-r--r-- | src/routes/invoice/[id]/+page.svelte | 6 | ||||
| -rw-r--r-- | src/routes/launch/+page.server.js | 6 | ||||
| -rw-r--r-- | src/routes/launch/+page.svelte | 22 | ||||
| -rw-r--r-- | src/routes/launch/purchase/+page.server.js | 37 | ||||
| -rw-r--r-- | src/routes/launch/purchase/+page.svelte | 16 | ||||
| -rw-r--r-- | src/routes/launch/purchase/card/+page.server.js | 7 | ||||
| -rw-r--r-- | src/routes/launch/purchase/card/+page.svelte | 18 | ||||
| -rw-r--r-- | src/routes/launch/thanks/[asset]/+page.server.js | 1 | ||||
| -rw-r--r-- | src/routes/launch/thanks/[asset]/+page.svelte | 4 | ||||
| -rw-r--r-- | src/routes/launch/ticket/+page.svelte | 9 | ||||
| -rw-r--r-- | src/routes/login/+page.server.js | 4 | ||||
| -rw-r--r-- | src/routes/register/+page.server.js | 4 | ||||
| -rw-r--r-- | src/routes/register/+page.svelte | 2 |
16 files changed, 91 insertions, 58 deletions
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 @@ <script> import { copy, f, get, reverseFormat, s, sats } from '$lib/utils'; import { browser } from '$app/environment'; - import { invoices } from '$lib/store'; + import { invoices, invoiceRedirect } from '$lib/store'; import { Icon, Heart, Image, Qr, Tip } from '$comp'; import { goto } from '$app/navigation'; import { t } from '$lib/translations'; @@ -44,7 +44,9 @@ $: tip = Math.round((amount / 100) * tipPercent); $invoices[id] = { amount, id, rate, received, text, tip, username }; - $: browser && $invoices[id]?.received >= $invoices[id]?.amount && goto(`/invoice/${id}/paid`); + $: browser && + $invoices[id]?.received >= $invoices[id]?.amount && + goto($invoiceRedirect || `/invoice/${id}/paid`); $: amountFiat = parseFloat(((amount * rate) / sats).toFixed(2)); diff --git a/src/routes/launch/+page.server.js b/src/routes/launch/+page.server.js new file mode 100644 index 00000000..2b44dfae --- /dev/null +++ b/src/routes/launch/+page.server.js @@ -0,0 +1,6 @@ +import { auth, get } from '$lib/utils'; + +export const load = async ({ parent }) => { + let tickets = await get('/tickets'); + return { ...(await parent()), tickets }; +}; diff --git a/src/routes/launch/+page.svelte b/src/routes/launch/+page.svelte index 74638257..843c7705 100644 --- a/src/routes/launch/+page.svelte +++ b/src/routes/launch/+page.svelte @@ -1,15 +1,18 @@ <script> - import { redirect } from '$lib/store'; + import { loginRedirect } from '$lib/store'; import { beforeNavigate } from '$app/navigation'; import { info } from '$lib/utils'; export let data; - let { user } = data; - $: link = user ? '/launch/purchase' : '/register'; - $redirect = '/launch/purchase'; + let { user, tickets } = data; + $loginRedirect = '/launch/purchase'; + + let hasTicket = !!user?.accounts.find((a) => tickets.includes(a.asset)); + $: link = user ? $loginRedirect : '/register'; + $: text = (hasTicket ? 'View' : 'Purchase') + ' Ticket'; beforeNavigate(({ to }) => { - if (to.routeId === 'register') info('Please sign in so we can get you a ticket'); + if (to?.routeId === 'register') info('Please sign in so we can get you a ticket'); }); </script> @@ -29,7 +32,12 @@ </h1> <p class="leading-normal mb-2"> - Come join us at our launch party celebrating our new design and 10 years since our <a href="https://github.com/coinos/coinos-server/commit/b25d11b" class="underline" target="_blank">first commit</a>! + Come join us at our launch party celebrating our new design and 10 years since our <a + href="https://github.com/coinos/coinos-server/commit/b25d11b" + class="underline" + target="_blank" + rel="noreferrer">first commit</a + >! </p> <div class="ml-8"> <p><b>When</b></p> @@ -58,7 +66,7 @@ <button class="bg-white text-black border rounded-full px-8 py-4 font-bold hover:opacity-80 text-2xl" > - Purchase Ticket + {text} </button> </a> </div> 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 @@ <script> import { enhance } from '$app/forms'; - import { selectedRate } from '$lib/store'; + import { invoiceRedirect, selectedRate } from '$lib/store'; import { post } from '$lib/utils'; import { goto } from '$app/navigation'; export let data; - export let form; let amount = 25000; let { address, - currency, + currency, account: { balance }, username } = data.user; - let { ticket } = data; + let { tickets } = data; + let ticket = tickets.length; let invoice; let get = async (network) => { @@ -26,6 +26,7 @@ username }); + $invoiceRedirect = '/launch/purchase'; goto(`/invoice/${uuid}`); }; @@ -38,12 +39,13 @@ <div class="mx-auto h-screen flex items-center justify-center px-4"> <div class="font-normal text-gray-800 mx-auto mb-8 space-y-8"> <h1 class="mb-4 text-4xl font-bold leading-none tracking-tight text-gray-800 text-center"> - Confirm Purchase + Confirm Purchase </h1> <img src={`/tickets/${(ticket + 1).toString().padStart(2, '0')}.png`} class="w-full max-w-[800px]" + alt="Ticket" /> {#if balance > amount} @@ -63,8 +65,8 @@ </h1> <form action="?/lightning" method="POST"> - <input type="hidden" name="currency" value={currency} /> - <input type="hidden" name="username" value={username} /> + <input type="hidden" name="currency" value={currency} /> + <input type="hidden" name="username" value={username} /> <button class="bg-black text-white border rounded-full px-8 py-4 font-bold hover:opacity-80 mx-auto text-2xl" > diff --git a/src/routes/launch/purchase/card/+page.server.js b/src/routes/launch/purchase/card/+page.server.js index 1393eecc..eaa8d5f3 100644 --- a/src/routes/launch/purchase/card/+page.server.js +++ b/src/routes/launch/purchase/card/+page.server.js @@ -1,3 +1,5 @@ +import { env } from '$env/dynamic/private'; + let stripe = 'https://api.stripe.com/v1'; export const actions = { @@ -5,10 +7,7 @@ export const actions = { let form = await request.formData(); let headers = new Headers(); - headers.set( - 'Authorization', - 'Basic ' + new Buffer('sk_test_mBv5bAeAhiYSDYFZJNsDwjht:').toString('base64') - ); + headers.set('Authorization', 'Basic ' + new Buffer(env.STRIPE + ':').toString('base64')); let body = new URLSearchParams({ 'card[number]': form.get('number'), diff --git a/src/routes/launch/purchase/card/+page.svelte b/src/routes/launch/purchase/card/+page.svelte index 73f2d880..79240078 100644 --- a/src/routes/launch/purchase/card/+page.svelte +++ b/src/routes/launch/purchase/card/+page.svelte @@ -9,7 +9,7 @@ type="text" name="number" placeholder="0000 0000 0000" - value="4242424242424242" + value="4242424242424242" /> <svg xmlns="http://www.w3.org/2000/svg" @@ -34,7 +34,7 @@ type="text" name="expiry" placeholder="MM/YY" - value="0123" + value="0123" /> <svg xmlns="http://www.w3.org/2000/svg" @@ -82,7 +82,7 @@ type="text" name="cvc" placeholder="•••" - value="123" + value="123" /> <svg xmlns="http://www.w3.org/2000/svg" @@ -100,10 +100,10 @@ </svg> </label> - <div class="w-full flex"> - <button - - class="bg-black text-white border rounded-full px-8 py-4 font-bold hover:opacity-80 mx-auto text-2xl" - type="submit">Submit</button> - </div> + <div class="w-full flex"> + <button + class="bg-black text-white border rounded-full px-8 py-4 font-bold hover:opacity-80 mx-auto text-2xl" + type="submit">Submit</button + > + </div> </form> diff --git a/src/routes/launch/thanks/[asset]/+page.server.js b/src/routes/launch/thanks/[asset]/+page.server.js new file mode 100644 index 00000000..e9e01376 --- /dev/null +++ b/src/routes/launch/thanks/[asset]/+page.server.js @@ -0,0 +1 @@ +// export const load = ({ parent }) => parent(); diff --git a/src/routes/launch/thanks/[asset]/+page.svelte b/src/routes/launch/thanks/[asset]/+page.svelte index 6cf0915f..4f0ec3bb 100644 --- a/src/routes/launch/thanks/[asset]/+page.svelte +++ b/src/routes/launch/thanks/[asset]/+page.svelte @@ -2,7 +2,9 @@ import { page } from '$app/stores'; export let data; + let { user } = data; + let { asset } = $page.params; </script> @@ -18,7 +20,7 @@ We've minted your ticket as an <a href={`https://blockstream.info/liquid/asset/${asset}`} class="underline">NFT on the Liquid Blockchain</a - > 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. </p> </div> 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 @@ - - <img - src={`/tickets/${(ticket + 1).toString().padStart(2, '0')}.png`} - class="w-full max-w-[800px]" - /> +<img + src={`/tickets/${(ticket + 1).toString().padStart(2, '0')}.png`} + class="w-full max-w-[800px]" +/> 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); } |
