pub mod credentials;
pub mod device_flow;
pub mod domain_key;
#[allow(dead_code)]
pub enum TokenSource {
Flag,
Env,
Credentials,
}
pub struct ResolvedToken {
pub token: String,
#[allow(dead_code)]
pub source: TokenSource,
}
pub fn resolve_token(
registry_host: &str,
flag_token: Option<&str>,
) -> anyhow::Result<Option<ResolvedToken>> {
if let Some(token) = flag_token {
return Ok(Some(ResolvedToken {
token: token.to_string(),
source: TokenSource::Flag,
}));
}
if let Ok(token) = std::env::var("MEMSTEAD_TOKEN")
&& !token.is_empty()
{
return Ok(Some(ResolvedToken {
token,
source: TokenSource::Env,
}));
}
if let Some(entry) = credentials::load_for(registry_host)? {
return Ok(Some(ResolvedToken {
token: entry.token,
source: TokenSource::Credentials,
}));
}
Ok(None)
}