diff options
| author | Adam Soltys <[email protected]> | 2022-11-09 10:53:41 -0800 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2022-11-09 10:53:41 -0800 |
| commit | 305f26ccefffe52b3fb65995e8caf437f1a92057 (patch) | |
| tree | 0fd1e422bd8195caccb2837a20d1bd97b94dfa82 /src | |
| parent | ccc13974d22a47995b5f9f674891a39d54aa0620 (diff) | |
| download | coinos-ui-305f26ccefffe52b3fb65995e8caf437f1a92057.tar.gz coinos-ui-305f26ccefffe52b3fb65995e8caf437f1a92057.zip | |
settings fixes
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/socket.js | 2 | ||||
| -rw-r--r-- | src/lib/utils.js | 5 | ||||
| -rw-r--r-- | src/routes/(app)/[username]/settings/[...tab]/+page.server.js | 2 | ||||
| -rw-r--r-- | src/routes/(app)/[username]/settings/[...tab]/+page.svelte | 164 | ||||
| -rw-r--r-- | src/routes/(app)/[username]/settings/[...tab]/_account.svelte | 2 | ||||
| -rw-r--r-- | src/routes/(app)/[username]/settings/[...tab]/_security.svelte | 11 | ||||
| -rw-r--r-- | src/routes/(app)/disable2fa/+server.js | 13 | ||||
| -rw-r--r-- | src/routes/(app)/otpsecret/+server.js | 11 |
8 files changed, 114 insertions, 96 deletions
diff --git a/src/lib/socket.js b/src/lib/socket.js index 9b4a8dce..8d84073c 100644 --- a/src/lib/socket.js +++ b/src/lib/socket.js @@ -36,7 +36,7 @@ export const messages = (data) => ({ async payment() { let { amount, invoice } = data; - if (invoice) invalidate("app:invoice"); + if (invoice) invalidate('app:invoice'); if (get(user)?.account_id !== data.account_id) return; let payments = get(txns); diff --git a/src/lib/utils.js b/src/lib/utils.js index 7e0b8e4f..c3960487 100644 --- a/src/lib/utils.js +++ b/src/lib/utils.js @@ -37,7 +37,10 @@ export const get = (url, headers = {}) => export const post = (url, body, headers) => { headers = { ...headers, 'content-type': 'application/json', accept: 'application/json' }; return fetch(base + url, { method: 'POST', body: JSON.stringify(body), headers }) - .then((r) => r.text()) + .then(async (r) => { + if (r.ok) return r.text(); + throw new Error(await r.text()); + }) .then((body) => { try { body = JSON.parse(body); diff --git a/src/routes/(app)/[username]/settings/[...tab]/+page.server.js b/src/routes/(app)/[username]/settings/[...tab]/+page.server.js index a6fbd9bf..dcaa26b4 100644 --- a/src/routes/(app)/[username]/settings/[...tab]/+page.server.js +++ b/src/routes/(app)/[username]/settings/[...tab]/+page.server.js @@ -16,7 +16,7 @@ export const actions = { }; try { - await post(`/user`, user, auth(cookies)); + ({ user } = await post(`/user`, user, auth(cookies))); } catch (e) { return invalid(400, { message: e.message }); } diff --git a/src/routes/(app)/[username]/settings/[...tab]/+page.svelte b/src/routes/(app)/[username]/settings/[...tab]/+page.svelte index 20e1fd8f..d546e817 100644 --- a/src/routes/(app)/[username]/settings/[...tab]/+page.svelte +++ b/src/routes/(app)/[username]/settings/[...tab]/+page.svelte @@ -1,109 +1,109 @@ <script> - import { onMount } from 'svelte'; - import { fly } from 'svelte/transition'; - import { enhance } from '$app/forms'; + import { onMount } from 'svelte'; + import { fly } from 'svelte/transition'; + import { enhance } from '$app/forms'; - import { Icon, Spinner, Pin } from '$comp'; - import { t } from '$lib/translations'; - import { failure, success } from '$lib/utils'; - import { avatarUpload, bannerUpload, pin } from '$lib/store'; - import { upload } from '$lib/upload'; - import { page } from '$app/stores'; + import { Icon, Spinner, Pin } from '$comp'; + import { t } from '$lib/translations'; + import { failure, success } from '$lib/utils'; + import { avatarUpload, bannerUpload, pin } from '$lib/store'; + import { upload } from '$lib/upload'; + import { page } from '$app/stores'; - import Account from './_account.svelte'; - import Pos from './_pos.svelte'; - import Security from './_security.svelte'; + import Account from './_account.svelte'; + import Pos from './_pos.svelte'; + import Security from './_security.svelte'; - export let data; - export let form; + export let data; + export let form; - let submit; + let submit; - let { user, token, tab } = data; - console.log("TAB", tab) + let { user, token, tab } = data; - $: update(data); - let update = () => ({ user, token } = data); + $: update(data); + let update = () => ({ user, token, tab } = data); - $: form?.user && ({ user } = form); + $: form?.user && ({ user } = form); - // $: if (form?.message?.startsWith('Pin')) { - // failure('Wrong pin, try again'); - // $pin = ''; - // } + $: form?.success && success('Settings saved!'); - let tabs = [ - { name: 'account', key: 'ACCOUNT', comp: Account }, - { name: 'pos', key: 'POINT_OF_SALE', comp: Pos }, - { name: 'security', key: 'SECURITY', comp: Security } - ]; + // $: if (form?.message?.startsWith('Pin')) { + // failure('Wrong pin, try again'); + // $pin = ''; + // } - $: ({ comp } = tabs.find((t) => t.name === tab)); + let tabs = [ + { name: 'account', key: 'ACCOUNT', comp: Account }, + { name: 'pos', key: 'POINT_OF_SALE', comp: Pos }, + { name: 'security', key: 'SECURITY', comp: Security } + ]; - let loading; - let save = async (msg) => { - loading = true; + $: ({ comp } = tabs.find((t) => t.name === tab)); - try { - if ($avatarUpload) { - await upload($avatarUpload.file, $avatarUpload.type, $avatarUpload.progress, token); - } + let loading; + let save = async (msg) => { + loading = true; - if ($bannerUpload) { - await upload($bannerUpload.file, $bannerUpload.type, $bannerUpload.progress, token); - } - } catch (e) { - console.log(e); - failure('Something went wrong'); - } + try { + if ($avatarUpload) { + await upload($avatarUpload.file, $avatarUpload.type, $avatarUpload.progress, token); + } - loading = false; - }; + if ($bannerUpload) { + await upload($bannerUpload.file, $bannerUpload.type, $bannerUpload.progress, token); + } + } catch (e) { + console.log(e); + failure('Something went wrong'); + } - let loaded; - onMount(() => setTimeout(() => (loaded = true), 50)); + loading = false; + }; + + let loaded; + onMount(() => setTimeout(() => (loaded = true), 50)); </script> {#if loaded && user.haspin && $pin?.length !== 6} - <Pin /> + <Pin /> {/if} <form method="POST" class="mb-[154px]" use:enhance on:submit={save}> - <input type="hidden" name="pin" value={$pin} /> + <input type="hidden" name="pin" value={$pin} /> - <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')} - </h1> + <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')} + </h1> - <div class="font-bold flex justify-between items-center border-b pb-3 text-secondary"> - {#each tabs as { name, key }} - <a href={`/${user.username}/settings/${name}`}> - <button class="hover:opacity-80" class:text-black={tab === name} - >{$t(`user.settings.${key}`)}</button - > - </a> - {/each} - </div> + <div class="font-bold flex justify-between items-center border-b pb-3 text-secondary"> + {#each tabs as { name, key }} + <a href={`/${user.username}/settings/${name}`}> + <button class="hover:opacity-80" class:text-black={tab === name} + >{$t(`user.settings.${key}`)}</button + > + </a> + {/each} + </div> - <svelte:component this={comp} {user} {submit} /> - </div> + <svelte:component this={comp} {user} {submit} /> + </div> - <div - class="z-10 fixed bottom-0 bg-white shadow border-t w-full flex justify-center items-center py-3" - > - <button - bind:this={submit} - type="submit" - class="border-2 border-black rounded-xl font-semibold mx-auto py-3 w-40 hover:opacity-80" - class:bg-black={loading} - > - {#if loading} - <Spinner /> - {:else} - <div class="my-auto">Save Settings</div> - {/if} - </button> - </div> + <div + class="z-10 fixed bottom-0 bg-white shadow border-t w-full flex justify-center items-center py-3" + > + <button + bind:this={submit} + type="submit" + class="border-2 border-black rounded-xl font-semibold mx-auto py-3 w-40 hover:opacity-80" + class:bg-black={loading} + > + {#if loading} + <Spinner /> + {:else} + <div class="my-auto">Save Settings</div> + {/if} + </button> + </div> </form> - diff --git a/src/routes/(app)/[username]/settings/[...tab]/_account.svelte b/src/routes/(app)/[username]/settings/[...tab]/_account.svelte index 5d5f731f..e49205ca 100644 --- a/src/routes/(app)/[username]/settings/[...tab]/_account.svelte +++ b/src/routes/(app)/[username]/settings/[...tab]/_account.svelte @@ -5,7 +5,7 @@ import { t } from '$lib/translations'; import { upload } from '$lib/upload'; - export let user; + export let user; let selectedTheme = 1; let revealPassword = false; diff --git a/src/routes/(app)/[username]/settings/[...tab]/_security.svelte b/src/routes/(app)/[username]/settings/[...tab]/_security.svelte index 0f45966d..0ffb7834 100644 --- a/src/routes/(app)/[username]/settings/[...tab]/_security.svelte +++ b/src/routes/(app)/[username]/settings/[...tab]/_security.svelte @@ -8,7 +8,7 @@ import { invalidate } from '$app/navigation'; import { page } from '$app/stores'; - export let user, submit; + export let user, submit; let settingPin, setting2fa, disabling2fa; let token = ''; @@ -27,7 +27,11 @@ let otp; $: pinChange($current); let pinChange = async (pin) => { - // otp = await post('/otpsecret', { pin }); + try { + otp = await post('/otpsecret', { pin }); + } catch (e) { + console.log(e); + } }; let locked; @@ -78,7 +82,7 @@ pin = null; submit.click(); } catch (e) { - console.log(e) + console.log(e); failure('Failed to disable pin'); } } else { @@ -113,6 +117,7 @@ toggleDisabling(); } } catch (e) { + console.log(e); failure('Failed to disable 2FA, try again'); } }; diff --git a/src/routes/(app)/disable2fa/+server.js b/src/routes/(app)/disable2fa/+server.js index 237da445..13fcb2b9 100644 --- a/src/routes/(app)/disable2fa/+server.js +++ b/src/routes/(app)/disable2fa/+server.js @@ -1,8 +1,13 @@ +import { error } from '@sveltejs/kit'; import { auth, post } from '$lib/utils'; -export async function PUT({ cookies, request }) { - let body = await request.json(); - let res = await post('/disable2fa', body, auth(cookies)); +export async function POST({ cookies, request }) { + try { + let body = await request.json(); + let res = await post('/disable2fa', body, auth(cookies)); - return new Response(JSON.stringify(res)); + return new Response(JSON.stringify(res)); + } catch (e) { + throw error(500, 'Problem disabling 2fa'); + } } diff --git a/src/routes/(app)/otpsecret/+server.js b/src/routes/(app)/otpsecret/+server.js index 8dec7778..cdd050c8 100644 --- a/src/routes/(app)/otpsecret/+server.js +++ b/src/routes/(app)/otpsecret/+server.js @@ -1,8 +1,13 @@ import { auth, post } from '$lib/utils'; import Qr from 'qrcode-base64'; +import { error } from '@sveltejs/kit'; export async function POST({ cookies, locals, request }) { - let { secret } = await post('/otpsecret', await request.json(), auth(cookies)); - let uri = `otpauth://totp/coinos:${locals.user.username}?secret=${secret}&period=30&digits=6&algorithm=SHA1&issuer=coinos`; - return new Response(JSON.stringify({ secret, uri, qr: Qr.drawImg(uri, { size: 600 }) })); + try { + let { secret } = await post('/otpsecret', await request.json(), auth(cookies)); + let uri = `otpauth://totp/coinos:${locals.user.username}?secret=${secret}&period=30&digits=6&algorithm=SHA1&issuer=coinos`; + return new Response(JSON.stringify({ secret, uri, qr: Qr.drawImg(uri, { size: 600 }) })); + } catch (e) { + throw new error(500, 'Problem saving secret'); + } } |
