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
- Prompt for owner tokens
- allow creating non existent directories with the `-f` flag
- only allow file extension renaming on upload with `-f` flag
- no interact flag

View file

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

View file

@ -19,7 +19,7 @@ use cmd::matcher::{
Matcher,
info::InfoMatcher,
};
use util::{print_error, prompt_password};
use util::{print_error, ensure_password};
/// A file info action.
pub struct Info<'a> {
@ -58,16 +58,8 @@ impl<'a> Info<'a> {
return Err(Error::Expired);
}
// Check whether the file requires a password
if exists.has_password() != password.is_some() {
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;
}
}
// Ensure a password is set when required
ensure_password(&mut password, exists.has_password());
// Fetch both file info and metadata
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;
}
}