-
Nicolas80 authored
* Cleaned-up code in several places * Now retrieving secret value in "substrate uri" format from the different prompt_xxx_and_compute_keypair methods
Nicolas80 authored* Cleaned-up code in several places * Now retrieving secret value in "substrate uri" format from the different prompt_xxx_and_compute_keypair methods
inputs.rs 2.50 KiB
use crate::utils::GcliError;
use inquire::validator::Validation;
pub fn prompt_password() -> Result<String, GcliError> {
prompt_password_query("Password")
}
pub fn prompt_password_confirm() -> Result<String, GcliError> {
prompt_password_query_confirm("Password")
}
pub fn prompt_password_query(query: impl ToString) -> Result<String, GcliError> {
inquire::Password::new(query.to_string().as_str())
.without_confirmation()
.prompt()
.map_err(|e| GcliError::Input(e.to_string()))
}
pub fn prompt_seed() -> Result<String, GcliError> {
inquire::Password::new("Seed:")
.without_confirmation()
.with_validator(|input: &str| {
if input.chars().any(|c| !c.is_ascii_hexdigit()) {
Ok(Validation::Invalid(
"Seed value must only contain valid hexadecimal characters [0-9a-fA-F]".into(),
))
} else if input.len() < 64 || input.len() > 64 {
Ok(Validation::Invalid(
"Seed value must be 32 bytes in hexadecimal format (64 characters long)".into(),
))
} else {
Ok(Validation::Valid)
}
})
.prompt()
.map_err(|e| GcliError::Input(e.to_string()))
}
pub fn prompt_password_query_confirm(query: impl ToString) -> Result<String, GcliError> {
inquire::Password::new(query.to_string().as_str())
.prompt()
.map_err(|e| GcliError::Input(e.to_string()))
}
/// Prompt for a (direct) vault name (cannot contain derivation path)
///
/// Also preventing to use '<' and '>' as those are used in the display
pub fn prompt_vault_name() -> Result<Option<String>, GcliError> {
let name = inquire::Text::new("Name:")
.with_validator(|input: &str| {
if input.contains('<') || input.contains('>') || input.contains('/') {
Ok(Validation::Invalid(
"Name cannot contain characters '<', '>', '/'".into(),
))
} else {
Ok(Validation::Valid)
}
})
.prompt()
.map_err(|e| GcliError::Input(e.to_string()))?;
Ok(if name.trim().is_empty() {
None
} else {
Some(name.trim().to_string())
})
}
/// Prompt for a derivation path
pub fn prompt_vault_derivation_path() -> Result<String, GcliError> {
inquire::Text::new("Derivation path:")
.with_validator(|input: &str| {
if !input.starts_with("/") {
Ok(Validation::Invalid(
"derivation path needs to start with one or more '/'".into(),
))
} else {
Ok(Validation::Valid)
}
})
.prompt()
.map_err(|e| GcliError::Input(e.to_string()))
}
pub fn confirm_action(query: impl ToString) -> Result<bool, GcliError> {
inquire::Confirm::new(query.to_string().as_str())
.prompt()
.map_err(|e| GcliError::Input(e.to_string()))
}