From 5ad05e28a99b6d41046032d13c0dd09d8126157f Mon Sep 17 00:00:00 2001 From: Joseph Montanaro Date: Wed, 21 Dec 2022 13:42:12 -0800 Subject: [PATCH] display client info and unlock errors to user --- src-tauri/src/clientinfo.rs | 2 +- src-tauri/src/errors.rs | 5 +---- src-tauri/src/main.rs | 9 +++++++-- src-tauri/src/state.rs | 3 +++ src/views/Approve.svelte | 29 +++++++++++++++++++---------- src/views/ShowApproved.svelte | 31 ++++++++++++++++++++++--------- src/views/Unlock.svelte | 6 +++++- 7 files changed, 58 insertions(+), 27 deletions(-) diff --git a/src-tauri/src/clientinfo.rs b/src-tauri/src/clientinfo.rs index d164105..7fdf44f 100644 --- a/src-tauri/src/clientinfo.rs +++ b/src-tauri/src/clientinfo.rs @@ -26,7 +26,7 @@ fn get_associated_pids(local_port: u16) -> Result, netstat2::error::Err }; if proto_info.local_port == local_port - && proto_info.remote_port == 12345 + && proto_info.remote_port == 19_923 && proto_info.local_addr == std::net::Ipv4Addr::LOCALHOST && proto_info.remote_addr == std::net::Ipv4Addr::LOCALHOST { diff --git a/src-tauri/src/errors.rs b/src-tauri/src/errors.rs index d00625a..05ae03f 100644 --- a/src-tauri/src/errors.rs +++ b/src-tauri/src/errors.rs @@ -1,8 +1,5 @@ -use std::fmt::{Display, Formatter}; -use std::convert::From; -use std::str::Utf8Error; - use thiserror::Error; + use aws_sdk_sts::{ types::SdkError as AwsSdkError, error::GetSessionTokenError, diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index dd08289..9775293 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -3,14 +3,17 @@ windows_subsystem = "windows" )] -use std::str::FromStr; +use tauri::Manager; +mod config; mod errors; mod clientinfo; mod ipc; mod state; mod server; +use state::AppState; + fn main() { let initial_state = match state::AppState::new() { @@ -27,7 +30,9 @@ fn main() { ipc::save_credentials, ]) .setup(|app| { - let addr = std::net::SocketAddrV4::from_str("127.0.0.1:12345").unwrap(); + let state = app.state::(); + let config = state.config.read().unwrap(); + let addr = std::net::SocketAddrV4::new(config.listen_addr, config.listen_port); tauri::async_runtime::spawn(server::serve(addr, app.handle())); Ok(()) }) diff --git a/src-tauri/src/state.rs b/src-tauri/src/state.rs index a9f6ac7..1168bd4 100644 --- a/src-tauri/src/state.rs +++ b/src-tauri/src/state.rs @@ -15,6 +15,7 @@ use sodiumoxide::crypto::{ use tauri::async_runtime as runtime; use tauri::Manager; +use crate::config::AppConfig; use crate::ipc; use crate::clientinfo::Client; use crate::errors::*; @@ -54,6 +55,7 @@ pub enum Session { pub struct AppState { + pub config: RwLock, pub session: RwLock, pub request_count: RwLock, pub open_requests: RwLock>>, @@ -73,6 +75,7 @@ impl AppState { let creds = runtime::block_on(Self::load_creds(&pool))?; let state = AppState { + config: RwLock::new(AppConfig::default()), session: RwLock::new(creds), request_count: RwLock::new(0), open_requests: RwLock::new(HashMap::new()), diff --git a/src/views/Approve.svelte b/src/views/Approve.svelte index 031398c..47de640 100644 --- a/src/views/Approve.svelte +++ b/src/views/Approve.svelte @@ -34,14 +34,23 @@

An application would like to access your AWS credentials.

- +
+
    + {#each appState.currentRequest.clients as client} +
  • PID: {client.pid}
  • +
  • Path: {client.exe}
  • + {/each} +
- \ No newline at end of file + + + +
\ No newline at end of file diff --git a/src/views/ShowApproved.svelte b/src/views/ShowApproved.svelte index 8056b4c..84c139f 100644 --- a/src/views/ShowApproved.svelte +++ b/src/views/ShowApproved.svelte @@ -4,18 +4,31 @@ import { invoke } from '@tauri-apps/api/tauri'; export let appState; - - onMount(async () => { + let error = null; + + const dispatch = createEventDispatcher(); + async function respond() { let response = { id: appState.currentRequest.id, approval: 'Approved', - } - await invoke('respond', {response}); - appState.currentRequest = null; - }); + }; - const dispatch = createEventDispatcher(); - window.setTimeout(() => dispatch('navigate', {target: 'Home'}), 3000); + try { + await invoke('respond', {response}); + appState.currentRequest = null; + } + catch (e) { + error = e; + } + + window.setTimeout(() => dispatch('navigate', {target: 'Home'}), 3000); + } + + onMount(respond); -

Approved!

\ No newline at end of file +{#if error} +
Error attempting to send approval: {error}
+{:else} +

Approved!

+{/if} diff --git a/src/views/Unlock.svelte b/src/views/Unlock.svelte index eef9a2e..ef3fdfd 100644 --- a/src/views/Unlock.svelte +++ b/src/views/Unlock.svelte @@ -6,6 +6,7 @@ const dispatch = createEventDispatcher(); + let error = null; let passphrase = ''; async function unlock() { console.log('invoking unlock command.') @@ -21,11 +22,14 @@ } } catch (e) { - console.log('Unlock error:', e); + error = e; } } +{#if error} +
{error}
+{/if}
Enter your passphrase: