Skip to main content

KeyManager

Struct KeyManager 

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

API Key Manager for handling all key operations

Implementations§

Source§

impl KeyManager

Source

pub fn new<R: KeyRepository + 'static>(repository: R) -> Self

Create a new KeyManager with the given repository

Source

pub fn with_arc_repository(repository: Arc<dyn KeyRepository>) -> Self

Create a new KeyManager with an Arc repository

Source

pub fn with_hmac_secret(self, secret: Option<String>) -> Self

Set the HMAC secret for key hashing

Source

pub async fn generate_key( &self, config: CreateKeyConfig, ) -> Result<(Uuid, String)>

Generate a new API key

Returns a tuple of (key_id, raw_key). The raw_key should be shown to the user only once and never stored. Only the hash is stored.

Source

pub async fn validate_key(&self, raw_key: &str) -> Result<VerifyKeyResult>

Validate a raw API key

Returns verification result with key info if valid.

Source

pub async fn revoke_key(&self, key_id: Uuid) -> Result<()>

Revoke an API key

Source

pub async fn rotate_key(&self, key_id: Uuid) -> Result<(Uuid, String)>

Rotate an API key (generate new key, revoke old one)

Returns a tuple of (new_key_id, new_raw_key). The new_raw_key should be shown to the user only once.

Source

pub async fn update_key( &self, key_id: Uuid, config: UpdateKeyConfig, ) -> Result<KeyInfo>

Update an API key’s configuration

Source

pub async fn get_key(&self, key_id: Uuid) -> Result<Option<KeyInfo>>

Get key information by ID

Source

pub async fn get_usage_stats(&self, key_id: Uuid) -> Result<KeyUsageStats>

Get key usage statistics

Source

pub async fn record_usage( &self, key_id: Uuid, tokens: u64, cost: f64, ) -> Result<()>

Record usage for a key

Source

pub async fn record_usage_record( &self, key_id: Uuid, record: UsageRecord, ) -> Result<()>

Record usage for a key from an explicit usage record. On Tokio, a write accepted on the first poll survives cancellation of its waiter. Other executors directly await the repository under the same capacity bound, preserving their existing execution and cancellation behavior. Capacity exhaustion and repository failures remain best-effort write errors; runtime shutdown does not provide durable retry.

Source

pub async fn list_user_keys(&self, user_id: Uuid) -> Result<Vec<KeyInfo>>

List keys for a user

Source

pub async fn list_team_keys(&self, team_id: Uuid) -> Result<Vec<KeyInfo>>

List keys for a team

Source

pub async fn list_keys( &self, status: Option<KeyStatus>, limit: Option<usize>, offset: Option<usize>, ) -> Result<Vec<KeyInfo>>

List all keys with optional filtering

Source

pub async fn delete_key(&self, key_id: Uuid) -> Result<()>

Delete a key permanently (use with caution)

Source

pub async fn cleanup_expired_keys(&self) -> Result<u64>

Cleanup expired keys

Source

pub async fn count_keys(&self, status: Option<KeyStatus>) -> Result<u64>

Count keys

Trait Implementations§

Source§

impl Clone for KeyManager

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for KeyManager

Source§

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

Formats the value using the given formatter. 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> BudgetAwareRouting for T

Source§

fn filter_by_budget( &self, providers: Vec<String>, budget_router: &BudgetAwareRouter, ) -> Vec<String>

Filter providers based on budget availability
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<Unshared, Shared> IntoShared<Shared> for Unshared
where Shared: FromUnshared<Unshared>,

Source§

fn into_shared(self) -> Shared

Creates a shared type from an unshared type.
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
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> SharedResource for T
where T: Send + Sync + 'static,

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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