56 lines
1.6 KiB
Rust
56 lines
1.6 KiB
Rust
use clap::Values;
|
|
use crate::commands::clone::get_url_props;
|
|
use crate::services::api::ApiError::RequestError;
|
|
|
|
use crate::services::login::Login;
|
|
use crate::services::api_call::ApiCall;
|
|
use crate::commands::config;
|
|
|
|
pub struct CredentialArgs<'a> {
|
|
pub username: Option<Values<'a>>,
|
|
pub password: Option<Values<'a>>,
|
|
}
|
|
|
|
pub fn credential_add(args: CredentialArgs) {
|
|
// get remote if exists
|
|
let remote = match config::get_remote("origin") {
|
|
None => {
|
|
eprintln!("fatal: No remote origin, impossible to send request to get token");
|
|
std::process::exit(1);
|
|
},
|
|
Some(remote) => remote
|
|
};
|
|
let (host, _, _) = get_url_props(&remote);
|
|
|
|
// get username and password
|
|
let username = args.username.unwrap().next().unwrap();
|
|
let password = match args.password {
|
|
Some(mut pwd) => pwd.next().unwrap().to_owned(),
|
|
None => {
|
|
println!("Please enter the password for {}: ", username);
|
|
rpassword::read_password().unwrap()
|
|
}
|
|
};
|
|
|
|
// get token
|
|
let get_token = Login::new()
|
|
.set_auth(username, &password)
|
|
.set_host(Some(host))
|
|
.send_login();
|
|
|
|
// deal with error
|
|
if let Err(err) = get_token {
|
|
if let RequestError(err) = err {
|
|
eprintln!("fatal: Failed to get token for these credential. ({})", err);
|
|
}
|
|
else {
|
|
eprintln!("fatal: Failed to get token for these credential.");
|
|
}
|
|
std::process::exit(1);
|
|
}
|
|
|
|
// save token
|
|
let _ = config::write_option_in_cat("core", "token", get_token.unwrap().as_str());
|
|
}
|
|
|