52 lines
1.3 KiB
Rust
52 lines
1.3 KiB
Rust
use crate::{filters::IpFilter, hooks::Hook};
|
|
use anyhow::{bail, Result};
|
|
use log::info;
|
|
use serde::{Deserialize, Serialize};
|
|
use std::{collections::BTreeMap, fs::File};
|
|
|
|
#[derive(Debug, Deserialize, Serialize)]
|
|
#[serde(deny_unknown_fields)]
|
|
pub struct MetricsConfig {
|
|
pub enabled: bool,
|
|
pub ip_filter: Option<IpFilter>,
|
|
}
|
|
|
|
#[derive(Debug, Deserialize, Serialize)]
|
|
#[serde(deny_unknown_fields)]
|
|
pub struct Config {
|
|
pub metrics: Option<MetricsConfig>,
|
|
pub hooks: BTreeMap<String, Hook>,
|
|
}
|
|
|
|
pub fn get_config() -> Result<File> {
|
|
// Look for config in CWD..
|
|
if let Ok(config) = File::open("config.yml") {
|
|
info!("Loading configuration from `./config.yml`");
|
|
|
|
return Ok(config);
|
|
}
|
|
|
|
// ..look for user path config..
|
|
if let Some(mut path) = dirs::config_dir() {
|
|
path.push("webhookey/config.yml");
|
|
|
|
if let Ok(config) = File::open(&path) {
|
|
info!(
|
|
"Loading configuration from `{}`",
|
|
path.to_str().unwrap_or("<path unprintable>"),
|
|
);
|
|
|
|
return Ok(config);
|
|
}
|
|
}
|
|
|
|
// ..look for systemwide config..
|
|
if let Ok(config) = File::open("/etc/webhookey/config.yml") {
|
|
info!("Loading configuration from `/etc/webhookey/config.yml`");
|
|
|
|
return Ok(config);
|
|
}
|
|
|
|
// ..you had your chance.
|
|
bail!("No configuration file found.");
|
|
}
|