]> Humopery - waterslager.git/commitdiff
fix env var handling
authorfozzie <fozzie@humopery.space>
Sat, 19 Jul 2025 22:10:56 +0000 (17:10 -0500)
committerfozzie <fozzie@humopery.space>
Sat, 19 Jul 2025 22:10:56 +0000 (17:10 -0500)
src/main.rs

index 87d8f7e23d5c8080067366c72c32f08d3cd23f85..acc927666b9a93f99eef3d0ff0219c6f86ef709f 100644 (file)
@@ -4,7 +4,7 @@ mod verify;
 use axum::{routing::{get,post}, Router};
 use axum::serve;
 use serde::Deserialize;
-use std::{collections::HashMap, env, fs::{read_dir, File}};
+use std::{collections::HashMap, fs::{read_dir, File}};
 use std::net::SocketAddr;
 use tokio::net::TcpListener;
 
@@ -39,21 +39,26 @@ async fn load_certs_from_fs() -> Result<CertMap,Box<dyn std::error::Error>> {
 #[tokio::main]
 async fn main() -> Result<(),Box<dyn std::error::Error>> {
     
-    // set defaults
-    unsafe {
-       env::set_var("BIND_HOST","127.0.0.1");
-       env::set_var("BIND_PORT","3000");
-       env::set_var("APP_ROOT", "/");
-    }
-    // ... then override from .env, ignoring any error (file may not be there)
-    let _ = dotenvy::dotenv_override();
+    // set config values. real env vars will take precedence over vars in .env
+    let _ = dotenvy::dotenv();
+    let bind_host = match dotenvy::var("BIND_HOST") {
+       Ok(val) => val,
+       Err(_) => "127.0.0.1".to_string()
+    };
+    let bind_port = match dotenvy::var("BIND_PORT") {
+       Ok(val) => val,
+       Err(_) => "3000".to_string()
+    };
+    let app_root = match dotenvy::var("APP_ROOT") {
+       Ok(val) => val,
+       Err(_) => "/".to_string()
+    };
 
     let certs = load_certs_from_fs().await.unwrap();
 
-    let app_root = env::var("APP_ROOT")?;
     let app_state = AppState{
        certs,
-       app_root: app_root.clone(),
+       app_root: app_root.to_string()
     };
 
     let all_routes = Router::new()
@@ -62,8 +67,7 @@ async fn main() -> Result<(),Box<dyn std::error::Error>> {
        .with_state(app_state);
 
     let addr = SocketAddr::new(
-       env::var("BIND_HOST")?.parse()?,
-       env::var("BIND_PORT")?.parse()?);
+       bind_host.parse()?, bind_port.parse()?);
     let listener = TcpListener::bind(&addr).await.unwrap();
     serve(listener, all_routes.into_make_service())
         .await