diff options
| author | Adam Soltys <[email protected]> | 2022-10-04 00:42:00 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2022-10-04 00:42:00 -0700 |
| commit | 81fc48aa58d932a19fb578e47170c06b3992d03a (patch) | |
| tree | 30b06d929a175f0e74ef1da87e3d474f9068ad6c | |
| parent | 63f1a6780bab85ebb48ca1fc142cc6beaf772faa (diff) | |
| download | coinos-ui-81fc48aa58d932a19fb578e47170c06b3992d03a.tar.gz coinos-ui-81fc48aa58d932a19fb578e47170c06b3992d03a.zip | |
refactoring
25 files changed, 83 insertions, 94 deletions
diff --git a/src/components/AppHeader.svelte b/src/components/AppHeader.svelte index fca11272..dc266abc 100644 --- a/src/components/AppHeader.svelte +++ b/src/components/AppHeader.svelte @@ -127,6 +127,7 @@ ? $tempProfileFiles.profile : `/api/public/${subject.username}-profile.png`} class="w-full h-full object-cover object-center overflow-hidden" + alt={subject.username} /> </a> </div> diff --git a/src/components/LandingHeader.svelte b/src/components/LandingHeader.svelte index 1f12e049..35b9de06 100644 --- a/src/components/LandingHeader.svelte +++ b/src/components/LandingHeader.svelte @@ -7,6 +7,7 @@ export let howItWorks; export let faq; export let about; + export let user; let showMobileMenu = false; const mobileMenuButtonClick = (section) => { diff --git a/src/components/Qr.svelte b/src/components/Qr.svelte index 988faf25..2a7c6103 100644 --- a/src/components/Qr.svelte +++ b/src/components/Qr.svelte @@ -4,7 +4,7 @@ import { onMount } from 'svelte'; import { copy } from '$lib/utils'; - export let image, text, qr, disabled; + export let image, text, qr; let toggle = () => screenfull.toggle(qr.firstChild); diff --git a/src/components/Tip.svelte b/src/components/Tip.svelte index 8509405c..83bf0dfa 100644 --- a/src/components/Tip.svelte +++ b/src/components/Tip.svelte @@ -26,7 +26,6 @@ let apply = async () => { if (customTipAmount > 0) { tipPercent = (customTipAmount / amountFiat) * 100; - console.log('TIP PERCENT', tipPercent); update(); showMobileTip = false; showCustomAmount = false; diff --git a/src/lib/socket.js b/src/lib/socket.js index dac2935e..6317595b 100644 --- a/src/lib/socket.js +++ b/src/lib/socket.js @@ -37,6 +37,7 @@ const maxReconnectDelay = 16000; let currentReconnectDelay = initialReconnectDelay; export function connect(t) { + console.log('CONNECT'); token = t; clearInterval(interval); diff --git a/src/lib/upload.js b/src/lib/upload.js index d43148fb..4b03059c 100644 --- a/src/lib/upload.js +++ b/src/lib/upload.js @@ -1,7 +1,4 @@ -import { get } from 'svelte/store'; -import { token } from '$lib/store'; - -export const upload = async (file, type, progress) => { +export const upload = async (file, type, progress, token) => { 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 a4c77d58..7a988469 100644 --- a/src/lib/utils.js +++ b/src/lib/utils.js @@ -38,17 +38,6 @@ export const post = (url, body, headers) => { }); }; -export const put = (url, body, headers) => { - headers = { ...headers, 'content-type': 'application/json' }; - return fetch(base + url, { - method: 'PUT', - body: JSON.stringify(body), - headers - }).then(async (r) => { - if (!r.ok) throw new Error('put failed'); - }); -}; - export const copy = (text) => { navigator.clipboard.writeText(text); success('Copied!'); @@ -109,14 +98,11 @@ export const info = (m) => { export const login = async (user, cookies) => { let maxAge = 30 * 24 * 60 * 60; let { token } = await post('/login', user); - console.log('logged in', token); let expires = new Date(); expires.setSeconds(expires.getSeconds() + maxAge); - console.log('cs'); cookies.set('token', token, { path: '/' }); - console.log('bs'); }; export const auth = (cookies) => ({ authorization: `Bearer ${cookies.get('token')}` }); diff --git a/src/routes/+layout.server.js b/src/routes/+layout.server.js index 4beaad93..84e5ce5c 100644 --- a/src/routes/+layout.server.js +++ b/src/routes/+layout.server.js @@ -18,7 +18,7 @@ export async function load({ cookies, request, url, params }) { if (token && token !== 'undefined') { try { - user = await get('/me', { accept: 'application/json', authorization: `Bearer ${token}` }); + user = await get('/me', auth(cookies)); } catch (e) { throw redirect(307, '/logout'); } diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 118caa48..a07d2fb1 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -15,6 +15,8 @@ export let data; let { user, rate: r, token, rates } = data; + $: update(data); + let update = () => ({ user, rate: r, token, rates } = data); $rate = r; $: $selectedRate = user && $rate * (rates[user.currency] / rates.USD); @@ -26,16 +28,9 @@ locale.subscribe((lng) => { if (lng) localStorage.setItem(localeLocalStorageKey, lng); }); - - if (protectedRoutes.find((p) => $page.url.pathname.match(p))) { - if (!token) { - goto('/login'); - warning($t('error.signIn')); - } - } - - connect(token); }); + + $: browser && connect(token); </script> <SvelteToast options={{ reversed: true, intro: { y: 192 } }} /> diff --git a/src/routes/[username]/+page.server.js b/src/routes/[username]/+page.server.js index 1bd8c434..d6f2978c 100644 --- a/src/routes/[username]/+page.server.js +++ b/src/routes/[username]/+page.server.js @@ -5,9 +5,3 @@ export async function load({ params }) { let { username } = params; return get(`/users/${username}`); } - -export async function PUT({ request }) { - let { token } = cookie.parse(request.headers.get('cookie') || ''); - let { user } = await request.json(); - await post(`/user`, user, { authorization: `Bearer ${token}` }); -} diff --git a/src/routes/[username]/+page.svelte b/src/routes/[username]/+page.svelte index 5eab4ad2..48039c7b 100644 --- a/src/routes/[username]/+page.svelte +++ b/src/routes/[username]/+page.svelte @@ -2,11 +2,12 @@ import { browser } from '$app/environment'; import { onMount } from 'svelte'; import { Icon, PageNotFound } from '$comp'; - import { subject, user } from '$lib/store'; import { copy } from '$lib/utils'; import { t } from '$lib/translations'; export let data; + let { subject } = data; + let lightningAddress = `${data?.username}@coinos.io`; onMount(async () => { @@ -38,10 +39,10 @@ <div class="flex xl:block justify-center items-center my-20 px-3"> <div class="space-y-10 xl:space-y-0"> <div class="xl:ml-[calc(15vw-64px)] space-y-2 w-full md:w-72"> - <h1 class="text-3xl font-bold">{$subject.username}</h1> + <h1 class="text-3xl font-bold">{subject.username}</h1> <p class="text-secondary"> - {$subject.address && $subject.address !== 'null' ? $subject.address : ''} + {subject.address && subject.address !== 'null' ? subject.address : ''} </p> <!-- TODO diff --git a/src/routes/[username]/receive/+page.server.js b/src/routes/[username]/receive/+page.server.js index 8d523213..60e94f0e 100644 --- a/src/routes/[username]/receive/+page.server.js +++ b/src/routes/[username]/receive/+page.server.js @@ -1,12 +1,21 @@ -import { auth, post } from '$lib/utils'; +import { auth, get, post } from '$lib/utils'; +import { redirect } from '@sveltejs/kit'; export const actions = { - default: async ({ cookies, request, parent }) => { - let { rate, user } = await parent(); - let invoice = Object.fromEntries(await request.formData()); - invoice.rate = rate; + default: async ({ cookies, request }) => { + let form = await request.formData(); + + let invoice = { + amount: parseInt(form.get('amount')), + network: 'lightning', + prompt: form.get('prompt') === 'true', + rate: await get('/rate') + }; + + let user = { username: form.get('username') }; let { uuid } = await post('/invoice', { invoice, user }, auth(cookies)); - throw redirect(303, `/invoice/${uuid}`); + + throw redirect(307, `/invoice/${uuid}`); } }; diff --git a/src/routes/[username]/receive/+page.svelte b/src/routes/[username]/receive/+page.svelte index 3c65279d..d205e6e6 100644 --- a/src/routes/[username]/receive/+page.svelte +++ b/src/routes/[username]/receive/+page.svelte @@ -6,11 +6,12 @@ export let data; let amount; - let { currency } = data.user; + let { currency, username } = data.user; </script> <form method="POST" class="flex justify-center items-center mt-24 mb-3 px-3" use:enhance> <input type="hidden" name="amount" value={amount} /> + <input type="hidden" name="username" value={username} /> <input type="hidden" name="prompt" value="true" /> <div class="space-y-3 w-full md:w-[300px] mx-auto"> diff --git a/src/routes/[username]/settings/+page.server.js b/src/routes/[username]/settings/+page.server.js new file mode 100644 index 00000000..49019e9e --- /dev/null +++ b/src/routes/[username]/settings/+page.server.js @@ -0,0 +1,18 @@ +import { invalid } from '@sveltejs/kit'; +import { auth, get, post } from '$lib/utils'; + +export const actions = { + default: async ({ cookies, request }) => { + let user = { + ...(await get('/me', auth(cookies))), + ...Object.fromEntries(await request.formData()) + }; + try { + await post(`/user`, user, auth(cookies)); + } catch (e) { + return invalid(400, { message: e.message }); + } + + return { success: true }; + } +}; diff --git a/src/routes/[username]/settings/+page.svelte b/src/routes/[username]/settings/+page.svelte index 410ed1bf..91031e41 100644 --- a/src/routes/[username]/settings/+page.svelte +++ b/src/routes/[username]/settings/+page.svelte @@ -1,14 +1,21 @@ <script> + import { enhance } from '$app/forms'; import Account from './_account.svelte'; import Pos from './_pos.svelte'; import Security from './_security.svelte'; import { Icon } from '$comp'; import { t } from '$lib/translations'; - import { failure, success, put } from '$lib/utils'; - import { user, avatarUpload, bannerUpload } from '$lib/store'; + import { failure, success } from '$lib/utils'; + import { avatarUpload, bannerUpload } from '$lib/store'; import { upload } from '$lib/upload'; + export let data; + + let { user, rates, token } = data; + $: update(data); + let update = () => ({ user, rates } = data); + let tab = 'account'; let tabs = [ @@ -21,12 +28,12 @@ let save = async () => { try { - await put('/user', $user); + console.log('Uploading files...'); if ($avatarUpload) { - await upload($avatarUpload.file, $avatarUpload.type, $avatarUpload.progress); + await upload($avatarUpload.file, $avatarUpload.type, $avatarUpload.progress, token); } if ($bannerUpload) { - await upload($bannerUpload.file, $bannerUpload.type, $bannerUpload.progress); + await upload($bannerUpload.file, $bannerUpload.type, $bannerUpload.progress, token); } success('Settings saved'); } catch (e) { @@ -35,7 +42,7 @@ }; </script> -<form on:submit|preventDefault={save} class="mb-[154px]"> +<form method="POST" class="mb-[154px]" use:enhance on:submit={save}> <div class="mt-24 mb-20 px-3 md:px-0 w-full md:w-[400px] mx-auto space-y-8"> <h1 class="text-center text-3xl md:text-4xl font-semibold mb-10"> {$t('user.settings.header')} @@ -51,7 +58,7 @@ {/each} </div> - <svelte:component this={comp} /> + <svelte:component this={comp} {user} {rates} /> </div> <div class="z-10 fixed bottom-0 bg-white shadow border-t w-full flex justify-center items-center py-3" diff --git a/src/routes/[username]/settings/_account.svelte b/src/routes/[username]/settings/_account.svelte index 8a20df43..918a01bf 100644 --- a/src/routes/[username]/settings/_account.svelte +++ b/src/routes/[username]/settings/_account.svelte @@ -5,6 +5,8 @@ import { t } from '$lib/translations'; import { upload } from '$lib/upload'; + export let user; + let selectedTheme = 1; let revealPassword = false; let password; @@ -69,14 +71,15 @@ <div> <label for="username" class="font-bold mb-1 block">{$t('user.settings.username')}</label> <input disabled type="text" name="username" bind:value={user.username} /> + <input type="hidden" name="username" bind:value={user.username} /> </div> <div class="relative"> <label for="password" class="block font-bold block mb-1">{$t('user.settings.newPassword')}</label> {#if revealPassword} - <input type="text" bind:value={password} /> + <input name="password" type="text" bind:value={password} /> {:else} - <input type="password" bind:value={password} /> + <input name="password" type="password" bind:value={password} /> {/if} <button type="button" diff --git a/src/routes/[username]/settings/_pos.svelte b/src/routes/[username]/settings/_pos.svelte index edf54d91..cf4a5ece 100644 --- a/src/routes/[username]/settings/_pos.svelte +++ b/src/routes/[username]/settings/_pos.svelte @@ -1,26 +1,18 @@ <script> import { Icon, Toggle } from '$comp'; import { t } from '$lib/translations'; - import { success, failure, put } from '$lib/utils'; + import { success, failure } from '$lib/utils'; - const fiats = Object.keys($rates); + export let rates, user; - const updateFiat = async (e) => { - try { - $user.currency = e.target.value; - let r = await put('/' + $user.username, { user: $user }); - success('Local currency updated'); - } catch (e) { - failure(e.message); - } - }; + const fiats = Object.keys(rates); </script> <div> <label for="currency" class="font-bold block mb-1">{$t('user.settings.localCurrency')}</label> - <select name="currency" on:change={updateFiat} class="select-styles block py-3 w-full"> + <select name="currency" class="select-styles block py-3 w-full"> {#each fiats as fiat} - <option value={fiat} selected={$user.currency === fiat}>{fiat}</option> + <option value={fiat} selected={user.currency === fiat}>{fiat}</option> {/each} </select> </div> @@ -28,7 +20,7 @@ <!-- TODO <div> <label for="unit" class="font-bold block mb-1">{$t('user.settings.btcUnit')}</label> - <select disabled name="unit" class="select-styles block py-3 w-full" bind:value={$user.unit}> + <select disabled name="unit" class="select-styles block py-3 w-full" bind:value={user.unit}> <option value="SAT">{$t('user.settings.satoshis')} (SAT)</option> <option value="BTC">{$t('user.settings.bitcoin')} (BTC)</option> </select> diff --git a/src/routes/[username]/settings/_security.svelte b/src/routes/[username]/settings/_security.svelte index 3c0009dc..2a490aa4 100644 --- a/src/routes/[username]/settings/_security.svelte +++ b/src/routes/[username]/settings/_security.svelte @@ -3,8 +3,9 @@ import { t } from '$lib/translations'; import { Icon, Qr } from '$comp'; import { Pincode, PincodeInput } from 'svelte-pincode'; - import { user } from '$lib/store'; - import { put, success, failure } from '$lib/utils'; + import { post, success, failure } from '$lib/utils'; + + export let user; let settingPin, setting2fa, disabling2fa; @@ -30,7 +31,7 @@ let enable2fa = async (twoFa) => { try { if (setting2fa && token.length === 6) { - await put('/enable2fa', { token }); + await post('/enable2fa', { token }); success('2FA enabled'); user.twofa = 1; toggleEnabling(); @@ -44,7 +45,7 @@ let disable2fa = async () => { try { if (disabling2fa && token.length === 6) { - await put('/disable2fa', { token }); + await post('/disable2fa', { token }); success('2FA disabled'); user.twofa = 0; toggleDisabling(); diff --git a/src/routes/enable2fa/+server.js b/src/routes/enable2fa/+server.js index 3120e613..344850da 100644 --- a/src/routes/enable2fa/+server.js +++ b/src/routes/enable2fa/+server.js @@ -1,6 +1,6 @@ import { auth, post } from '$lib/utils'; -export async function PUT({ cookies, request }) { +export async function POST({ cookies, request }) { let body = await request.json(); let res = await post('/2fa', body, auth(cookies)); diff --git a/src/routes/invoice/[id]/+page.svelte b/src/routes/invoice/[id]/+page.svelte index 9e0f9654..9d140bd5 100644 --- a/src/routes/invoice/[id]/+page.svelte +++ b/src/routes/invoice/[id]/+page.svelte @@ -149,15 +149,6 @@ </div> <style> - input[type='number']::-webkit-inner-spin-button, - input[type='number']::-webkit-outer-spin-button { - -webkit-appearance: none; - } - - input[type='number'] { - -moz-appearance: textfield; - } - .full-shadow { box-shadow: inset 0 0 0 1000px rgba(0, 0, 0, 0.25); } diff --git a/src/routes/launch/+page.svelte b/src/routes/launch/+page.svelte index 833e0f08..58a50088 100644 --- a/src/routes/launch/+page.svelte +++ b/src/routes/launch/+page.svelte @@ -5,7 +5,6 @@ let { user } = data; $: link = user ? '/launch/purchase' : '/register'; $redirect = '/launch/purchase'; - console.log('set redirect', $redirect); </script> <div class="flex mt-20 px-8"> diff --git a/src/routes/login/+page.server.js b/src/routes/login/+page.server.js index 28a5d78a..d26d16ed 100644 --- a/src/routes/login/+page.server.js +++ b/src/routes/login/+page.server.js @@ -6,10 +6,10 @@ export const actions = { let user = Object.fromEntries(await request.formData()); try { await login(user, cookies); - throw redirect(303, `/${user.username}/dashboard`); } catch (e) { - console.log('OW'); - return invalid(403, { error: 'Login failed' }); + return invalid(400, { message: 'Login failed' }); } + + throw redirect(303, `/${user.username}/dashboard`); } }; diff --git a/src/routes/logout/+page.server.js b/src/routes/logout/+page.server.js index d51dcfbc..caacbbfd 100644 --- a/src/routes/logout/+page.server.js +++ b/src/routes/logout/+page.server.js @@ -1,5 +1,4 @@ import { redirect } from '@sveltejs/kit'; -import cookie from 'cookie'; const opts = { expires: new Date(0), diff --git a/src/routes/logout/done/+page.svelte b/src/routes/logout/done/+page.svelte index 47d48c54..2553843d 100644 --- a/src/routes/logout/done/+page.svelte +++ b/src/routes/logout/done/+page.svelte @@ -2,7 +2,6 @@ import { onMount } from 'svelte'; import { goto } from '$app/navigation'; import { close } from '$lib/socket'; - onMount(() => { close(); goto('/'); diff --git a/src/routes/send/+page.server.js b/src/routes/send/+page.server.js index d0fefdee..4108bcb5 100644 --- a/src/routes/send/+page.server.js +++ b/src/routes/send/+page.server.js @@ -7,7 +7,6 @@ export const actions = { default: async ({ request }) => { const values = await request.formData(); const t = values.get('text'); - console.log('parsing', t); if (!t) return; // lightning @@ -17,22 +16,18 @@ export const actions = { // bitcoin if (validate(t)) { - console.log('bitcoin'); throw redirect(303, `/send/bitcoin/${t}`); } // ln address if (t.includes('@') && t.includes('.')) { - console.log('ln address'); let [name, domain] = t.split('@'); try { let lnurl = await get(`/encode?domain=${domain}&name=${name}`); - console.log('lnurl', lnurl); } catch (e) {} } // user - console.log('username'); return invalid(403, { error: 'Failed to parse destination' }); } |
