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 find_by_metadata_digest<'life0, 'life1, 'async_trait>(
&'life0 mut self,
digest: &'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 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>,
metadata_digest: Option<String>,
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_name: Option<String>,
client_uri: Option<Url>,
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 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;
fn list<'life0, 'life1, 'async_trait>(
&'life0 mut self,
filter: OAuth2ClientFilter<'life1>,
pagination: Pagination,
) -> Pin<Box<dyn Future<Output = Result<Page<Client>, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn count<'life0, 'life1, 'async_trait>(
&'life0 mut self,
filter: OAuth2ClientFilter<'life1>,
) -> Pin<Box<dyn Future<Output = Result<usize, Self::Error>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: '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§
Required Methods§
Sourcefn 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 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 OAuth 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
Sourcefn find_by_metadata_digest<'life0, 'life1, 'async_trait>(
&'life0 mut self,
digest: &'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 find_by_metadata_digest<'life0, 'life1, 'async_trait>(
&'life0 mut self,
digest: &'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 OAuth client by its metadata digest
Returns None if the client does not exist
§Parameters
digest: The metadata digest (SHA-256 hash encoded in hex) of the client to find
§Errors
Returns Self::Error if the underlying repository fails
Sourcefn 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 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 OAuth 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
Sourcefn add<'life0, 'life1, 'life2, 'async_trait>(
&'life0 mut self,
rng: &'life1 mut (dyn RngCore + Send),
clock: &'life2 dyn Clock,
redirect_uris: Vec<Url>,
metadata_digest: Option<String>,
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 add<'life0, 'life1, 'life2, 'async_trait>(
&'life0 mut self,
rng: &'life1 mut (dyn RngCore + Send),
clock: &'life2 dyn Clock,
redirect_uris: Vec<Url>,
metadata_digest: Option<String>,
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 OAuth client
Returns the client that was added
§Parameters
rng: The random number generator to useclock: The clock used to generate timestampsredirect_uris: The list of redirect URIs used by this clientmetadata_digest: The hash of the client metadata, if computedencrypted_client_secret: The encrypted client secret, if anyapplication_type: The application type of this clientgrant_types: The list of grant types this client can useclient_name: The human-readable name of this client, if givenlogo_uri: The URI of the logo of this client, if givenclient_uri: The URI of a website of this client, if givenpolicy_uri: The URI of the privacy policy of this client, if giventos_uri: The URI of the terms of service of this client, if givenjwks_uri: The URI of the JWKS of this client, if givenjwks: The JWKS of this client, if givenid_token_signed_response_alg: The algorithm used to sign the ID tokenuserinfo_signed_response_alg: The algorithm used to sign the user info. If none, the user info endpoint will not sign the responsetoken_endpoint_auth_method: The authentication method used by this client when calling the token endpointtoken_endpoint_auth_signing_alg: The algorithm used to sign the JWT when using theclient_secret_jwtorprivate_key_jwtauthentication methodsinitiate_login_uri: The URI used to initiate a login, if given
§Errors
Returns Self::Error if the underlying repository fails
Sourcefn upsert_static<'life0, 'async_trait>(
&'life0 mut self,
client_id: Ulid,
client_name: Option<String>,
client_uri: Option<Url>,
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 upsert_static<'life0, 'async_trait>(
&'life0 mut self,
client_id: Ulid,
client_name: Option<String>,
client_uri: Option<Url>,
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 IDclient_name: Name of theOAuth2clientclient_uri: User-facing information about the clientclient_auth_method: The authentication method this client usesencrypted_client_secret: The encrypted client secret, if anyjwks: The client JWKS, if anyjwks_uri: The client JWKS URI, if anyredirect_uris: The list of redirect URIs used by this client
§Errors
Returns Self::Error if the underlying repository fails
Sourcefn 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 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,
Sourcefn 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,
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
Sourcefn list<'life0, 'life1, 'async_trait>(
&'life0 mut self,
filter: OAuth2ClientFilter<'life1>,
pagination: Pagination,
) -> Pin<Box<dyn Future<Output = Result<Page<Client>, Self::Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn list<'life0, 'life1, 'async_trait>(
&'life0 mut self,
filter: OAuth2ClientFilter<'life1>,
pagination: Pagination,
) -> Pin<Box<dyn Future<Output = Result<Page<Client>, Self::Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
List Client with the given filter and pagination
§Parameters
filter: The filter parameterspagination: The pagination parameters
§Errors
Returns Self::Error if the underlying repository fails
Sourcefn count<'life0, 'life1, 'async_trait>(
&'life0 mut self,
filter: OAuth2ClientFilter<'life1>,
) -> Pin<Box<dyn Future<Output = Result<usize, Self::Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn count<'life0, 'life1, 'async_trait>(
&'life0 mut self,
filter: OAuth2ClientFilter<'life1>,
) -> Pin<Box<dyn Future<Output = Result<usize, Self::Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Count the Client with the given filter
§Parameters
filter: The filter parameters
§Errors
Returns Self::Error if the underlying repository fails
Provided Methods§
Sourcefn 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 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 OAuth client by its client ID
Sourcefn 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,
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
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".