1use std::env;
2use std::path::Path;
3
4use super::types::AuthContext;
5
6pub 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}