From 702e6ed3516be6dbd82afbffcb3eb4704a3e03b4 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Mon, 17 Apr 2023 23:03:59 -0700 Subject: expire pin after 5 minutes --- src/lib/store.js | 2 +- src/routes/(app)/+layout.svelte | 33 ++++++++++++++++------ .../[username]/settings/[...tab]/+page.svelte | 2 ++ src/routes/(app)/send/+layout.svelte | 3 -- 4 files changed, 27 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/lib/store.js b/src/lib/store.js index ce984b17..4e88c90c 100644 --- a/src/lib/store.js +++ b/src/lib/store.js @@ -46,7 +46,7 @@ export const newPayment = persistLocal('newPayment'); export const password = persistLocal('password'); export const passwordPrompt = writable(); export const payments = persistLocal('transactions', []); -export const pin = persistSession('pin', undefined); +export const pin = writable(); export const rate = writable(); export const request = writable(); export const requestRedirect = writable(); diff --git a/src/routes/(app)/+layout.svelte b/src/routes/(app)/+layout.svelte index 33e953ee..891de9ac 100644 --- a/src/routes/(app)/+layout.svelte +++ b/src/routes/(app)/+layout.svelte @@ -2,7 +2,7 @@ import { SvelteToast } from '@zerodevx/svelte-toast'; import { onDestroy, onMount } from 'svelte'; import { close, connect, send } from '$lib/socket'; - import { last, invoice, request, passwordPrompt } from '$lib/store'; + import { last, invoice, request, passwordPrompt, pin } from '$lib/store'; import { page } from '$app/stores'; import { browser } from '$app/environment'; import { goto } from '$app/navigation'; @@ -16,10 +16,10 @@ let { rate, user, subject, token, rates } = data; - $: update(data); - let update = (data) => { - ({ rate, user, subject, token, rates } = data); - } + $: update(data); + let update = (data) => { + ({ rate, user, subject, token, rates } = data); + }; onMount(() => { let localStorageLocale = localStorage.getItem(localeLocalStorageKey); @@ -29,13 +29,17 @@ if (lng) localStorage.setItem(localeLocalStorageKey, lng); }); - browser && checkSocket(); + if (browser) { + checkSocket(); + expirePin(); + } }); $: browser && connect(token); let lost, - timer, + checkTimer, + expireTimer, counter = 0; let checkSocket = () => { @@ -46,10 +50,21 @@ send('heartbeat', token); counter = 0; } - timer = setTimeout(checkSocket, 1000); + + checkTimer = setTimeout(checkSocket, 1000); }; - onDestroy(() => browser && clearTimeout(timer)); + let expirePin = () => { + $pin = null; + expireTimer = setTimeout(expirePin, 300000); + }; + + onDestroy(() => { + if (browser) { + clearTimeout(checkTimer); + clearTimeout(expireTimer); + } + }); {#if browser && $passwordPrompt} diff --git a/src/routes/(app)/[username]/settings/[...tab]/+page.svelte b/src/routes/(app)/[username]/settings/[...tab]/+page.svelte index 1b212abe..2bd465a7 100644 --- a/src/routes/(app)/[username]/settings/[...tab]/+page.svelte +++ b/src/routes/(app)/[username]/settings/[...tab]/+page.svelte @@ -33,6 +33,8 @@ $: form?.success && success('Settings saved!'); + $: form?.message && fail(form.message); + $: if (form?.message?.startsWith('Pin')) { fail('Wrong pin, try again'); $pin = ''; diff --git a/src/routes/(app)/send/+layout.svelte b/src/routes/(app)/send/+layout.svelte index 6192cd40..47c11f1c 100644 --- a/src/routes/(app)/send/+layout.svelte +++ b/src/routes/(app)/send/+layout.svelte @@ -1,10 +1,7 @@