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

source§

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