use tsafe_core::pullconfig::PullSource;
use super::error::KeePassError;
#[derive(Debug)]
pub struct KeePassConfig {
pub path: String,
pub password: Option<String>,
pub keyfile_path: Option<String>,
pub group: Option<String>,
pub recursive: bool,
}
impl KeePassConfig {
pub fn from_pull_source(src: &PullSource) -> Result<Self, KeePassError> {
let PullSource::Keepass {
path,
password_env,
keyfile_path,
group,
recursive,
..
} = src
else {
panic!("KeePassConfig::from_pull_source called with non-Keepass PullSource");
};
let password = match password_env {
Some(env_var) => {
let val = std::env::var(env_var)
.map_err(|_| KeePassError::PasswordRequired(env_var.clone()))?;
Some(val)
}
None => None,
};
if password.is_none() && keyfile_path.is_none() {
return Err(KeePassError::PasswordRequired(
"TSAFE_KP_PASSWORD".to_string(),
));
}
Ok(KeePassConfig {
path: path.clone(),
password,
keyfile_path: keyfile_path.clone(),
group: group.clone(),
recursive: recursive.unwrap_or(false),
})
}
}