basic config
This commit is contained in:
parent
05a9de1605
commit
26f40621c9
|
@ -276,7 +276,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "874c6e2d19f8d4a285083b11a3241bfbe01ac3ed85f26e1e6b34888d960552bd"
|
||||
dependencies = [
|
||||
"derive_more",
|
||||
"indexmap",
|
||||
"indexmap 1.9.3",
|
||||
"nom",
|
||||
]
|
||||
|
||||
|
@ -325,6 +325,12 @@ dependencies = [
|
|||
"cfg-if",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "equivalent"
|
||||
version = "1.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
|
||||
|
||||
[[package]]
|
||||
name = "erased-serde"
|
||||
version = "0.3.31"
|
||||
|
@ -374,6 +380,7 @@ dependencies = [
|
|||
"sha2",
|
||||
"static_dir",
|
||||
"tokio",
|
||||
"toml",
|
||||
"urlencoding 2.1.3",
|
||||
"warp",
|
||||
]
|
||||
|
@ -486,7 +493,7 @@ dependencies = [
|
|||
"futures-sink",
|
||||
"futures-util",
|
||||
"http",
|
||||
"indexmap",
|
||||
"indexmap 1.9.3",
|
||||
"slab",
|
||||
"tokio",
|
||||
"tokio-util",
|
||||
|
@ -509,6 +516,12 @@ dependencies = [
|
|||
"bumpalo",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hashbrown"
|
||||
version = "0.14.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f93e7192158dbcda357bdec5fb5788eebf8bbac027f3f33e719d29135ae84156"
|
||||
|
||||
[[package]]
|
||||
name = "headers"
|
||||
version = "0.3.9"
|
||||
|
@ -678,6 +691,16 @@ dependencies = [
|
|||
"hashbrown 0.12.3",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "indexmap"
|
||||
version = "2.0.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8adf3ddd720272c6ea8bf59463c04e0f93d0bbf7c5439b691bca2987e0270897"
|
||||
dependencies = [
|
||||
"equivalent",
|
||||
"hashbrown 0.14.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "itoa"
|
||||
version = "1.0.9"
|
||||
|
@ -1136,6 +1159,15 @@ dependencies = [
|
|||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_spanned"
|
||||
version = "0.6.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186"
|
||||
dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_urlencoded"
|
||||
version = "0.7.1"
|
||||
|
@ -1424,6 +1456,40 @@ dependencies = [
|
|||
"tracing",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "toml"
|
||||
version = "0.8.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d"
|
||||
dependencies = [
|
||||
"serde",
|
||||
"serde_spanned",
|
||||
"toml_datetime",
|
||||
"toml_edit",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "toml_datetime"
|
||||
version = "0.6.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b"
|
||||
dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "toml_edit"
|
||||
version = "0.20.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338"
|
||||
dependencies = [
|
||||
"indexmap 2.0.2",
|
||||
"serde",
|
||||
"serde_spanned",
|
||||
"toml_datetime",
|
||||
"winnow",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tower-service"
|
||||
version = "0.3.2"
|
||||
|
@ -1791,3 +1857,12 @@ name = "windows_x86_64_msvc"
|
|||
version = "0.48.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
|
||||
|
||||
[[package]]
|
||||
name = "winnow"
|
||||
version = "0.5.17"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a3b801d0e0a6726477cc207f60162da452f3a95adb368399bef20a946e06f65c"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
|
|
|
@ -24,6 +24,7 @@ serde_json = "1.0.107"
|
|||
sha2 = "0.10.8"
|
||||
static_dir = "0.2.0"
|
||||
tokio = { version = "1.32.0", features = ["rt", "macros", "rt-multi-thread"] }
|
||||
toml = "0.8.2"
|
||||
urlencoding = "2.1.3"
|
||||
warp = "0.3.6"
|
||||
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
pub mod types;
|
|
@ -0,0 +1,88 @@
|
|||
use serde::{Serialize, Deserialize};
|
||||
use std::{error::Error, fs};
|
||||
|
||||
use crate::env::Env;
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
pub struct FilesPolicy {
|
||||
/// Whether the uploads are enabled
|
||||
#[serde(default)]
|
||||
allow_uploads: bool,
|
||||
|
||||
/// Allow custom names
|
||||
#[serde(default)]
|
||||
allow_custom_names: bool,
|
||||
|
||||
/// Allow password protection
|
||||
#[serde(default)]
|
||||
allow_pass_protection: bool,
|
||||
|
||||
/// Max uploads for IP (doesn't include deleted uploads)
|
||||
#[serde(default)]
|
||||
max_per_ip: usize,
|
||||
|
||||
/// Default time for file to be deleted
|
||||
#[serde(default)]
|
||||
file_del_timeout: usize,
|
||||
|
||||
/// Whitelisted file types
|
||||
#[serde(default)]
|
||||
type_whitelist: Option<Vec<String>>,
|
||||
|
||||
/// Backlisted file types
|
||||
#[serde(default)]
|
||||
type_blacklist: Option<Vec<String>>,
|
||||
|
||||
/// Instance name
|
||||
#[serde(default)]
|
||||
instance_name: String,
|
||||
|
||||
/// Instance URL (not the bind URL). Must be Some(...)
|
||||
#[serde(default)]
|
||||
instance_url: Option<String>
|
||||
}
|
||||
|
||||
impl Default for FilesPolicy {
|
||||
fn default() -> Self {
|
||||
FilesPolicy {
|
||||
allow_uploads: true,
|
||||
allow_custom_names: true,
|
||||
allow_pass_protection: true,
|
||||
max_per_ip: 8,
|
||||
file_del_timeout: 1800,
|
||||
type_whitelist: None,
|
||||
type_blacklist: None,
|
||||
instance_name: "blek! File".into(),
|
||||
instance_url: None
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl FilesPolicy {
|
||||
pub fn validate(self: &Self) -> Result<(), String> {
|
||||
if self.instance_url.is_none() {
|
||||
return Err("Instance url must not be empty!".into());
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
pub struct Config {
|
||||
files: FilesPolicy
|
||||
}
|
||||
|
||||
impl Config {
|
||||
|
||||
pub fn validate(self: &Self) -> Result<(), String> {
|
||||
self.files.validate()?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn load(env: Env) -> Result<Config, Box<dyn Error>> {
|
||||
let raw = fs::read_to_string(env.confpath.clone())?;
|
||||
let conf: Config = toml::from_str(&raw)?;
|
||||
conf.validate()?;
|
||||
Ok(conf)
|
||||
}
|
||||
}
|
|
@ -20,7 +20,8 @@ pub struct Env {
|
|||
pub redis: Redis,
|
||||
pub filedir: String,
|
||||
pub instanceurl: String,
|
||||
pub uploadspath: String
|
||||
pub uploadspath: String,
|
||||
pub confpath: String
|
||||
}
|
||||
|
||||
fn get_var<T: Into<String>, O: From<String>>(name: T) -> Result<O, String> {
|
||||
|
@ -55,7 +56,15 @@ pub fn loadenv() -> Result<Env, Box<dyn std::error::Error>> {
|
|||
spath
|
||||
},
|
||||
instanceurl: get_var("INSTANCE_URL")?,
|
||||
uploadspath: get_var("UPLOADS_PATH")?
|
||||
uploadspath: get_var("UPLOADS_PATH")?,
|
||||
confpath: {
|
||||
let spath: String = get_var("CONF_FILE").unwrap_or("/etc/filed".into());
|
||||
let path = Path::new(&spath);
|
||||
if ! path.is_file() {
|
||||
return Err(format!("CONF_FILE is {}, which is not a file!", spath).into())
|
||||
}
|
||||
spath
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@ mod files;
|
|||
mod env;
|
||||
mod web;
|
||||
mod db;
|
||||
mod config;
|
||||
|
||||
pub mod security;
|
||||
|
||||
|
@ -13,6 +14,7 @@ pub mod security;
|
|||
async fn main() {
|
||||
dotenvy::dotenv().unwrap();
|
||||
let envy = env::loadenv().map_err(|err| format!("Could not load env: {err}")).unwrap();
|
||||
let conf = config::types::Config::load(envy.clone()).unwrap();
|
||||
|
||||
// set up logging
|
||||
if envy.logging {
|
||||
|
|
Loading…
Reference in New Issue