use aletheiadb::http::{CorsConfig, ServerConfig, run_server};
use std::env;
use std::path::PathBuf;
fn parse_port() -> u16 {
match env::var("ALETHEIADB_PORT") {
Ok(port_str) => match port_str.parse::<u16>() {
Ok(port) => port,
Err(e) => {
eprintln!(
"WARNING: Invalid ALETHEIADB_PORT '{}': {}. Using default port 1963.",
port_str, e
);
1963
}
},
Err(_) => 1963,
}
}
fn parse_host() -> String {
env::var("ALETHEIADB_HOST").unwrap_or_else(|_| "0.0.0.0".to_string())
}
fn parse_cors_config() -> CorsConfig {
let is_permissive = env::var("ALETHEIADB_CORS_PERMISSIVE")
.map(|v| v.to_lowercase() == "true" || v == "1")
.unwrap_or(false);
if is_permissive {
return CorsConfig::permissive();
}
match env::var("ALETHEIADB_CORS_ORIGINS") {
Ok(origins_str) => {
let mut config = CorsConfig::restrictive();
for origin in origins_str
.split(',')
.map(str::trim)
.filter(|s| !s.is_empty())
{
config = config.allow_origin(origin);
}
config
}
Err(_) => CorsConfig::restrictive(),
}
}
fn parse_data_dir() -> Option<PathBuf> {
env::var("ALETHEIADB_DATA_DIR")
.ok()
.filter(|s| !s.trim().is_empty())
.map(PathBuf::from)
}
#[autumn_web::main]
async fn main() {
let port = parse_port();
let host = parse_host();
let cors = parse_cors_config();
let data_dir = parse_data_dir();
let mut builder = ServerConfig::builder().port(port).host(host).cors(cors);
if let Some(path) = data_dir {
builder = builder.data_dir(path);
}
let config = builder.build();
if let Err(e) = run_server(config).await {
eprintln!("aletheia-server failed: {e}");
std::process::exit(1);
}
}