diff options
author | Lars Wirzenius <liw@liw.fi> | 2021-04-10 09:12:54 +0300 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2021-04-10 10:29:27 +0300 |
commit | 822a2f8c6c4d83d82d4543eb5fcf0ed01df21435 (patch) | |
tree | f826a92830449c298c628a0398b0f03b2e3210c6 | |
parent | e13ef6a773755e8eed4d0fb1e55f3bd80a6c5cfd (diff) | |
download | obnam2-822a2f8c6c4d83d82d4543eb5fcf0ed01df21435.tar.gz |
refactor: struct Init subcommand
-rw-r--r-- | src/bin/obnam.rs | 21 | ||||
-rw-r--r-- | src/cmd/init.rs | 43 | ||||
-rw-r--r-- | src/cmd/mod.rs | 3 |
3 files changed, 33 insertions, 34 deletions
diff --git a/src/bin/obnam.rs b/src/bin/obnam.rs index 10048a3..4caa548 100644 --- a/src/bin/obnam.rs +++ b/src/bin/obnam.rs @@ -2,9 +2,8 @@ use directories_next::ProjectDirs; use log::{debug, error, info, LevelFilter}; use log4rs::append::file::FileAppender; use log4rs::config::{Appender, Config, Logger, Root}; -use obnam::cmd::{ - backup, get_chunk, init, list, list_files, restore, show_config, show_generation, -}; +use obnam::cmd::init::Init; +use obnam::cmd::{backup, get_chunk, list, list_files, restore, show_config, show_generation}; use obnam::config::ClientConfig; use std::path::{Path, PathBuf}; use structopt::StructOpt; @@ -23,17 +22,12 @@ fn main() -> anyhow::Result<()> { debug!("configuration: {:#?}", config); let cfgname = config_filename(&opt); - let result = if let Command::Init { - insecure_passphrase, - } = opt.cmd - { - init(config.config(), &cfgname, insecure_passphrase) + let result = if let Command::Init(init) = opt.cmd { + init.run(config.config(), &cfgname) } else { let config = load_config_with_passwords(&opt)?; match opt.cmd { - Command::Init { - insecure_passphrase: _, - } => panic!("this cannot happen"), + Command::Init(_) => panic!("this cannot happen"), Command::Backup => backup(&config), Command::List => list(&config), Command::ShowGeneration { gen_id } => show_generation(&config, &gen_id), @@ -101,10 +95,7 @@ struct Opt { #[derive(Debug, StructOpt)] enum Command { - Init { - #[structopt(long)] - insecure_passphrase: Option<String>, - }, + Init(Init), Backup, List, ListFiles { diff --git a/src/cmd/init.rs b/src/cmd/init.rs index fb8a6af..462174e 100644 --- a/src/cmd/init.rs +++ b/src/cmd/init.rs @@ -2,27 +2,36 @@ use crate::config::ClientConfigWithoutPasswords; use crate::error::ObnamError; use crate::passwords::{passwords_filename, Passwords}; use std::path::Path; +use structopt::StructOpt; const PROMPT: &str = "Obnam passphrase: "; -pub fn init( - config: &ClientConfigWithoutPasswords, - config_filename: &Path, +#[derive(Debug, StructOpt)] +pub struct Init { + #[structopt(long)] insecure_passphrase: Option<String>, -) -> Result<(), ObnamError> { - if !config.encrypt { - panic!("no encryption specified"); - } +} - let passphrase = match insecure_passphrase { - Some(x) => x, - None => rpassword::read_password_from_tty(Some(PROMPT)).unwrap(), - }; +impl Init { + pub fn run( + &self, + config: &ClientConfigWithoutPasswords, + config_filename: &Path, + ) -> Result<(), ObnamError> { + if !config.encrypt { + panic!("no encryption specified"); + } - let passwords = Passwords::new(&passphrase); - let filename = passwords_filename(config_filename); - passwords - .save(&filename) - .map_err(|err| ObnamError::PasswordSave(filename, err))?; - Ok(()) + let passphrase = match &self.insecure_passphrase { + Some(x) => x.to_string(), + None => rpassword::read_password_from_tty(Some(PROMPT)).unwrap(), + }; + + let passwords = Passwords::new(&passphrase); + let filename = passwords_filename(config_filename); + passwords + .save(&filename) + .map_err(|err| ObnamError::PasswordSave(filename, err))?; + Ok(()) + } } diff --git a/src/cmd/mod.rs b/src/cmd/mod.rs index 70dde59..e252bc9 100644 --- a/src/cmd/mod.rs +++ b/src/cmd/mod.rs @@ -1,5 +1,4 @@ -mod init; -pub use init::init; +pub mod init; mod backup; pub use backup::backup; |