Compare commits

..

2 Commits

Author SHA1 Message Date
blek 33af28da8a
check if brand logo is a valid resource 2023-11-04 14:26:59 +10:00
blek 8aaae66677
watch config also 2023-11-04 14:26:33 +10:00
4 changed files with 25 additions and 7 deletions

View File

@ -93,3 +93,14 @@ upload=false
# Whether curlapi is enabled # Whether curlapi is enabled
# curl {url}/curlapi/help for more info # curl {url}/curlapi/help for more info
curlapi=true curlapi=true
# Resources section
# Define your resources like this:
# [resources."org.name.logo"]
# Make sure that this path exists within the fileD filesystem
# path="/some/place"
# https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types
# mime="image/webp"

View File

@ -5,4 +5,4 @@ cd /opt/code
cargo check cargo check
cargo build cargo build
cargo watch -w src -w templates -w static -x run cargo watch -w src -w templates -w static -w config -x run

View File

@ -19,6 +19,10 @@ impl ResourceCollection {
} }
Ok(()) Ok(())
} }
pub fn get<T: Into<String>>(self: &Self, key: T) -> Option<&Resource> {
self.0.get(&key.into())
}
} }
#[derive(Debug, Clone, Serialize, Deserialize)] #[derive(Debug, Clone, Serialize, Deserialize)]

View File

@ -148,11 +148,14 @@ impl FilesPolicy {
} }
impl Branding { impl Branding {
fn validate(self: &Self) -> Result<(), String> { fn validate(self: &Self, conf: &Config) -> Result<(), String> {
if let Some(logo_path) = self.custom_logo.clone() { if let Some(logo_id) = self.custom_logo.clone() {
let logo_path = Path::new(&logo_path); if let Some(ref resources) = conf.resources {
if ! logo_path.is_file() { if resources.get(&logo_id).is_none() {
return Err("Config parameter branding.custom_logo is not a file. It must be a valid path that should be accessible from fileD's filesystem".into()) return Err(format!("Brand logo is set to a non existant resource ({logo_id})"));
}
} else {
return Err("Brand logo specified but no resources found".into())
} }
} }
Ok(()) Ok(())
@ -177,11 +180,11 @@ impl Config {
pub fn validate(self: &Self) -> Result<(), String> { pub fn validate(self: &Self) -> Result<(), String> {
self.files.validate()?; self.files.validate()?;
self.brand.validate()?;
self.api .validate()?; self.api .validate()?;
if let Some(resources) = self.resources.clone() { if let Some(resources) = self.resources.clone() {
resources.validate()?; resources.validate()?;
} }
self.brand.validate(self)?;
Ok(()) Ok(())
} }