use std::path::Path;
pub struct VaultRules {
pub require_metadata: bool,
pub require_cia_signature: bool,
pub max_file_size_bytes: Option<u64>,
}
impl VaultRules {
pub fn default() -> Self {
VaultRules {
require_metadata: true,
require_cia_signature: true,
max_file_size_bytes: Some(50 * 1024 * 1024), }
}
pub fn validate_file(&self, path: &Path) -> Result<(), String> {
let metadata = std::fs::metadata(path)
.map_err(|_| format!("Could not read file metadata: {:?}", path))?;
if let Some(limit) = self.max_file_size_bytes {
if metadata.len() > limit {
return Err(format!(
"File {:?} exceeds max size of {} bytes",
path,
limit
));
}
}
Ok(())
}
pub fn validate_vault_compliance(&self, has_meta: bool, has_cia: bool) -> Result<(), String> {
if self.require_metadata && !has_meta {
return Err("Vault is missing required metadata.".to_string());
}
if self.require_cia_signature && !has_cia {
return Err("Vault is missing required CIA signature.".to_string());
}
Ok(())
}
}