music on atproto
plyr.fm
1//! Configuration loading from environment variables.
2
3use anyhow::anyhow;
4use std::env;
5
6/// Service configuration loaded from environment.
7pub struct Config {
8 pub host: String,
9 pub port: u16,
10 pub auth_token: Option<String>,
11 pub audd_api_token: String,
12 pub audd_api_url: String,
13 pub database_url: Option<String>,
14 pub labeler_did: Option<String>,
15 pub labeler_signing_key: Option<String>,
16}
17
18impl Config {
19 /// Load configuration from environment variables.
20 pub fn from_env() -> anyhow::Result<Self> {
21 Ok(Self {
22 host: env::var("MODERATION_HOST").unwrap_or_else(|_| "0.0.0.0".to_string()),
23 port: env::var("MODERATION_PORT")
24 .ok()
25 .and_then(|v| v.parse().ok())
26 .unwrap_or(8083),
27 auth_token: env::var("MODERATION_AUTH_TOKEN").ok(),
28 audd_api_token: env::var("MODERATION_AUDD_API_TOKEN")
29 .map_err(|_| anyhow!("MODERATION_AUDD_API_TOKEN is required"))?,
30 audd_api_url: env::var("MODERATION_AUDD_API_URL")
31 .unwrap_or_else(|_| "https://enterprise.audd.io/".to_string()),
32 database_url: env::var("MODERATION_DATABASE_URL").ok(),
33 labeler_did: env::var("MODERATION_LABELER_DID").ok(),
34 labeler_signing_key: env::var("MODERATION_LABELER_SIGNING_KEY").ok(),
35 })
36 }
37
38 /// Check if labeler is fully configured.
39 pub fn labeler_enabled(&self) -> bool {
40 self.database_url.is_some()
41 && self.labeler_did.is_some()
42 && self.labeler_signing_key.is_some()
43 }
44}