containerregistry_auth/lib.rs
1//! Docker config and credential helper integration.
2//!
3//! This crate provides functionality for resolving container registry
4//! credentials from Docker config files and credential helpers.
5//!
6//! # Overview
7//!
8//! The main types in this crate are:
9//! - [`AuthResolver`] - Resolves credentials for a registry
10//! - [`Credential`] - A credential (anonymous, basic, bearer, etc.)
11//! - [`DockerConfig`] - Parsed Docker config file
12//!
13//! # Example
14//!
15//! ```no_run
16//! use containerregistry_auth::{AuthResolver, Credential};
17//!
18//! // Create a resolver that loads from default Docker config
19//! let resolver = AuthResolver::new();
20//!
21//! // Resolve credentials for a registry
22//! let cred = resolver.resolve("gcr.io")?;
23//!
24//! // Use the credential
25//! if let Some(header) = cred.authorization_header() {
26//! println!("Authorization: {}", header);
27//! }
28//! # Ok::<(), containerregistry_auth::Error>(())
29//! ```
30//!
31//! # Resolution Order
32//!
33//! The resolver checks multiple sources in order of precedence:
34//! 1. Explicit credentials (if set via [`AuthResolver::with_explicit`])
35//! 2. Docker config `auths` section (base64-encoded or plaintext)
36//! 3. Registry-specific credential helper (`credHelpers`)
37//! 4. Default credential store (`credsStore`)
38//! 5. Anonymous access (fallback)
39
40mod config;
41mod credential;
42mod error;
43mod helper;
44mod resolver;
45
46pub use config::{AuthEntry, DockerConfig};
47pub use credential::{Credential, HelperCredential};
48pub use error::Error;
49pub use helper::CredentialHelper;
50pub use resolver::AuthResolver;
51
52/// Result type for auth operations.
53pub type Result<T> = std::result::Result<T, Error>;
54
55#[cfg(test)]
56pub(crate) mod test_util {
57 use std::sync::Mutex;
58
59 pub static ENV_LOCK: Mutex<()> = Mutex::new(());
60}