aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2023-11-30 12:57:57 -0800
committerAdam Soltys <[email protected]>2023-11-30 12:57:57 -0800
commit4972b423fe4f88bcef1b790b2287e2db3517b529 (patch)
tree1d92aa9d9c6b320c784900fcd823d76658453f4a /src
parentad4b96fadd7a40bb9023450d2e2af22beebba830 (diff)
downloadcoinos-ui-4972b423fe4f88bcef1b790b2287e2db3517b529.tar.gz
coinos-ui-4972b423fe4f88bcef1b790b2287e2db3517b529.zip
pin fixes
Diffstat (limited to 'src')
-rw-r--r--src/components/AppHeader.svelte2
-rw-r--r--src/lib/store.js6
-rw-r--r--src/locales/en.json9
-rw-r--r--src/routes/(app)/+layout.svelte4
-rw-r--r--src/routes/(app)/[username]/+layout.server.js1
-rw-r--r--src/routes/(app)/[username]/settings/[...tab]/+page.svelte43
-rw-r--r--src/routes/(app)/[username]/settings/[...tab]/_pos.svelte11
-rw-r--r--src/routes/(app)/[username]/settings/[...tab]/_security.svelte31
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">