/* This file is part of jellything (https://codeberg.org/metamuffin/jellything) which is licensed under the GNU Affero General Public License (version 3); see /COPYING. Copyright (C) 2024 metamuffin */ pub mod assetfed; pub mod cache; pub mod database; pub mod federation; pub mod permission; use jellycommon::config::{GlobalConfig, SecretsConfig}; use std::sync::{ atomic::{AtomicBool, Ordering}, LazyLock, }; pub static CONF: LazyLock = LazyLock::new(load_config); pub static SECRETS: LazyLock = LazyLock::new(load_secrets); pub static USE_TEST: AtomicBool = AtomicBool::new(false); pub fn use_test_config() { USE_TEST.store(true, Ordering::Relaxed) } pub fn load_config() -> GlobalConfig { if USE_TEST.load(Ordering::Relaxed) { return GlobalConfig::default(); } serde_yaml::from_reader( std::fs::File::open(std::env::var("JELLYTHING_CONFIG").unwrap_or_else(|_| { if std::env::args() .nth(0) .unwrap_or_default() .ends_with("jellything") { std::env::args().nth(1).expect( "First argument or JELLYTHING_CONFIG must specify the configuration to use.", ) } else { panic!("JELLYTHING_CONFIG variable is required.") } })) .expect("config cannot be read"), ) .expect("config invalid") } fn load_secrets() -> SecretsConfig { if USE_TEST.load(Ordering::Relaxed) { return SecretsConfig::default(); } serde_yaml::from_reader(std::fs::File::open(&CONF.secrets_path).expect("secrets file missing")) .expect("secrets config invalid") }