use crate::config::AkeylessMcpConfig;
use crate::error::{AkeylessMcpError, Result};
use std::path::PathBuf;
pub fn resolve_api_key(explicit: Option<&str>, config: &AkeylessMcpConfig) -> Result<String> {
if let Some(key) = explicit {
return Ok(key.to_string());
}
if let Ok(key) = std::env::var("AKEYLESS_MCP_API_KEY") {
if !key.is_empty() {
return Ok(key);
}
}
let path = expand_tilde(&config.api_key_file);
match std::fs::read_to_string(&path) {
Ok(content) => {
let key = content.trim().to_string();
if key.is_empty() {
Err(AkeylessMcpError::NoApiKey { path })
} else {
Ok(key)
}
}
Err(_) => Err(AkeylessMcpError::NoApiKey { path }),
}
}
fn expand_tilde(path: &PathBuf) -> PathBuf {
let s = path.to_string_lossy();
if let Some(rest) = s.strip_prefix("~/") {
if let Ok(home) = std::env::var("HOME") {
return PathBuf::from(home).join(rest);
}
}
path.clone()
}