diff --git a/src/App.svelte b/src/App.svelte index 0f32a99..f0d2db5 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -1,11 +1,13 @@ diff --git a/src/lib/routing.js b/src/lib/routing.js index 181b87f..bf42533 100644 --- a/src/lib/routing.js +++ b/src/lib/routing.js @@ -3,6 +3,7 @@ import { writable, get } from 'svelte/store'; export let views = writable(); export let currentView = writable(); +export let previousView = writable(); export function navigate(viewName) { let v = get(views)[`./views/${viewName}.svelte`].default; diff --git a/src/lib/state.js b/src/lib/state.js index c88725b..fd9f24a 100644 --- a/src/lib/state.js +++ b/src/lib/state.js @@ -1,9 +1,31 @@ -import { writable } from 'svelte/store'; +import { writable, get } from 'svelte/store'; import queue from './queue.js'; +import { navigate, currentView, previousView } from './routing.js'; + export let appState = writable({ currentRequest: null, pendingRequests: queue(), credentialStatus: 'locked', }); + +export async function acceptRequest() { + let req = await get(appState).pendingRequests.get(); + appState.update($appState => { + $appState.currentRequest = req; + return $appState; + }); + previousView.set(get(currentView)); + navigate('Approve'); +} + +export function completeRequest() { + appState.update($appState => { + $appState.currentRequest = null; + return $appState; + }); + currentView.set(get(previousView)); + previousView.set(null); + acceptRequest(); +} diff --git a/src/views/Approve.svelte b/src/views/Approve.svelte index 3cbbccf..28724e1 100644 --- a/src/views/Approve.svelte +++ b/src/views/Approve.svelte @@ -8,9 +8,10 @@ async function approve() { + $appState.currentRequest.approval = 'Approved'; let status = await invoke('get_session_status'); if (status === 'unlocked') { - navigate('ShowApproved'); + navigate('ShowResponse'); } else if (status === 'locked') { navigate('Unlock'); @@ -20,9 +21,15 @@ } } - var appName = null; + function deny() { + $appState.currentRequest.approval = 'Denied'; + navigate('ShowResponse'); + } + + let appName = null; if ($appState.currentRequest.clients.length === 1) { let path = $appState.currentRequest.clients[0].exe; + // grab the filename from the path let m = path.match(/\/([^/]+?$)|\\([^\\]+?$)/); appName = m[1] || m[2]; } @@ -40,7 +47,7 @@
- + - - - -
-{:else} -
- - - - -
Denied!
-
-{/if} \ No newline at end of file diff --git a/src/views/ShowApproved.svelte b/src/views/ShowResponse.svelte similarity index 56% rename from src/views/ShowApproved.svelte rename to src/views/ShowResponse.svelte index 1c46b27..8aff33b 100644 --- a/src/views/ShowApproved.svelte +++ b/src/views/ShowResponse.svelte @@ -3,10 +3,8 @@ import { draw, fade } from 'svelte/transition'; import { invoke } from '@tauri-apps/api/tauri'; - import { appState } from '../lib/state.js'; - import { navigate } from '../lib/routing.js'; + import { appState, completeRequest } from '../lib/state.js'; import ErrorAlert from '../ui/ErrorAlert.svelte'; - import Icon from '../ui/Icon.svelte'; import Link from '../ui/Link.svelte'; let success = false; @@ -17,19 +15,17 @@ let fadeDelay = drawDuration * 0.4; async function respond() { - let response = { + let packet = { id: $appState.currentRequest.id, - approval: 'Approved', + approval: $appState.currentRequest.approval, }; try { - await invoke('respond', {response}); + await invoke('respond', {response: packet}); success = true; - $appState.currentRequest = null; - window.setTimeout( - () => navigate('Home'), - // Extra 50ms so the window can finish disappearing before the screen changes + completeRequest, + // Extra 50ms so the window can finish disappearing before the redraw Math.min(5000, $appState.config.rehide_ms + 50), ); } @@ -55,21 +51,18 @@ {:else if success}
- - - + {#if $appState.currentRequest.approval === 'Approved'} + + + + {:else} + + + + {/if} - -
Approved!
+
+ {$appState.currentRequest.approval}! +
{/if} - - - - \ No newline at end of file diff --git a/src/views/Unlock.svelte b/src/views/Unlock.svelte index 271c72b..72bf646 100644 --- a/src/views/Unlock.svelte +++ b/src/views/Unlock.svelte @@ -24,7 +24,7 @@ let r = await invoke('unlock', {passphrase}); $appState.credentialStatus = 'unlocked'; if ($appState.currentRequest) { - navigate('ShowApproved'); + navigate('ShowResponse'); } else { navigate('Home');