Trait mas_storage::oauth2::OAuth2ClientRepository

source ·
pub trait OAuth2ClientRepository: Send + Sync {
    type Error;

    // Required methods
    fn lookup<'life0, 'async_trait>(
        &'life0 mut self,
        id: Ulid,
    ) -> Pin<Box<dyn Future<Output = Result<Option<Client>, Self::Error>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait;
    fn load_batch<'life0, 'async_trait>(
        &'life0 mut self,
        ids: BTreeSet<Ulid>,
    ) -> Pin<Box<dyn Future<Output = Result<BTreeMap<Ulid, Client>, Self::Error>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait;
    fn add<'life0, 'life1, 'life2, 'async_trait>(
        &'life0 mut self,
        rng: &'life1 mut (dyn RngCore + Send),
        clock: &'life2 dyn Clock,
        redirect_uris: Vec<Url>,
        encrypted_client_secret: Option<String>,
        application_type: Option<ApplicationType>,
        grant_types: Vec<GrantType>,
        contacts: Vec<String>,
        client_name: Option<String>,
        logo_uri: Option<Url>,
        client_uri: Option<Url>,
        policy_uri: Option<Url>,
        tos_uri: Option<Url>,
        jwks_uri: Option<Url>,
        jwks: Option<PublicJsonWebKeySet>,
        id_token_signed_response_alg: Option<JsonWebSignatureAlg>,
        userinfo_signed_response_alg: Option<JsonWebSignatureAlg>,
        token_endpoint_auth_method: Option<OAuthClientAuthenticationMethod>,
        token_endpoint_auth_signing_alg: Option<JsonWebSignatureAlg>,
        initiate_login_uri: Option<Url>,
    ) -> Pin<Box<dyn Future<Output = Result<Client, Self::Error>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait,
             'life2: 'async_trait;
    fn upsert_static<'life0, 'async_trait>(
        &'life0 mut self,
        client_id: Ulid,
        client_auth_method: OAuthClientAuthenticationMethod,
        encrypted_client_secret: Option<String>,
        jwks: Option<PublicJsonWebKeySet>,
        jwks_uri: Option<Url>,
        redirect_uris: Vec<Url>,
    ) -> Pin<Box<dyn Future<Output = Result<Client, Self::Error>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait;
    fn all_static<'life0, 'async_trait>(
        &'life0 mut self,
    ) -> Pin<Box<dyn Future<Output = Result<Vec<Client>, Self::Error>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait;
    fn get_consent_for_user<'life0, 'life1, 'life2, 'async_trait>(
        &'life0 mut self,
        client: &'life1 Client,
        user: &'life2 User,
    ) -> Pin<Box<dyn Future<Output = Result<Scope, Self::Error>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait,
             'life2: 'async_trait;
    fn give_consent_for_user<'life0, 'life1, 'life2, 'life3, 'life4, 'life5, 'async_trait>(
        &'life0 mut self,
        rng: &'life1 mut (dyn RngCore + Send),
        clock: &'life2 dyn Clock,
        client: &'life3 Client,
        user: &'life4 User,
        scope: &'life5 Scope,
    ) -> Pin<Box<dyn Future<Output = Result<(), Self::Error>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait,
             'life2: 'async_trait,
             'life3: 'async_trait,
             'life4: 'async_trait,
             'life5: 'async_trait;
    fn delete_by_id<'life0, 'async_trait>(
        &'life0 mut self,
        id: Ulid,
    ) -> Pin<Box<dyn Future<Output = Result<(), Self::Error>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait;

    // Provided methods
    fn find_by_client_id<'life0, 'life1, 'async_trait>(
        &'life0 mut self,
        client_id: &'life1 str,
    ) -> Pin<Box<dyn Future<Output = Result<Option<Client>, Self::Error>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait { ... }
    fn delete<'life0, 'async_trait>(
        &'life0 mut self,
        client: Client,
    ) -> Pin<Box<dyn Future<Output = Result<(), Self::Error>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait { ... }
}
Expand description

An OAuth2ClientRepository helps interacting with [Client] saved in the storage backend

Required Associated Types§

source

type Error

The error type returned by the repository

Required Methods§

source

fn lookup<'life0, 'async_trait>( &'life0 mut self, id: Ulid, ) -> Pin<Box<dyn Future<Output = Result<Option<Client>, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Lookup an OAuth2 client by its ID

Returns None if the client does not exist

§Parameters
  • id: The ID of the client to lookup
§Errors

Returns Self::Error if the underlying repository fails

source

fn load_batch<'life0, 'async_trait>( &'life0 mut self, ids: BTreeSet<Ulid>, ) -> Pin<Box<dyn Future<Output = Result<BTreeMap<Ulid, Client>, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Load a batch of OAuth2 clients by their IDs

Returns a map of client IDs to clients. If a client does not exist, it is not present in the map.

§Parameters
  • ids: The IDs of the clients to load
§Errors

Returns Self::Error if the underlying repository fails

source

fn add<'life0, 'life1, 'life2, 'async_trait>( &'life0 mut self, rng: &'life1 mut (dyn RngCore + Send), clock: &'life2 dyn Clock, redirect_uris: Vec<Url>, encrypted_client_secret: Option<String>, application_type: Option<ApplicationType>, grant_types: Vec<GrantType>, contacts: Vec<String>, client_name: Option<String>, logo_uri: Option<Url>, client_uri: Option<Url>, policy_uri: Option<Url>, tos_uri: Option<Url>, jwks_uri: Option<Url>, jwks: Option<PublicJsonWebKeySet>, id_token_signed_response_alg: Option<JsonWebSignatureAlg>, userinfo_signed_response_alg: Option<JsonWebSignatureAlg>, token_endpoint_auth_method: Option<OAuthClientAuthenticationMethod>, token_endpoint_auth_signing_alg: Option<JsonWebSignatureAlg>, initiate_login_uri: Option<Url>, ) -> Pin<Box<dyn Future<Output = Result<Client, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Add a new OAuth2 client

Returns the client that was added

§Parameters
  • rng: The random number generator to use
  • clock: The clock used to generate timestamps
  • redirect_uris: The list of redirect URIs used by this client
  • encrypted_client_secret: The encrypted client secret, if any
  • application_type: The application type of this client
  • grant_types: The list of grant types this client can use
  • contacts: The list of contacts for this client
  • client_name: The human-readable name of this client, if given
  • logo_uri: The URI of the logo of this client, if given
  • client_uri: The URI of a website of this client, if given
  • policy_uri: The URI of the privacy policy of this client, if given
  • tos_uri: The URI of the terms of service of this client, if given
  • jwks_uri: The URI of the JWKS of this client, if given
  • jwks: The JWKS of this client, if given
  • id_token_signed_response_alg: The algorithm used to sign the ID token
  • userinfo_signed_response_alg: The algorithm used to sign the user info. If none, the user info endpoint will not sign the response
  • token_endpoint_auth_method: The authentication method used by this client when calling the token endpoint
  • token_endpoint_auth_signing_alg: The algorithm used to sign the JWT when using the client_secret_jwt or private_key_jwt authentication methods
  • initiate_login_uri: The URI used to initiate a login, if given
§Errors

Returns Self::Error if the underlying repository fails

source

fn upsert_static<'life0, 'async_trait>( &'life0 mut self, client_id: Ulid, client_auth_method: OAuthClientAuthenticationMethod, encrypted_client_secret: Option<String>, jwks: Option<PublicJsonWebKeySet>, jwks_uri: Option<Url>, redirect_uris: Vec<Url>, ) -> Pin<Box<dyn Future<Output = Result<Client, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Add or replace a static client

Returns the client that was added or replaced

§Parameters
  • client_id: The client ID
  • client_auth_method: The authentication method this client uses
  • encrypted_client_secret: The encrypted client secret, if any
  • jwks: The client JWKS, if any
  • jwks_uri: The client JWKS URI, if any
  • redirect_uris: The list of redirect URIs used by this client
§Errors

Returns Self::Error if the underlying repository fails

source

fn all_static<'life0, 'async_trait>( &'life0 mut self, ) -> Pin<Box<dyn Future<Output = Result<Vec<Client>, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

List all static clients

§Errors

Returns Self::Error if the underlying repository fails

Get the list of scopes that the user has given consent for the given client

§Parameters
  • client: The client to get the consent for
  • user: The user to get the consent for
§Errors

Returns Self::Error if the underlying repository fails

Give consent for a set of scopes for the given client and user

§Parameters
  • rng: The random number generator to use
  • clock: The clock used to generate timestamps
  • client: The client to give the consent for
  • user: The user to give the consent for
  • scope: The scope to give consent for
§Errors

Returns Self::Error if the underlying repository fails

source

fn delete_by_id<'life0, 'async_trait>( &'life0 mut self, id: Ulid, ) -> Pin<Box<dyn Future<Output = Result<(), Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Delete a client by ID

§Parameters
  • id: The ID of the client to delete
§Errors

Returns Self::Error if the underlying repository fails, or if the client does not exist

Provided Methods§

source

fn find_by_client_id<'life0, 'life1, 'async_trait>( &'life0 mut self, client_id: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<Option<Client>, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Find an OAuth2 client by its client ID

source

fn delete<'life0, 'async_trait>( &'life0 mut self, client: Client, ) -> Pin<Box<dyn Future<Output = Result<(), Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Delete a client

§Parameters
  • client: The client to delete
§Errors

Returns Self::Error if the underlying repository fails, or if the client does not exist

Implementations on Foreign Types§

source§

impl<R> OAuth2ClientRepository for Box<R>

§

type Error = <R as OAuth2ClientRepository>::Error

source§

fn lookup<'life0, 'async_trait>( &'life0 mut self, id: Ulid, ) -> Pin<Box<dyn Future<Output = Result<Option<Client>, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

source§

fn load_batch<'life0, 'async_trait>( &'life0 mut self, ids: BTreeSet<Ulid>, ) -> Pin<Box<dyn Future<Output = Result<BTreeMap<Ulid, Client>, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

source§

fn add<'life0, 'life1, 'life2, 'async_trait>( &'life0 mut self, rng: &'life1 mut (dyn RngCore + Send), clock: &'life2 dyn Clock, redirect_uris: Vec<Url>, encrypted_client_secret: Option<String>, application_type: Option<ApplicationType>, grant_types: Vec<GrantType>, contacts: Vec<String>, client_name: Option<String>, logo_uri: Option<Url>, client_uri: Option<Url>, policy_uri: Option<Url>, tos_uri: Option<Url>, jwks_uri: Option<Url>, jwks: Option<PublicJsonWebKeySet>, id_token_signed_response_alg: Option<JsonWebSignatureAlg>, userinfo_signed_response_alg: Option<JsonWebSignatureAlg>, token_endpoint_auth_method: Option<OAuthClientAuthenticationMethod>, token_endpoint_auth_signing_alg: Option<JsonWebSignatureAlg>, initiate_login_uri: Option<Url>, ) -> Pin<Box<dyn Future<Output = Result<Client, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

source§

fn upsert_static<'life0, 'async_trait>( &'life0 mut self, client_id: Ulid, client_auth_method: OAuthClientAuthenticationMethod, encrypted_client_secret: Option<String>, jwks: Option<PublicJsonWebKeySet>, jwks_uri: Option<Url>, redirect_uris: Vec<Url>, ) -> Pin<Box<dyn Future<Output = Result<Client, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

source§

fn all_static<'life0, 'async_trait>( &'life0 mut self, ) -> Pin<Box<dyn Future<Output = Result<Vec<Client>, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

source§

fn delete<'life0, 'async_trait>( &'life0 mut self, client: Client, ) -> Pin<Box<dyn Future<Output = Result<(), Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

source§

fn delete_by_id<'life0, 'async_trait>( &'life0 mut self, id: Ulid, ) -> Pin<Box<dyn Future<Output = Result<(), Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Implementors§

source§

impl<R, F, E> OAuth2ClientRepository for MapErr<R, F>

§

type Error = E