Skip to main content

elph_ai/auth/
context.rs

1use std::env;
2use std::path::Path;
3
4use super::types::AuthContext;
5
6/// Default auth context: environment variables and filesystem checks.
7pub struct DefaultAuthContext;
8
9impl DefaultAuthContext {
10    pub fn new() -> Self {
11        Self
12    }
13}
14
15impl Default for DefaultAuthContext {
16    fn default() -> Self {
17        Self::new()
18    }
19}
20
21#[async_trait::async_trait]
22impl AuthContext for DefaultAuthContext {
23    async fn env(&self, name: &str) -> Option<String> {
24        env::var(name).ok().filter(|v| !v.trim().is_empty())
25    }
26
27    async fn file_exists(&self, path: &str) -> bool {
28        let home = env::var_os("HOME").map(std::path::PathBuf::from);
29        let resolved = if let Some(rest) = path.strip_prefix("~/") {
30            home.map(|h| h.join(rest))
31                .unwrap_or_else(|| Path::new(path).to_path_buf())
32        } else if path == "~" {
33            home.unwrap_or_else(|| Path::new(path).to_path_buf())
34        } else {
35            Path::new(path).to_path_buf()
36        };
37        resolved.exists()
38    }
39}
40
41pub fn default_auth_context() -> DefaultAuthContext {
42    DefaultAuthContext::new()
43}