From 822a2f8c6c4d83d82d4543eb5fcf0ed01df21435 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Sat, 10 Apr 2021 09:12:54 +0300 Subject: refactor: struct Init subcommand --- src/bin/obnam.rs | 21 ++++++--------------- src/cmd/init.rs | 43 ++++++++++++++++++++++++++----------------- 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, - }, + 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, -) -> 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; -- cgit v1.2.1