summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2021-04-10 09:12:54 +0300
committerLars Wirzenius <liw@liw.fi>2021-04-10 10:29:27 +0300
commit822a2f8c6c4d83d82d4543eb5fcf0ed01df21435 (patch)
treef826a92830449c298c628a0398b0f03b2e3210c6
parente13ef6a773755e8eed4d0fb1e55f3bd80a6c5cfd (diff)
downloadobnam2-822a2f8c6c4d83d82d4543eb5fcf0ed01df21435.tar.gz
refactor: struct Init subcommand
-rw-r--r--src/bin/obnam.rs21
-rw-r--r--src/cmd/init.rs43
-rw-r--r--src/cmd/mod.rs3
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;