diff options
| author | Adam Soltys <[email protected]> | 2023-11-30 12:57:57 -0800 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2023-11-30 12:57:57 -0800 |
| commit | 4972b423fe4f88bcef1b790b2287e2db3517b529 (patch) | |
| tree | 1d92aa9d9c6b320c784900fcd823d76658453f4a /src | |
| parent | ad4b96fadd7a40bb9023450d2e2af22beebba830 (diff) | |
| download | coinos-ui-4972b423fe4f88bcef1b790b2287e2db3517b529.tar.gz coinos-ui-4972b423fe4f88bcef1b790b2287e2db3517b529.zip | |
pin fixes
Diffstat (limited to 'src')
| -rw-r--r-- | src/components/AppHeader.svelte | 2 | ||||
| -rw-r--r-- | src/lib/store.js | 6 | ||||
| -rw-r--r-- | src/locales/en.json | 9 | ||||
| -rw-r--r-- | src/routes/(app)/+layout.svelte | 4 | ||||
| -rw-r--r-- | src/routes/(app)/[username]/+layout.server.js | 1 | ||||
| -rw-r--r-- | src/routes/(app)/[username]/settings/[...tab]/+page.svelte | 43 | ||||
| -rw-r--r-- | src/routes/(app)/[username]/settings/[...tab]/_pos.svelte | 11 | ||||
| -rw-r--r-- | src/routes/(app)/[username]/settings/[...tab]/_security.svelte | 31 |
8 files changed, 65 insertions, 42 deletions
diff --git a/src/components/AppHeader.svelte b/src/components/AppHeader.svelte index 123606e1..ae162e1f 100644 --- a/src/components/AppHeader.svelte +++ b/src/components/AppHeader.svelte @@ -13,7 +13,7 @@ let update = (data) => ({ subject, user } = data); let menuButtons; - if (user) + $: if (user) menuButtons = [ { key: 'nav.settings', icon: 'settings', href: `/${user.username}/settings` }, { key: 'nav.support', icon: 'support', href: `/support` }, diff --git a/src/lib/store.js b/src/lib/store.js index 3d8e687d..403ee816 100644 --- a/src/lib/store.js +++ b/src/lib/store.js @@ -8,7 +8,9 @@ const persistSession = (key, defaultValue) => { : defaultValue ); - s.subscribe((v) => browser && sessionStorage.setItem(key, JSON.stringify(v))); + s.subscribe((v) => { + browser && sessionStorage.setItem(key, JSON.stringify(v)); + }); return s; }; @@ -45,7 +47,7 @@ export const decrypted = persistLocal('decrypted', {}); export const newPayment = persistLocal('newPayment'); export const password = writable(); export const passwordPrompt = writable(); -export const pin = writable(); +export const pin = persistSession('pin'); export const rate = writable(); export const request = writable(); export const requestRedirect = writable(); diff --git a/src/locales/en.json b/src/locales/en.json index 608668a9..c0efade3 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -240,8 +240,8 @@ "securityPIN": "Security PIN", "securityPINDescription": "Set a security pin that will be used to unlock your settings and to send outgoing payments.", "setPIN": "Set PIN", - "autoLock": "Auto-Lock Timer", - "autoLockDescription": "Your account will go into a secure mode, requiring you to re-enter your credentials after a specified time:", + "autoLock": "Timeout", + "autoLockDescription": "Time after which your PIN needs to be re-entered:", "twofa": "2-Factor Authentication", "twofaDescription": "Add an extra level of security to your device by enabling 2-factor authentication.", "twofaSetup": "Set up 2FA", @@ -249,7 +249,10 @@ "select": "Select", "verifyPIN": "Verify PIN", "enablePIN": "Enable PIN", - "disablePIN": "Disable PIN" + "disablePIN": "Disable PIN", + "publishNip5": "Publish nostr identity", + "nip5a": "Use", + "nip5b": "as your publicly verified nostr address" }, "support": { "header": "Support", diff --git a/src/routes/(app)/+layout.svelte b/src/routes/(app)/+layout.svelte index 012dd957..7f4e3c7b 100644 --- a/src/routes/(app)/+layout.svelte +++ b/src/routes/(app)/+layout.svelte @@ -32,7 +32,7 @@ if (browser) { let log = console.log; checkSocket(); - expirePin(); + expireTimer = setTimeout(expirePin, user.locktime * 1000 || 300000); // if (window.NDEFReader) { // try { @@ -74,7 +74,7 @@ let expirePin = () => { $pin = null; - expireTimer = setTimeout(expirePin, 300000); + expireTimer = setTimeout(expirePin, user.locktime * 1000 || 300000); }; onDestroy(() => { diff --git a/src/routes/(app)/[username]/+layout.server.js b/src/routes/(app)/[username]/+layout.server.js index 27502386..8df75f0f 100644 --- a/src/routes/(app)/[username]/+layout.server.js +++ b/src/routes/(app)/[username]/+layout.server.js @@ -8,7 +8,6 @@ export let load = async ({ depends, params: { username } }) => { let subject = await get(`/users/${username}`); return { subject }; } catch (e) { - console.log(e); throw error(500, 'Unable to retrieve user account data'); } }; diff --git a/src/routes/(app)/[username]/settings/[...tab]/+page.svelte b/src/routes/(app)/[username]/settings/[...tab]/+page.svelte index 087c9450..a3afce62 100644 --- a/src/routes/(app)/[username]/settings/[...tab]/+page.svelte +++ b/src/routes/(app)/[username]/settings/[...tab]/+page.svelte @@ -1,5 +1,6 @@ <script> - import { onMount } from 'svelte'; + import { browser } from '$app/environment'; + import { onMount, tick } from 'svelte'; import { fly } from 'svelte/transition'; import { applyAction, deserialize } from '$app/forms'; @@ -26,9 +27,13 @@ let formElement; let { user, token, rates, tab } = data; + let prev; $: update(data); - let update = () => ({ user, token, rates, tab } = data); + let update = () => { + ({ user, token, rates, tab } = data); + prev = { ...user }; + }; $: form?.user && ({ user } = form); @@ -95,23 +100,25 @@ } } - let event = { - pubkey: user.pubkey, - created_at: Math.floor(Date.now() / 1000), - kind: 0, - content: JSON.stringify({ - name: user.username, - about: user.address, - picture: `${PUBLIC_COINOS_URL}/public/${user.profile}.webp` - }), - tags: [] - }; + if (['username', 'address', 'profile'].some((a) => user[a] !== prev[a])) { + let event = { + pubkey: user.pubkey, + created_at: Math.floor(Date.now() / 1000), + kind: 0, + content: JSON.stringify({ + name: user.username, + about: user.address, + picture: `${PUBLIC_COINOS_URL}/public/${user.profile}.webp` + }), + tags: [] + }; - try { - await sign({ event, user }); - await send(event); - } catch (e) { - warning('nostr profile could not be updated'); + try { + await sign({ event, user }); + await send(event); + } catch (e) { + warning('nostr profile could not be updated'); + } } const response = await fetch(formElement.action, { diff --git a/src/routes/(app)/[username]/settings/[...tab]/_pos.svelte b/src/routes/(app)/[username]/settings/[...tab]/_pos.svelte index cdcec8ce..a5431d6a 100644 --- a/src/routes/(app)/[username]/settings/[...tab]/_pos.svelte +++ b/src/routes/(app)/[username]/settings/[...tab]/_pos.svelte @@ -30,7 +30,6 @@ <input type="text" name="email" bind:value={user.email} /> </div> - <div> <div class="flex justify-between items-center"> <span class="font-bold">{$t('user.settings.tipPrompt')}</span> @@ -41,6 +40,16 @@ </p> </div> +<div> + <div class="flex justify-between items-center"> + <span class="font-bold">{$t('user.settings.publishNip5')}</span> + <Toggle id="nip5" bind:value={user.nip5} /> + </div> + <p class="text-secondary mt-1 w-9/12"> + {$t('user.settings.nip5a')} <span class="font-bold">{user.username}@{$page.url.host}</span> {$t('user.settings.nip5b')} + </p> +</div> + <a href="./shopify"> <button class="flex rounded-full border py-2 px-4 font-bold hover:opacity-80 w-full gap-2 my-5 justify-center" diff --git a/src/routes/(app)/[username]/settings/[...tab]/_security.svelte b/src/routes/(app)/[username]/settings/[...tab]/_security.svelte index 113f7d7e..3cd0480e 100644 --- a/src/routes/(app)/[username]/settings/[...tab]/_security.svelte +++ b/src/routes/(app)/[username]/settings/[...tab]/_security.svelte @@ -92,6 +92,7 @@ } } else { settingPin = true; + disablingPin = false; } }; @@ -187,6 +188,22 @@ {/if} </div> +{#if user.haspin} + <div> + <label for="locktime" class="font-bold mb-1">{$t('user.settings.autoLock')}</label> + <p class="text-secondary mb-1"> + {$t('user.settings.autoLockDescription')} + </p> + <select name="locktime" class="select-styles block py-3 w-full" value={parseInt(user.locktime)}> + <option value={5 * 60}>5 {$t('user.settings.minutes')}</option> + <option value={10 * 60}>10 {$t('user.settings.minutes')}</option> + <option value={30 * 60}>30 {$t('user.settings.minutes')}</option> + <option value={60 * 60}>1 {$t('user.settings.hour')}</option> + <option value={8 * 60 * 60}>8 {$t('user.settings.hours')}</option> + </select> + </div> +{/if} + <div> <span class="font-bold mb-1">{$t('user.settings.twofa')}</span> <p class="text-secondary mb-4"> @@ -225,20 +242,6 @@ </div> <div> - <label for="locktime" class="font-bold mb-1">{$t('user.settings.autoLock')}</label> - <p class="text-secondary mb-1"> - {$t('user.settings.autoLockDescription')} - </p> - <select name="locktime" class="select-styles block py-3 w-full" value={parseInt(user.locktime)}> - <option value={5 * 60}>5 {$t('user.settings.minutes')}</option> - <option value={10 * 60}>10 {$t('user.settings.minutes')}</option> - <option value={30 * 60}>30 {$t('user.settings.minutes')}</option> - <option value={60 * 60}>1 {$t('user.settings.hour')}</option> - <option value={8 * 60 * 60}>8 {$t('user.settings.hours')}</option> - </select> -</div> - -<div> <label for="seedphrase" class="font-bold">{$t('user.settings.seedPhrase')}</label> <p class="text-secondary mb-1"> |
