From 67705aa2d1569f6fc20daf8ced4d2c4d0bf1ef8d Mon Sep 17 00:00:00 2001 From: Joseph Montanaro Date: Tue, 13 Dec 2022 21:50:34 -0800 Subject: [PATCH] add credentials entry view --- src-tauri/src/clientinfo.rs | 2 +- src-tauri/src/ipc.rs | 16 ++++++++-- src-tauri/src/main.rs | 49 +++++++++++++------------------ src-tauri/src/state.rs | 6 ++++ src/views/Approve.svelte | 2 +- src/views/EnterCredentials.svelte | 41 ++++++++++++++++++++++++++ 6 files changed, 83 insertions(+), 33 deletions(-) create mode 100644 src/views/EnterCredentials.svelte diff --git a/src-tauri/src/clientinfo.rs b/src-tauri/src/clientinfo.rs index 2285dc9..a0dbc03 100644 --- a/src-tauri/src/clientinfo.rs +++ b/src-tauri/src/clientinfo.rs @@ -36,7 +36,7 @@ pub fn get_clients(local_port: u16) -> Result, ClientInfoError> { let mut clients = Vec::new(); let mut sys = System::new(); for p in get_associated_pids(local_port)? { - let pid = Pid::from(p as i32); + let pid = Pid::from(p as usize); sys.refresh_process(pid); let proc = sys.process(pid) .ok_or(ClientInfoError::PidNotFound)?; diff --git a/src-tauri/src/ipc.rs b/src-tauri/src/ipc.rs index c874cfd..5052b4a 100644 --- a/src-tauri/src/ipc.rs +++ b/src-tauri/src/ipc.rs @@ -1,7 +1,7 @@ use serde::{Serialize, Deserialize}; use tauri::State; -use crate::state::{AppState, Session}; +use crate::state::{AppState, Session, Credentials}; #[derive(Clone, Serialize, Deserialize)] @@ -43,8 +43,7 @@ pub fn respond(response: RequestResponse, app_state: State<'_, AppState>) -> Res pub async fn unlock(passphrase: String, app_state: State<'_, AppState>) -> Result<(), String> { app_state.decrypt(&passphrase) .await - .map_err(|e| e.to_string())?; - Ok(()) + .map_err(|e| e.to_string()) } @@ -58,3 +57,14 @@ pub fn get_session_status(app_state: State<'_, AppState>) -> String { } } + +#[tauri::command] +pub async fn save_credentials( + credentials: Credentials, + passphrase: String, + app_state: State<'_, AppState> +) -> Result<(), String> { + app_state.save_creds(credentials, &passphrase) + .await + .map_err(|e| e.to_string()) +} diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index 0fa4362..d6b61f2 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -1,6 +1,6 @@ #![cfg_attr( - all(not(debug_assertions), target_os = "windows"), - windows_subsystem = "windows" + all(not(debug_assertions), target_os = "windows"), + windows_subsystem = "windows" )] use std::str::FromStr; @@ -14,31 +14,24 @@ mod storage; fn main() { - let initial_state = match state::AppState::new() { - Ok(state) => state, - Err(e) => {eprintln!("{}", e); return;} - }; + let initial_state = match state::AppState::new() { + Ok(state) => state, + Err(e) => {eprintln!("{}", e); return;} + }; - tauri::Builder::default() - .manage(initial_state) - .invoke_handler(tauri::generate_handler![ - ipc::unlock, - ipc::respond, - ipc::get_session_status, - ]) - .setup(|app| { - let addr = std::net::SocketAddrV4::from_str("127.0.0.1:12345").unwrap(); - tauri::async_runtime::spawn(server::serve(addr, app.handle())); - Ok(()) - }) - .run(tauri::generate_context!()) - .expect("error while running tauri application"); - - // let addr = std::net::SocketAddrV4::from_str("127.0.0.1:12345").unwrap(); - // let rt = Runtime::new().unwrap(); - - // rt.block_on(http::serve(addr)).unwrap(); - - // let creds = std::fs::read_to_string("credentials.json").unwrap(); - // storage::save(&creds, "correct horse battery staple"); + tauri::Builder::default() + .manage(initial_state) + .invoke_handler(tauri::generate_handler![ + ipc::unlock, + ipc::respond, + ipc::get_session_status, + ipc::save_credentials, + ]) + .setup(|app| { + let addr = std::net::SocketAddrV4::from_str("127.0.0.1:12345").unwrap(); + tauri::async_runtime::spawn(server::serve(addr, app.handle())); + Ok(()) + }) + .run(tauri::generate_context!()) + .expect("error while running tauri application"); } \ No newline at end of file diff --git a/src-tauri/src/state.rs b/src-tauri/src/state.rs index 800ca00..4ad0aa5 100644 --- a/src-tauri/src/state.rs +++ b/src-tauri/src/state.rs @@ -21,13 +21,19 @@ use crate::errors::*; #[serde(untagged)] pub enum Credentials { LongLived { + #[serde(rename = "AccessKeyId")] access_key_id: String, + #[serde(rename = "SecretAccessKey")] secret_access_key: String, }, ShortLived { + #[serde(rename = "AccessKeyId")] access_key_id: String, + #[serde(rename = "SecretAccessKey")] secret_access_key: String, + #[serde(rename = "Token")] token: String, + #[serde(rename = "Expiration")] expiration: String, }, } diff --git a/src/views/Approve.svelte b/src/views/Approve.svelte index f84a410..187fb57 100644 --- a/src/views/Approve.svelte +++ b/src/views/Approve.svelte @@ -7,7 +7,7 @@ const dispatch = createEventDispatcher(); async function approve() { - let status = await invoke('get-session-status'); + let status = await invoke('get_session_status'); if (status === 'unlocked') { dispatch('navigate', {target: 'ShowApproved'}); } diff --git a/src/views/EnterCredentials.svelte b/src/views/EnterCredentials.svelte new file mode 100644 index 0000000..4de0652 --- /dev/null +++ b/src/views/EnterCredentials.svelte @@ -0,0 +1,41 @@ + + + +
+
AWS Access Key ID
+ + +
AWS Secret Access Key
+ + +
Passphrase
+ + + +