From 1bafec112dbec4951f8260821abfc77f41395e22 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Tue, 30 Aug 2022 10:36:42 -0700 Subject: save account settings --- src/routes/+layout.server.js | 23 ++++++---- src/routes/[username]/settings/+page.svelte | 57 ++++++++++++++++--------- src/routes/[username]/settings/_account.svelte | 26 +++++++++-- src/routes/[username]/settings/_security.svelte | 4 +- src/routes/logout/done/+page.svelte | 2 +- src/routes/user/+server.js | 26 +++++++++++ 6 files changed, 101 insertions(+), 37 deletions(-) create mode 100644 src/routes/user/+server.js diff --git a/src/routes/+layout.server.js b/src/routes/+layout.server.js index fbd53cd0..9edc43e1 100644 --- a/src/routes/+layout.server.js +++ b/src/routes/+layout.server.js @@ -1,4 +1,4 @@ -import { error } from '@sveltejs/kit'; +import { error, redirect } from '@sveltejs/kit'; import cookie from 'cookie'; import { protectedRoutes } from '$lib/utils'; import { get, post, auth } from '$lib/utils'; @@ -11,18 +11,23 @@ export async function load({ request, setHeaders, url, params }) { let rates; if (token) { - user = await get('/me', { accept: 'application/json', authorization: `Bearer ${token}` }); + try { + user = await get('/me', { accept: 'application/json', authorization: `Bearer ${token}` }); + } catch (e) { + throw redirect(301, '/logout'); + } + if (protectedRoutes.find((p) => url.pathname.match(p))) { if (user.username !== params.username) throw error(404, 'user not found'); } - let account = user.accounts.find((a) => a.asset === btc && !a.pubkey); - if (account) { - let { id } = account; - if (user.account_id !== id) { - user = await post("/shiftAccount", { id }, auth(request)); - } - } + let account = user.accounts.find((a) => a.asset === btc && !a.pubkey); + if (account) { + let { id } = account; + if (user.account_id !== id) { + user = await post('/shiftAccount', { id }, auth(request)); + } + } } rates = await get('/rates'); diff --git a/src/routes/[username]/settings/+page.svelte b/src/routes/[username]/settings/+page.svelte index 1d162ef2..c6d7d3c0 100644 --- a/src/routes/[username]/settings/+page.svelte +++ b/src/routes/[username]/settings/+page.svelte @@ -5,6 +5,8 @@ import { AppHeader, Icon } from '$comp'; import { t } from '$lib/translations'; + import { failure, success, put } from '$lib/utils'; + import { user } from '$lib/store'; let tab = 'account'; @@ -15,29 +17,42 @@ ]; $: ({ comp } = tabs.find((t) => t.name === tab)); + + let save = async () => { + try { + await put('/user', $user); + success('Settings saved'); + } catch (e) { + failure('Something went wrong'); + } + }; -
-

- {$t('user.settings.header')} -

- -
- {#each tabs as { name, key }} - - {/each} +
+
+

+ {$t('user.settings.header')} +

+ +
+ {#each tabs as { name, key }} + + {/each} +
+ +
- - -
- -
- -
+
+ +
+ diff --git a/src/routes/[username]/settings/_account.svelte b/src/routes/[username]/settings/_account.svelte index 2ce78554..68af0841 100644 --- a/src/routes/[username]/settings/_account.svelte +++ b/src/routes/[username]/settings/_account.svelte @@ -3,9 +3,9 @@ import { Icon, Toggle, LocaleSelector } from '$comp'; import { t } from '$lib/translations'; - let password; let selectedTheme = 1; let revealPassword = false; + let password; const colorThemes = [ { theme: 1, color1: 'from-[#F5F7FA]', color2: 'to-[#C3CFE2]' }, @@ -15,6 +15,13 @@ { theme: 5, color1: 'from-[#F3E7E9]', color2: 'to-[#E3EEFF]' }, { theme: 6, color1: 'from-[#F5F7FA]', color2: 'via-[#EAF2FF] to-[#DEDFFF]' } ]; + + const handleThemeClick = (colors) => { + selectedTheme = colors.theme; + $colorTheme = colors.color1 + ' ' + colors.color2; + }; + + $: $user.password = $user.confirm = password;
@@ -24,7 +31,12 @@
- +
@@ -32,7 +44,7 @@
@@ -55,7 +67,12 @@
- +
@@ -83,6 +100,7 @@

{$t('user.settings.themeDescription')}

{#each colorThemes as colors}
@@ -32,7 +32,7 @@

{$t('user.settings.twofaDescription')}

-
diff --git a/src/routes/logout/done/+page.svelte b/src/routes/logout/done/+page.svelte index fe526357..2c7ee6e8 100644 --- a/src/routes/logout/done/+page.svelte +++ b/src/routes/logout/done/+page.svelte @@ -8,6 +8,6 @@ $token = null; $user = null; close(); + goto('/'); }); - goto('/'); diff --git a/src/routes/user/+server.js b/src/routes/user/+server.js new file mode 100644 index 00000000..f7c6d165 --- /dev/null +++ b/src/routes/user/+server.js @@ -0,0 +1,26 @@ +import { auth, post } from "$lib/utils"; +import cookie from 'cookie'; + +export async function PUT({ request, setHeaders }) { + console.log(setHeaders) + let user = await request.json(); + let res = await post('/user', user, auth(request)); + + let maxAge = 30 * 24 * 60 * 60; + + let expires = new Date(); + expires.setSeconds(expires.getSeconds() + maxAge); + + setHeaders({ + 'content-type': 'application/json', + 'set-cookie': cookie.serialize('token', res.token, { + httpOnly: true, + maxAge, + sameSite: 'lax', + path: '/', + expires + }) + }); + + return new Response(JSON.stringify(res)); +} -- cgit v1.2.3