allow user to choose whether to send base credentials at approval screen

This commit is contained in:
2024-01-10 16:31:16 -08:00
parent dd40eb379e
commit 46b8d810c5
10 changed files with 32 additions and 17 deletions

View File

@ -1,6 +1,6 @@
[package]
name = "creddy"
version = "0.4.1"
version = "0.4.2"
description = "A friendly AWS credentials manager"
authors = ["Joseph Montanaro"]
license = ""

View File

@ -18,6 +18,7 @@ use tauri::api::dialog::{
MessageDialogBuilder,
MessageDialogKind,
};
use tokio::sync::oneshot::error::RecvError;
use serde::{
Serialize,
Serializer,
@ -164,7 +165,7 @@ pub enum HandlerError {
#[error("HTTP request too large")]
RequestTooLarge,
#[error("Internal server error")]
Internal,
Internal(#[from] RecvError),
#[error("Error accessing credentials: {0}")]
NoCredentials(#[from] GetCredentialsError),
#[error("Error getting client details: {0}")]

View File

@ -21,6 +21,7 @@ pub struct AwsRequestNotification {
pub struct RequestResponse {
pub id: u64,
pub approval: Approval,
pub base: bool,
}

View File

@ -97,9 +97,10 @@ async fn get_aws_credentials(base: bool, client: Client, app_handle: AppHandle)
let notification = AwsRequestNotification {id: request_id, client, base};
app_handle.emit_all("credentials-request", &notification)?;
match chan_recv.await {
Ok(Approval::Approved) => {
if base {
let response = chan_recv.await?;
match response.approval {
Approval::Approved => {
if response.base {
let creds = state.base_creds_cloned().await?;
Ok(Response::Aws(Credentials::Base(creds)))
}
@ -108,8 +109,7 @@ async fn get_aws_credentials(base: bool, client: Client, app_handle: AppHandle)
Ok(Response::Aws(Credentials::Session(creds)))
}
},
Ok(Approval::Denied) => Err(HandlerError::Denied),
Err(_e) => Err(HandlerError::Internal),
Approval::Denied => Err(HandlerError::Denied),
}
};

View File

@ -17,7 +17,7 @@ use crate::credentials::{
SessionCredentials,
};
use crate::{config, config::AppConfig};
use crate::ipc::{self, Approval};
use crate::ipc::{self, Approval, RequestResponse};
use crate::errors::*;
use crate::shortcuts;
@ -102,7 +102,7 @@ pub struct AppState {
pub config: RwLock<AppConfig>,
pub session: RwLock<Session>,
pub request_count: RwLock<u64>,
pub waiting_requests: RwLock<HashMap<u64, Sender<Approval>>>,
pub waiting_requests: RwLock<HashMap<u64, Sender<RequestResponse>>>,
pub pending_terminal_request: RwLock<bool>,
// these are never modified and so don't need to be wrapped in RwLocks
pub setup_errors: Vec<String>,
@ -161,7 +161,7 @@ impl AppState {
Ok(())
}
pub async fn register_request(&self, sender: Sender<Approval>) -> u64 {
pub async fn register_request(&self, sender: Sender<RequestResponse>) -> u64 {
let count = {
let mut c = self.request_count.write().await;
*c += 1;
@ -193,7 +193,7 @@ impl AppState {
waiting_requests
.remove(&response.id)
.ok_or(SendResponseError::NotFound)?
.send(response.approval)
.send(response)
.map_err(|_| SendResponseError::Abandoned)
}

View File

@ -8,7 +8,7 @@
},
"package": {
"productName": "creddy",
"version": "0.4.1"
"version": "0.4.2"
},
"tauri": {
"allowlist": {