refactor(auth): move auth_issue_message to resolve

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Bryan Helmkamp 2026-04-23 21:03:05 -04:00
parent 0ffb4b0461
commit 65533f486b
No known key found for this signature in database
3 changed files with 33 additions and 41 deletions

View file

@ -15,42 +15,3 @@ pub trait CredentialSource: Send + Sync {
async fn configured_providers(&self) -> Vec<Provider>;
}
#[must_use]
pub fn auth_issue_message(provider: Provider, err: &ResolveError) -> String {
match err {
ResolveError::NotConfigured(_) => {
format!("{} is not configured", provider.display_name())
}
ResolveError::RefreshFailed { source, .. } => format!(
"{} requires re-authentication: {}",
provider.display_name(),
source
),
ResolveError::RefreshTokenMissing(_) => format!(
"{} requires re-authentication: refresh token missing",
provider.display_name()
),
}
}
#[cfg(test)]
mod tests {
use fabro_model::Provider;
use super::auth_issue_message;
use crate::ResolveError;
#[test]
fn auth_issue_message_formats_refresh_token_missing() {
let message = auth_issue_message(
Provider::OpenAi,
&ResolveError::RefreshTokenMissing(Provider::OpenAi),
);
assert_eq!(
message,
"OpenAI requires re-authentication: refresh token missing"
);
}
}

View file

@ -15,12 +15,12 @@ pub use credential::{
ApiKeyHeader, AuthCredential, AuthDetails, OAuthConfig, OAuthTokens, credential_id_for,
parse_credential_secret,
};
pub use credential_source::{CredentialSource, ResolvedCredentials, auth_issue_message};
pub use credential_source::{CredentialSource, ResolvedCredentials};
pub use env_source::EnvCredentialSource;
pub use refresh::refresh_oauth_credential;
pub use resolve::{
ApiCredential, CliAgentKind, CliCredential, CredentialResolver, CredentialUsage, EnvLookup,
ResolveError, ResolvedCredential, configured_providers_from_process_env,
ResolveError, ResolvedCredential, auth_issue_message, configured_providers_from_process_env,
};
pub use strategy::{
AuthMethod, AuthStrategy, CODEX_AUTH_URL, CODEX_CLIENT_ID, CODEX_TOKEN_URL, codex_oauth_config,

View file

@ -63,6 +63,24 @@ pub enum ResolveError {
RefreshTokenMissing(Provider),
}
#[must_use]
pub fn auth_issue_message(provider: Provider, err: &ResolveError) -> String {
match err {
ResolveError::NotConfigured(_) => {
format!("{} is not configured", provider.display_name())
}
ResolveError::RefreshFailed { source, .. } => format!(
"{} requires re-authentication: {}",
provider.display_name(),
source
),
ResolveError::RefreshTokenMissing(_) => format!(
"{} requires re-authentication: refresh token missing",
provider.display_name()
),
}
}
#[derive(Clone)]
pub struct CredentialResolver {
vault: Arc<AsyncRwLock<Vault>>,
@ -817,6 +835,19 @@ mod tests {
));
}
#[test]
fn auth_issue_message_formats_refresh_token_missing() {
let message = auth_issue_message(
Provider::OpenAi,
&ResolveError::RefreshTokenMissing(Provider::OpenAi),
);
assert_eq!(
message,
"OpenAI requires re-authentication: refresh token missing"
);
}
#[test]
fn api_credential_debug_redacts_secret_material() {
let credential = ApiCredential {