From 119ab9e0079c4b3105598abb8a918bc1e6b86cec Mon Sep 17 00:00:00 2001 From: Satyarth Sampath Date: Tue, 24 May 2022 18:55:48 +0530 Subject: Adds password prompt for register and login (#424) * Adds the rpassword dependency * Provides only a prompt based input for login and register with a hidden prompt for password * Adds option based inputs for login and register commands * Password can also be provided as an option Co-authored-by: Satyarth --- src/command/client/sync/login.rs | 9 +++++++-- src/command/client/sync/register.rs | 8 +++++--- 2 files changed, 12 insertions(+), 5 deletions(-) (limited to 'src/command') diff --git a/src/command/client/sync/login.rs b/src/command/client/sync/login.rs index 8056d1bb..29222563 100644 --- a/src/command/client/sync/login.rs +++ b/src/command/client/sync/login.rs @@ -6,6 +6,7 @@ use tokio::{fs::File, io::AsyncWriteExt}; use atuin_client::{api_client, settings::Settings}; use atuin_common::api::LoginRequest; +use rpassword::prompt_password; #[derive(Parser)] #[clap(setting(AppSettings::DeriveDisplayOrder))] @@ -40,9 +41,8 @@ impl Cmd { } let username = or_user_input(&self.username, "username"); - let password = or_user_input(&self.password, "password"); let key = or_user_input(&self.key, "encryption key"); - + let password = self.password.clone().unwrap_or_else(read_user_password); let session = api_client::login( settings.sync_address.as_str(), LoginRequest { username, password }, @@ -67,6 +67,11 @@ pub(super) fn or_user_input(value: &'_ Option, name: &'static str) -> St value.clone().unwrap_or_else(|| read_user_input(name)) } +pub(super) fn read_user_password() -> String { + let password = prompt_password("Please enter password: "); + password.expect("Failed to read from input") +} + fn read_user_input(name: &'static str) -> String { eprint!("Please enter {}: ", name); get_input().expect("Failed to read from input") diff --git a/src/command/client/sync/register.rs b/src/command/client/sync/register.rs index fe126237..2b5b9ced 100644 --- a/src/command/client/sync/register.rs +++ b/src/command/client/sync/register.rs @@ -11,10 +11,10 @@ pub struct Cmd { pub username: Option, #[clap(long, short)] - pub email: Option, + pub password: Option, #[clap(long, short)] - pub password: Option, + pub email: Option, } impl Cmd { @@ -32,7 +32,9 @@ pub async fn run( use super::login::or_user_input; let username = or_user_input(username, "username"); let email = or_user_input(email, "email"); - let password = or_user_input(password, "password"); + let password = password + .clone() + .unwrap_or_else(super::login::read_user_password); let session = api_client::register(settings.sync_address.as_str(), &username, &email, &password).await?; -- cgit v1.3.1