use crate::clients::s3::S3Client;
use crate::config::{Config, config_path};
use crate::error::Result;
use dialoguer::{Input, Password};
fn input_credentials() -> Result<(String, String)> {
let access: String = Input::new()
.with_prompt("AWS Access Key ID")
.interact_text()?;
let secret = Password::new()
.with_prompt("AWS Secret Access Key")
.interact()?;
Ok((access, secret))
}
fn store_credentials(access_key: &str, secret_key: &str) -> Result<()> {
println!(
"Storing:\n access = {}\n secret = {}",
access_key, secret_key
);
Ok(())
}
pub async fn run() -> Result<String> {
let (access, secret) = input_credentials()?;
let s3_config: Config = Config::load(&config_path())?;
let s3_client = S3Client::new(&access, &secret, None, Some(&s3_config.endpoint)).await?;
let ok = s3_client.check_bucket_access(&s3_config.bucket).await?;
if ok {
store_credentials(&access, &secret)?;
return Ok("Credentials stored successfully".to_string());
}
Ok("Credentials not stored".to_string())
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn store_credentials_always_succeeds() {
let result = store_credentials("AKCCESSKEYEXAMPLE123", "SECRETKEYEXAMPLE123");
assert!(result.is_ok(), "store_credentials() should return Ok(())");
}
}