pub trait AuthAdapter:
Debug
+ Send
+ Sync {
Show 56 methods
// Required methods
fn validate_access_token<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
tn_id: TnId,
id_tag: &'life1 str,
token: &'life2 str,
) -> Pin<Box<dyn Future<Output = ClResult<AuthCtx>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait;
fn read_id_tag<'life0, 'async_trait>(
&'life0 self,
tn_id: TnId,
) -> Pin<Box<dyn Future<Output = ClResult<Box<str>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn read_tn_id<'life0, 'life1, 'async_trait>(
&'life0 self,
id_tag: &'life1 str,
) -> Pin<Box<dyn Future<Output = ClResult<TnId>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn read_tenant<'life0, 'life1, 'async_trait>(
&'life0 self,
id_tag: &'life1 str,
) -> Pin<Box<dyn Future<Output = ClResult<AuthProfile>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn create_tenant_registration<'life0, 'life1, 'async_trait>(
&'life0 self,
email: &'life1 str,
) -> Pin<Box<dyn Future<Output = ClResult<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn create_tenant<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id_tag: &'life1 str,
data: CreateTenantData<'life2>,
) -> Pin<Box<dyn Future<Output = ClResult<TnId>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait;
fn delete_tenant<'life0, 'life1, 'async_trait>(
&'life0 self,
id_tag: &'life1 str,
) -> Pin<Box<dyn Future<Output = ClResult<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn list_tenants<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
opts: &'life1 ListTenantsOptions<'life2>,
) -> Pin<Box<dyn Future<Output = ClResult<Vec<TenantListItem>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait;
fn count_tenants<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
opts: &'life1 ListTenantsOptions<'life2>,
) -> Pin<Box<dyn Future<Output = ClResult<usize>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait;
fn create_tenant_login<'life0, 'life1, 'async_trait>(
&'life0 self,
id_tag: &'life1 str,
) -> Pin<Box<dyn Future<Output = ClResult<AuthLogin>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn check_tenant_password<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id_tag: &'life1 str,
password: &'life2 str,
) -> Pin<Box<dyn Future<Output = ClResult<AuthLogin>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait;
fn update_tenant_password<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id_tag: &'life1 str,
password: &'life2 str,
) -> Pin<Box<dyn Future<Output = ClResult<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait;
fn update_idp_api_key<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id_tag: &'life1 str,
api_key: &'life2 str,
) -> Pin<Box<dyn Future<Output = ClResult<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait;
fn create_cert<'life0, 'life1, 'async_trait>(
&'life0 self,
cert_data: &'life1 CertData,
) -> Pin<Box<dyn Future<Output = ClResult<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn read_cert_by_tn_id<'life0, 'async_trait>(
&'life0 self,
tn_id: TnId,
) -> Pin<Box<dyn Future<Output = ClResult<CertData>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn read_cert_by_id_tag<'life0, 'life1, 'async_trait>(
&'life0 self,
id_tag: &'life1 str,
) -> Pin<Box<dyn Future<Output = ClResult<CertData>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn read_cert_by_domain<'life0, 'life1, 'async_trait>(
&'life0 self,
domain: &'life1 str,
) -> Pin<Box<dyn Future<Output = ClResult<CertData>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn list_all_certs<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ClResult<Vec<CertData>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn list_tenants_needing_cert_renewal<'life0, 'async_trait>(
&'life0 self,
renewal_days: u32,
) -> Pin<Box<dyn Future<Output = ClResult<Vec<TenantCertRenewalRow>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn record_cert_renewal_failure<'life0, 'life1, 'async_trait>(
&'life0 self,
tn_id: TnId,
error: &'life1 str,
) -> Pin<Box<dyn Future<Output = ClResult<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn record_cert_renewal_success<'life0, 'async_trait>(
&'life0 self,
tn_id: TnId,
) -> Pin<Box<dyn Future<Output = ClResult<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn record_cert_renewal_notification<'life0, 'async_trait>(
&'life0 self,
tn_id: TnId,
) -> Pin<Box<dyn Future<Output = ClResult<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn update_tenant_status<'life0, 'async_trait>(
&'life0 self,
tn_id: TnId,
status: char,
) -> Pin<Box<dyn Future<Output = ClResult<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn list_profile_keys<'life0, 'async_trait>(
&'life0 self,
tn_id: TnId,
) -> Pin<Box<dyn Future<Output = ClResult<Vec<AuthKey>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn read_profile_key<'life0, 'life1, 'async_trait>(
&'life0 self,
tn_id: TnId,
key_id: &'life1 str,
) -> Pin<Box<dyn Future<Output = ClResult<AuthKey>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn create_profile_key<'life0, 'async_trait>(
&'life0 self,
tn_id: TnId,
expires_at: Option<Timestamp>,
) -> Pin<Box<dyn Future<Output = ClResult<AuthKey>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn create_access_token<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
tn_id: TnId,
data: &'life1 AccessToken<&'life2 str>,
) -> Pin<Box<dyn Future<Output = ClResult<Box<str>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait;
fn create_action_token<'life0, 'async_trait>(
&'life0 self,
tn_id: TnId,
data: CreateAction,
) -> Pin<Box<dyn Future<Output = ClResult<Box<str>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn verify_access_token<'life0, 'life1, 'async_trait>(
&'life0 self,
token: &'life1 str,
) -> Pin<Box<dyn Future<Output = ClResult<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn read_vapid_key<'life0, 'async_trait>(
&'life0 self,
tn_id: TnId,
) -> Pin<Box<dyn Future<Output = ClResult<KeyPair>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn read_vapid_public_key<'life0, 'async_trait>(
&'life0 self,
tn_id: TnId,
) -> Pin<Box<dyn Future<Output = ClResult<Box<str>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn create_vapid_key<'life0, 'async_trait>(
&'life0 self,
tn_id: TnId,
) -> Pin<Box<dyn Future<Output = ClResult<KeyPair>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn update_vapid_key<'life0, 'life1, 'async_trait>(
&'life0 self,
tn_id: TnId,
key: &'life1 KeyPair,
) -> Pin<Box<dyn Future<Output = ClResult<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn read_var<'life0, 'life1, 'async_trait>(
&'life0 self,
tn_id: TnId,
var: &'life1 str,
) -> Pin<Box<dyn Future<Output = ClResult<Box<str>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn update_var<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
tn_id: TnId,
var: &'life1 str,
value: &'life2 str,
) -> Pin<Box<dyn Future<Output = ClResult<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait;
fn list_webauthn_credentials<'life0, 'async_trait>(
&'life0 self,
tn_id: TnId,
) -> Pin<Box<dyn Future<Output = ClResult<Box<[Webauthn<'_>]>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn read_webauthn_credential<'life0, 'life1, 'async_trait>(
&'life0 self,
tn_id: TnId,
credential_id: &'life1 str,
) -> Pin<Box<dyn Future<Output = ClResult<Webauthn<'_>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn create_webauthn_credential<'life0, 'life1, 'async_trait>(
&'life0 self,
tn_id: TnId,
data: &'life1 Webauthn<'_>,
) -> Pin<Box<dyn Future<Output = ClResult<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn update_webauthn_credential_counter<'life0, 'life1, 'async_trait>(
&'life0 self,
tn_id: TnId,
credential_id: &'life1 str,
counter: u32,
) -> Pin<Box<dyn Future<Output = ClResult<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn delete_webauthn_credential<'life0, 'life1, 'async_trait>(
&'life0 self,
tn_id: TnId,
credential_id: &'life1 str,
) -> Pin<Box<dyn Future<Output = ClResult<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn create_api_key<'life0, 'life1, 'async_trait>(
&'life0 self,
tn_id: TnId,
opts: CreateApiKeyOptions<'life1>,
) -> Pin<Box<dyn Future<Output = ClResult<CreatedApiKey>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn validate_api_key<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
) -> Pin<Box<dyn Future<Output = ClResult<ApiKeyValidation>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn list_api_keys<'life0, 'async_trait>(
&'life0 self,
tn_id: TnId,
) -> Pin<Box<dyn Future<Output = ClResult<Vec<ApiKeyInfo>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn read_api_key<'life0, 'async_trait>(
&'life0 self,
tn_id: TnId,
key_id: i64,
) -> Pin<Box<dyn Future<Output = ClResult<ApiKeyInfo>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn update_api_key<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
tn_id: TnId,
key_id: i64,
name: Option<&'life1 str>,
scopes: Option<&'life2 str>,
expires_at: Option<Timestamp>,
) -> Pin<Box<dyn Future<Output = ClResult<ApiKeyInfo>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait;
fn delete_api_key<'life0, 'async_trait>(
&'life0 self,
tn_id: TnId,
key_id: i64,
) -> Pin<Box<dyn Future<Output = ClResult<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn cleanup_expired_api_keys<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ClResult<u32>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn cleanup_expired_verification_codes<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ClResult<u32>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn create_proxy_site<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
data: &'life1 CreateProxySiteData<'life2>,
) -> Pin<Box<dyn Future<Output = ClResult<ProxySiteData>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait;
fn read_proxy_site<'life0, 'async_trait>(
&'life0 self,
site_id: i64,
) -> Pin<Box<dyn Future<Output = ClResult<ProxySiteData>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn read_proxy_site_by_domain<'life0, 'life1, 'async_trait>(
&'life0 self,
domain: &'life1 str,
) -> Pin<Box<dyn Future<Output = ClResult<ProxySiteData>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn update_proxy_site<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
site_id: i64,
data: &'life1 UpdateProxySiteData<'life2>,
) -> Pin<Box<dyn Future<Output = ClResult<ProxySiteData>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait;
fn delete_proxy_site<'life0, 'async_trait>(
&'life0 self,
site_id: i64,
) -> Pin<Box<dyn Future<Output = ClResult<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn list_proxy_sites<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ClResult<Vec<ProxySiteData>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
fn update_proxy_site_cert<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
site_id: i64,
cert: &'life1 str,
key: &'life2 str,
expires_at: Timestamp,
) -> Pin<Box<dyn Future<Output = ClResult<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait;
fn list_proxy_sites_needing_cert_renewal<'life0, 'async_trait>(
&'life0 self,
renewal_days: u32,
) -> Pin<Box<dyn Future<Output = ClResult<Vec<ProxySiteData>>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
}Expand description
A Cloudillo auth adapter
Every AuthAdapter implementation is required to implement this trait.
An AuthAdapter is responsible for storing and managing all sensitive data used for
authentication and authorization.
Required Methods§
Sourcefn validate_access_token<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
tn_id: TnId,
id_tag: &'life1 str,
token: &'life2 str,
) -> Pin<Box<dyn Future<Output = ClResult<AuthCtx>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn validate_access_token<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
tn_id: TnId,
id_tag: &'life1 str,
token: &'life2 str,
) -> Pin<Box<dyn Future<Output = ClResult<AuthCtx>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Validates an access token and returns the user context
Sourcefn read_id_tag<'life0, 'async_trait>(
&'life0 self,
tn_id: TnId,
) -> Pin<Box<dyn Future<Output = ClResult<Box<str>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn read_id_tag<'life0, 'async_trait>(
&'life0 self,
tn_id: TnId,
) -> Pin<Box<dyn Future<Output = ClResult<Box<str>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
§Profiles
Reads the ID tag of the given tenant, referenced by its ID
Sourcefn read_tn_id<'life0, 'life1, 'async_trait>(
&'life0 self,
id_tag: &'life1 str,
) -> Pin<Box<dyn Future<Output = ClResult<TnId>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn read_tn_id<'life0, 'life1, 'async_trait>(
&'life0 self,
id_tag: &'life1 str,
) -> Pin<Box<dyn Future<Output = ClResult<TnId>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Reads the ID the given tenant, referenced by its ID tag
Sourcefn read_tenant<'life0, 'life1, 'async_trait>(
&'life0 self,
id_tag: &'life1 str,
) -> Pin<Box<dyn Future<Output = ClResult<AuthProfile>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn read_tenant<'life0, 'life1, 'async_trait>(
&'life0 self,
id_tag: &'life1 str,
) -> Pin<Box<dyn Future<Output = ClResult<AuthProfile>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Reads a tenant profile
Sourcefn create_tenant_registration<'life0, 'life1, 'async_trait>(
&'life0 self,
email: &'life1 str,
) -> Pin<Box<dyn Future<Output = ClResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn create_tenant_registration<'life0, 'life1, 'async_trait>(
&'life0 self,
email: &'life1 str,
) -> Pin<Box<dyn Future<Output = ClResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Creates a tenant registration
Sourcefn create_tenant<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id_tag: &'life1 str,
data: CreateTenantData<'life2>,
) -> Pin<Box<dyn Future<Output = ClResult<TnId>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn create_tenant<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id_tag: &'life1 str,
data: CreateTenantData<'life2>,
) -> Pin<Box<dyn Future<Output = ClResult<TnId>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Creates a new tenant
Sourcefn delete_tenant<'life0, 'life1, 'async_trait>(
&'life0 self,
id_tag: &'life1 str,
) -> Pin<Box<dyn Future<Output = ClResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn delete_tenant<'life0, 'life1, 'async_trait>(
&'life0 self,
id_tag: &'life1 str,
) -> Pin<Box<dyn Future<Output = ClResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Deletes a tenant
Sourcefn list_tenants<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
opts: &'life1 ListTenantsOptions<'life2>,
) -> Pin<Box<dyn Future<Output = ClResult<Vec<TenantListItem>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn list_tenants<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
opts: &'life1 ListTenantsOptions<'life2>,
) -> Pin<Box<dyn Future<Output = ClResult<Vec<TenantListItem>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Lists all tenants (for admin use)
Sourcefn count_tenants<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
opts: &'life1 ListTenantsOptions<'life2>,
) -> Pin<Box<dyn Future<Output = ClResult<usize>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn count_tenants<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
opts: &'life1 ListTenantsOptions<'life2>,
) -> Pin<Box<dyn Future<Output = ClResult<usize>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Returns the total number of tenants matching the filter (ignoring limit/offset)
fn create_tenant_login<'life0, 'life1, 'async_trait>(
&'life0 self,
id_tag: &'life1 str,
) -> Pin<Box<dyn Future<Output = ClResult<AuthLogin>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn check_tenant_password<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id_tag: &'life1 str,
password: &'life2 str,
) -> Pin<Box<dyn Future<Output = ClResult<AuthLogin>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn update_tenant_password<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id_tag: &'life1 str,
password: &'life2 str,
) -> Pin<Box<dyn Future<Output = ClResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn update_idp_api_key<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
id_tag: &'life1 str,
api_key: &'life2 str,
) -> Pin<Box<dyn Future<Output = ClResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn create_cert<'life0, 'life1, 'async_trait>(
&'life0 self,
cert_data: &'life1 CertData,
) -> Pin<Box<dyn Future<Output = ClResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn read_cert_by_tn_id<'life0, 'async_trait>(
&'life0 self,
tn_id: TnId,
) -> Pin<Box<dyn Future<Output = ClResult<CertData>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn read_cert_by_id_tag<'life0, 'life1, 'async_trait>(
&'life0 self,
id_tag: &'life1 str,
) -> Pin<Box<dyn Future<Output = ClResult<CertData>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn read_cert_by_domain<'life0, 'life1, 'async_trait>(
&'life0 self,
domain: &'life1 str,
) -> Pin<Box<dyn Future<Output = ClResult<CertData>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn list_all_certs<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ClResult<Vec<CertData>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn list_tenants_needing_cert_renewal<'life0, 'async_trait>(
&'life0 self,
renewal_days: u32,
) -> Pin<Box<dyn Future<Output = ClResult<Vec<TenantCertRenewalRow>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Sourcefn record_cert_renewal_failure<'life0, 'life1, 'async_trait>(
&'life0 self,
tn_id: TnId,
error: &'life1 str,
) -> Pin<Box<dyn Future<Output = ClResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn record_cert_renewal_failure<'life0, 'life1, 'async_trait>(
&'life0 self,
tn_id: TnId,
error: &'life1 str,
) -> Pin<Box<dyn Future<Output = ClResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Record an ACME renewal failure for the given tenant: increments
failure_count, sets last_renewal_error, and stamps
last_renewal_attempt_at. No-op if no cert row exists for the tenant.
Sourcefn record_cert_renewal_success<'life0, 'async_trait>(
&'life0 self,
tn_id: TnId,
) -> Pin<Box<dyn Future<Output = ClResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn record_cert_renewal_success<'life0, 'async_trait>(
&'life0 self,
tn_id: TnId,
) -> Pin<Box<dyn Future<Output = ClResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Record a successful ACME renewal: clears last_renewal_error,
resets failure_count to 0, clears notified_at.
Sourcefn record_cert_renewal_notification<'life0, 'async_trait>(
&'life0 self,
tn_id: TnId,
) -> Pin<Box<dyn Future<Output = ClResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn record_cert_renewal_notification<'life0, 'async_trait>(
&'life0 self,
tn_id: TnId,
) -> Pin<Box<dyn Future<Output = ClResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Stamp notified_at after sending a renewal-failure notification email.
Sourcefn update_tenant_status<'life0, 'async_trait>(
&'life0 self,
tn_id: TnId,
status: char,
) -> Pin<Box<dyn Future<Output = ClResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn update_tenant_status<'life0, 'async_trait>(
&'life0 self,
tn_id: TnId,
status: char,
) -> Pin<Box<dyn Future<Output = ClResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Update tenant status. Known statuses:
'A' = Active, 'S' = Suspended (cert-related, set/cleared automatically
by the ACME renewal task when an expired cert keeps failing renewal),
'X' = Purging (soft-deleted; admin force-purge has begun. Auth is
blocked and a retry of the purge endpoint resumes destructive cleanup).
fn list_profile_keys<'life0, 'async_trait>(
&'life0 self,
tn_id: TnId,
) -> Pin<Box<dyn Future<Output = ClResult<Vec<AuthKey>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn read_profile_key<'life0, 'life1, 'async_trait>(
&'life0 self,
tn_id: TnId,
key_id: &'life1 str,
) -> Pin<Box<dyn Future<Output = ClResult<AuthKey>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn create_profile_key<'life0, 'async_trait>(
&'life0 self,
tn_id: TnId,
expires_at: Option<Timestamp>,
) -> Pin<Box<dyn Future<Output = ClResult<AuthKey>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn create_access_token<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
tn_id: TnId,
data: &'life1 AccessToken<&'life2 str>,
) -> Pin<Box<dyn Future<Output = ClResult<Box<str>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn create_action_token<'life0, 'async_trait>(
&'life0 self,
tn_id: TnId,
data: CreateAction,
) -> Pin<Box<dyn Future<Output = ClResult<Box<str>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn verify_access_token<'life0, 'life1, 'async_trait>(
&'life0 self,
token: &'life1 str,
) -> Pin<Box<dyn Future<Output = ClResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn read_vapid_key<'life0, 'async_trait>(
&'life0 self,
tn_id: TnId,
) -> Pin<Box<dyn Future<Output = ClResult<KeyPair>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn read_vapid_public_key<'life0, 'async_trait>(
&'life0 self,
tn_id: TnId,
) -> Pin<Box<dyn Future<Output = ClResult<Box<str>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn create_vapid_key<'life0, 'async_trait>(
&'life0 self,
tn_id: TnId,
) -> Pin<Box<dyn Future<Output = ClResult<KeyPair>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn update_vapid_key<'life0, 'life1, 'async_trait>(
&'life0 self,
tn_id: TnId,
key: &'life1 KeyPair,
) -> Pin<Box<dyn Future<Output = ClResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn read_var<'life0, 'life1, 'async_trait>(
&'life0 self,
tn_id: TnId,
var: &'life1 str,
) -> Pin<Box<dyn Future<Output = ClResult<Box<str>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn update_var<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
tn_id: TnId,
var: &'life1 str,
value: &'life2 str,
) -> Pin<Box<dyn Future<Output = ClResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn list_webauthn_credentials<'life0, 'async_trait>(
&'life0 self,
tn_id: TnId,
) -> Pin<Box<dyn Future<Output = ClResult<Box<[Webauthn<'_>]>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn read_webauthn_credential<'life0, 'life1, 'async_trait>(
&'life0 self,
tn_id: TnId,
credential_id: &'life1 str,
) -> Pin<Box<dyn Future<Output = ClResult<Webauthn<'_>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn create_webauthn_credential<'life0, 'life1, 'async_trait>(
&'life0 self,
tn_id: TnId,
data: &'life1 Webauthn<'_>,
) -> Pin<Box<dyn Future<Output = ClResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn update_webauthn_credential_counter<'life0, 'life1, 'async_trait>(
&'life0 self,
tn_id: TnId,
credential_id: &'life1 str,
counter: u32,
) -> Pin<Box<dyn Future<Output = ClResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn delete_webauthn_credential<'life0, 'life1, 'async_trait>(
&'life0 self,
tn_id: TnId,
credential_id: &'life1 str,
) -> Pin<Box<dyn Future<Output = ClResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn create_api_key<'life0, 'life1, 'async_trait>(
&'life0 self,
tn_id: TnId,
opts: CreateApiKeyOptions<'life1>,
) -> Pin<Box<dyn Future<Output = ClResult<CreatedApiKey>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn validate_api_key<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 str,
) -> Pin<Box<dyn Future<Output = ClResult<ApiKeyValidation>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn list_api_keys<'life0, 'async_trait>(
&'life0 self,
tn_id: TnId,
) -> Pin<Box<dyn Future<Output = ClResult<Vec<ApiKeyInfo>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn read_api_key<'life0, 'async_trait>(
&'life0 self,
tn_id: TnId,
key_id: i64,
) -> Pin<Box<dyn Future<Output = ClResult<ApiKeyInfo>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn update_api_key<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
tn_id: TnId,
key_id: i64,
name: Option<&'life1 str>,
scopes: Option<&'life2 str>,
expires_at: Option<Timestamp>,
) -> Pin<Box<dyn Future<Output = ClResult<ApiKeyInfo>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn delete_api_key<'life0, 'async_trait>(
&'life0 self,
tn_id: TnId,
key_id: i64,
) -> Pin<Box<dyn Future<Output = ClResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn cleanup_expired_api_keys<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ClResult<u32>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn cleanup_expired_verification_codes<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ClResult<u32>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn create_proxy_site<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
data: &'life1 CreateProxySiteData<'life2>,
) -> Pin<Box<dyn Future<Output = ClResult<ProxySiteData>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn read_proxy_site<'life0, 'async_trait>(
&'life0 self,
site_id: i64,
) -> Pin<Box<dyn Future<Output = ClResult<ProxySiteData>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn read_proxy_site_by_domain<'life0, 'life1, 'async_trait>(
&'life0 self,
domain: &'life1 str,
) -> Pin<Box<dyn Future<Output = ClResult<ProxySiteData>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn update_proxy_site<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
site_id: i64,
data: &'life1 UpdateProxySiteData<'life2>,
) -> Pin<Box<dyn Future<Output = ClResult<ProxySiteData>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn delete_proxy_site<'life0, 'async_trait>(
&'life0 self,
site_id: i64,
) -> Pin<Box<dyn Future<Output = ClResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn list_proxy_sites<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = ClResult<Vec<ProxySiteData>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn update_proxy_site_cert<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
site_id: i64,
cert: &'life1 str,
key: &'life2 str,
expires_at: Timestamp,
) -> Pin<Box<dyn Future<Output = ClResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn list_proxy_sites_needing_cert_renewal<'life0, 'async_trait>(
&'life0 self,
renewal_days: u32,
) -> Pin<Box<dyn Future<Output = ClResult<Vec<ProxySiteData>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".