Create utility for ensuring a password is set (with prompt)

This commit is contained in:
timvisee 2018-04-11 15:15:22 +02:00
parent 2ee0ae0194
commit 804455e13d
No known key found for this signature in database
GPG key ID: 109CBA0BF74036C2
4 changed files with 30 additions and 22 deletions

View file

@ -1,4 +1,5 @@
# Ideas # Ideas
- Prompt for owner tokens
- allow creating non existent directories with the `-f` flag - allow creating non existent directories with the `-f` flag
- only allow file extension renaming on upload with `-f` flag - only allow file extension renaming on upload with `-f` flag
- no interact flag - no interact flag

View file

@ -17,7 +17,7 @@ use cmd::matcher::{
download::DownloadMatcher, download::DownloadMatcher,
}; };
use progress::ProgressBar; use progress::ProgressBar;
use util::prompt_password; use util::ensure_password;
/// A file download action. /// A file download action.
pub struct Download<'a> { pub struct Download<'a> {
@ -58,16 +58,8 @@ impl<'a> Download<'a> {
return Err(Error::Expired); return Err(Error::Expired);
} }
// Check whether the file requires a password // Ensure a password is set when required
if exists.has_password() != password.is_some() { ensure_password(&mut password, exists.has_password());
if exists.has_password() {
println!("This file is protected with a password.");
password = Some(prompt_password());
} else {
println!("Ignoring password, it is not required");
password = None;
}
}
// Create a progress bar reporter // Create a progress bar reporter
let bar = Arc::new(Mutex::new(ProgressBar::new_download())); let bar = Arc::new(Mutex::new(ProgressBar::new_download()));

View file

@ -19,7 +19,7 @@ use cmd::matcher::{
Matcher, Matcher,
info::InfoMatcher, info::InfoMatcher,
}; };
use util::{print_error, prompt_password}; use util::{print_error, ensure_password};
/// A file info action. /// A file info action.
pub struct Info<'a> { pub struct Info<'a> {
@ -58,16 +58,8 @@ impl<'a> Info<'a> {
return Err(Error::Expired); return Err(Error::Expired);
} }
// Check whether the file requires a password // Ensure a password is set when required
if exists.has_password() != password.is_some() { ensure_password(&mut password, exists.has_password());
if exists.has_password() {
println!("This file is protected with a password.");
password = Some(prompt_password());
} else {
println!("Ignoring password, it is not required");
password = None;
}
}
// Fetch both file info and metadata // Fetch both file info and metadata
let info = ApiInfo::new(&file, None).invoke(&client)?; let info = ApiInfo::new(&file, None).invoke(&client)?;

View file

@ -93,3 +93,26 @@ pub fn prompt_password() -> String {
)), )),
} }
} }
/// Get a password if required.
/// This method will ensure a password is set (or not) in the given `password`
/// parameter, as defined by `needs`.
///
/// This method will prompt the user for a password, if one is required but
/// wasn't set. An ignore message will be shown if it was not required while it
/// was set.
pub fn ensure_password(password: &mut Option<String>, needs: bool) {
// Return if we're fine
if password.is_some() == needs {
return;
}
// Ask for a password, or reset it
if needs {
println!("This file is protected with a password.");
*password = Some(prompt_password());
} else {
println!("Ignoring password, it is not required");
*password = None;
}
}