Skip to main content

OAuth2RefreshProvider

Struct OAuth2RefreshProvider 

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

OAuth2 refresh_token grant provider with refresh-token rotation capture.

When a durable StateStore is attached (via persist: config, #499), the rotated refresh_token is written back after every refresh and re-read on startup — so a second scheduled run authenticates with the current token instead of the now-invalidated config seed.

Implementations§

Source§

impl OAuth2RefreshProvider

Source

pub fn from_config(config: &Value) -> Result<Self, FaucetError>

Build from a config object with token_url, client_id, client_secret, refresh_token, and optional scope / expiry_ratio / persist.

Source

pub fn with_store( self, store: Arc<dyn StateStore>, key: impl Into<String>, ) -> Self

Attach a durable store for the rotated refresh token (used by tests and library callers that supply their own StateStore). key must be stable across runs for the same logical provider.

Trait Implementations§

Source§

impl AuthProvider for OAuth2RefreshProvider

Source§

fn credential<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<Credential, FaucetError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Return a currently-valid credential, refreshing if needed.
Source§

fn invalidate<'life0, 'life1, 'async_trait>( &'life0 self, stale: &'life1 Credential, ) -> Pin<Box<dyn Future<Output = Result<Credential, FaucetError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Force a refresh iff the cached credential still equals stale (compare-and-swap). Multiple connectors that hit a 401 with the same token collapse into a single refresh; callers holding an already-rotated token get the new one without triggering another fetch. Read more
Source§

fn provider_name(&self) -> &'static str

Stable, non-empty name for diagnostics and metrics.
Source§

fn sign_request<'life0, 'life1, 'life2, 'life3, 'async_trait>( &'life0 self, _method: &'life1 str, _url: &'life2 str, _query: &'life3 BTreeMap<String, String>, ) -> Pin<Box<dyn Future<Output = Result<Option<Credential>, FaucetError>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, 'life3: 'async_trait, Self: 'async_trait,

Per-request signing hook (OAuth1 and similar, #496). Read more
Source§

fn request_auth<'life0, 'life1, 'life2, 'life3, 'async_trait>( &'life0 self, _method: &'life1 str, _url: &'life2 str, _query: &'life3 BTreeMap<String, String>, ) -> Pin<Box<dyn Future<Output = Result<RequestAuth, FaucetError>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, 'life3: 'async_trait, Self: 'async_trait,

Richer per-request auth for multi-step flows (#511): credential placements across header / query / cookie / body plus an optional dynamic base-URL override. Read more
Source§

fn reauth_statuses(&self) -> &[u16]

HTTP status codes on which the connector should force a re-auth (via invalidate) and retry the request once. Read more
Source§

impl Debug for OAuth2RefreshProvider

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> 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 = !

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<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