aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2022-11-09 10:53:41 -0800
committerAdam Soltys <[email protected]>2022-11-09 10:53:41 -0800
commit305f26ccefffe52b3fb65995e8caf437f1a92057 (patch)
tree0fd1e422bd8195caccb2837a20d1bd97b94dfa82 /src
parentccc13974d22a47995b5f9f674891a39d54aa0620 (diff)
downloadcoinos-ui-305f26ccefffe52b3fb65995e8caf437f1a92057.tar.gz
coinos-ui-305f26ccefffe52b3fb65995e8caf437f1a92057.zip
settings fixes
Diffstat (limited to 'src')
-rw-r--r--src/lib/socket.js2
-rw-r--r--src/lib/utils.js5
-rw-r--r--src/routes/(app)/[username]/settings/[...tab]/+page.server.js2
-rw-r--r--src/routes/(app)/[username]/settings/[...tab]/+page.svelte164
-rw-r--r--src/routes/(app)/[username]/settings/[...tab]/_account.svelte2
-rw-r--r--src/routes/(app)/[username]/settings/[...tab]/_security.svelte11
-rw-r--r--src/routes/(app)/disable2fa/+server.js13
-rw-r--r--src/routes/(app)/otpsecret/+server.js11
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');
+ }
}