1use std::sync::{Arc, LazyLock};
2
3use tracing::trace;
4
5use uv_redacted::DisplaySafeUrl;
6
7use crate::credentials::Authentication;
8pub use access_token::AccessToken;
9use cache::CredentialsCache;
10pub use credentials::{Credentials, Username};
11pub use index::{AuthPolicy, Index, Indexes};
12pub use keyring::KeyringProvider;
13pub use middleware::AuthMiddleware;
14pub use pyx::{
15 DEFAULT_TOLERANCE_SECS, PyxJwt, PyxOAuthTokens, PyxTokenStore, PyxTokens, TokenStoreError,
16};
17pub use realm::{Realm, RealmRef};
18pub use service::{Service, ServiceParseError};
19pub use store::{AuthBackend, AuthScheme, TextCredentialStore, TomlCredentialError};
20
21mod access_token;
22mod cache;
23mod credentials;
24mod index;
25mod keyring;
26mod middleware;
27mod providers;
28mod pyx;
29mod realm;
30mod service;
31mod store;
32
33pub(crate) static CREDENTIALS_CACHE: LazyLock<CredentialsCache> =
39 LazyLock::new(CredentialsCache::default);
40
41pub fn store_credentials_from_url(url: &DisplaySafeUrl) -> bool {
45 if let Some(credentials) = Credentials::from_url(url) {
46 trace!("Caching credentials for {url}");
47 CREDENTIALS_CACHE.insert(url, Arc::new(Authentication::from(credentials)));
48 true
49 } else {
50 false
51 }
52}
53
54pub fn store_credentials(url: &DisplaySafeUrl, credentials: Credentials) {
58 trace!("Caching credentials for {url}");
59 CREDENTIALS_CACHE.insert(url, Arc::new(Authentication::from(credentials)));
60}