sops-batch 0.4.0

SOPS encryption / decryption batch tool
use crate::common::{call_sops, load_files_config, FilePair};
use std::path::Path;

pub fn update_keys(files_config_path: &Path, sops_bin: &Path, verbose: bool) -> Result<(), String> {
    let files_config = match load_files_config(files_config_path) {
        Ok(c) => c,
        Err(e) => return Err(e),
    };
    for filename in files_config.files {
        let file_pair = FilePair::from_filename(filename.as_str());
        let args: Vec<&str> = ["updatekeys", file_pair.enc_name.as_str()].to_vec();
        eprintln!("updating keys on {}", file_pair.enc_name);
        let status = match call_sops(sops_bin, args, verbose) {
            Ok(c) => c,
            Err(err) => {
                return Err(format!(
                    "failed to update keys on {}: {}",
                    file_pair.enc_name, err
                ))
            }
        };
        let status_code = match status.code() {
            Some(c) => c,
            None => return Err("process terminated".to_string()),
        };
        match status_code {
            0 => continue,
            other => {
                return Err(format!(
                    "failed to update keys on {}: sops exit code {}",
                    file_pair.enc_name, other
                ));
            }
        };
    }
    Ok(())
}