Skip to main content

CredentialStore

Struct CredentialStore 

Source
pub struct CredentialStore { /* private fields */ }
Expand description

Thread-safe credential storage for HTTP authentication.

Stores username/password pairs indexed by domain (hostname or URL pattern). Provides concurrent access through RwLock, allowing multiple readers while ensuring exclusive access during writes.

§Security Guarantees

  • All passwords are stored as Vec<u8> with automatic zeroization on drop
  • When entries are removed or the store is cleared, passwords are immediately zeroed
  • Debug output masks passwords to prevent accidental logging of secrets

Implementations§

Source§

impl CredentialStore

Source

pub fn new() -> Self

Creates a new empty credential store.

§Example
use aria2_core::auth::credential_store::CredentialStore;

let store = CredentialStore::new();
assert_eq!(store.count(), 0);
Source

pub fn store(&self, domain: &str, username: &str, password: &[u8])

Stores credentials for a domain.

If credentials already exist for the given domain, they will be replaced and the old password will be zeroized before being dropped.

§Arguments
  • domain - Domain or hostname (e.g., “example.com”)
  • username - Username for authentication
  • password - Password as byte slice (will be copied and stored securely)
§Example
use aria2_core::auth::credential_store::{CredentialStore, PasswordEntry};

let mut store = CredentialStore::new();
store.store("api.example.com", "admin", b"secure-password-123");
Source

pub fn get(&self, domain: &str) -> Option<PasswordEntry>

Retrieves credentials for a domain.

Returns a clone of the PasswordEntry if found, or None if no credentials exist for the specified domain.

§Arguments
  • domain - Domain or hostname to look up
§Returns
  • Some(PasswordEntry) if credentials exist
  • None if no credentials found
§Security Note

The returned PasswordEntry contains the actual password. Handle it carefully and allow it to be dropped naturally so the password gets zeroized automatically.

§Example
use aria2_core::auth::credential_store::{CredentialStore, PasswordEntry};

let store = CredentialStore::new();
store.store("example.com", "user", b"pass");
if let Some(creds) = store.get("example.com") {
    println!("Username: {}", creds.username);
} // Password is zeroized when creds goes out of scope
Source

pub fn remove(&self, domain: &str) -> Option<PasswordEntry>

Removes credentials for a domain.

The removed entry’s password will be zeroized before this method returns.

§Arguments
  • domain - Domain or hostname to remove credentials for
§Returns
  • Some(PasswordEntry) that was removed
  • None if no credentials existed for the domain
§Example
use aria2_core::auth::credential_store::{CredentialStore, PasswordEntry};

let mut store = CredentialStore::new();
store.store("old-server.com", "admin", b"pass");
if let Some(removed) = store.remove("old-server.com") {
    println!("Removed credentials for user: {}", removed.username);
}
Source

pub fn clear(&self)

Clears all stored credentials.

All passwords in the store will be zeroized before this method returns. After calling this method, the store will be empty.

§Example
use aria2_core::auth::credential_store::CredentialStore;

let mut store = CredentialStore::new();
store.store("example.com", "user", b"pass");
store.clear(); // All passwords securely erased
assert_eq!(store.count(), 0);
Source

pub fn count(&self) -> usize

Returns the number of stored credential entries.

Source

pub fn has_credentials(&self, domain: &str) -> bool

Checks if credentials exist for a domain.

§Arguments
  • domain - Domain or hostname to check
§Returns

true if credentials exist, false otherwise

Source

pub fn list_domains(&self) -> Vec<String>

Lists all domains that have stored credentials.

§Returns

A vector of domain strings (not the actual credentials)

§Note

This does not expose any sensitive data, only domain names.

Trait Implementations§

Source§

impl Debug for CredentialStore

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for CredentialStore

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more