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 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');