pub struct OAuthClient {Show 20 fields
pub id: Uuid,
pub client_id: String,
pub client_name: String,
pub application_type: ApplicationType,
pub token_endpoint_auth_method: TokenEndpointAuthMethod,
pub client_secret: Option<Digest>,
pub client_secret_expires_at: Option<DateTime<Utc>>,
pub redirect_uris: Vec<String>,
pub post_logout_redirect_uris: Option<Vec<String>>,
pub allowed_grant_types: Vec<GrantTypeName>,
pub scopes: Vec<String>,
pub require_pkce: bool,
pub pkce_methods_allowed: Vec<PkceMethod>,
pub allowed_origins: Option<Vec<String>>,
pub bearer_allowed: bool,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
pub deleted_at: Option<DateTime<Utc>>,
pub metadata_document_fetched_at: Option<DateTime<Utc>>,
pub client_uri: Option<String>,
}Fields§
§id: Uuid§client_id: String§client_name: String§application_type: ApplicationType§token_endpoint_auth_method: TokenEndpointAuthMethod§client_secret: Option<Digest>Hashed/HMACed secret for confidential clients (BYTEA); None for public clients.
client_secret_expires_at: Option<DateTime<Utc>>§redirect_uris: Vec<String>§post_logout_redirect_uris: Option<Vec<String>>§allowed_grant_types: Vec<GrantTypeName>§scopes: Vec<String>§require_pkce: bool§pkce_methods_allowed: Vec<PkceMethod>§allowed_origins: Option<Vec<String>>Optional list of allowed origins (same validation as redirect URIs). If None or empty, origin check is not enforced.
bearer_allowed: bool§created_at: DateTime<Utc>§updated_at: DateTime<Utc>§deleted_at: Option<DateTime<Utc>>§metadata_document_fetched_at: Option<DateTime<Utc>>Set for a client registered through a Client ID Metadata Document, whose client_id is
the document’s URL: when the document was last fetched.
client_uri: Option<String>Implementations§
Source§impl OAuthClient
impl OAuthClient
Sourcepub fn is_metadata_document_client(&self) -> bool
pub fn is_metadata_document_client(&self) -> bool
Whether the client was registered through a Client ID Metadata Document.
Sourcepub fn access_token_ttl(&self) -> Duration
pub fn access_token_ttl(&self) -> Duration
How long this client’s access tokens are valid: shorter for clients registered through a metadata document.
pub fn is_public(&self) -> bool
pub fn is_confidential(&self) -> bool
pub fn allows_bearer(&self) -> bool
pub fn requires_pkce(&self) -> bool
pub fn allows_pkce_method(&self, m: PkceMethod) -> bool
pub fn allows_grant(&self, g: GrantTypeName) -> bool
Source§impl OAuthClient
impl OAuthClient
Sourcepub async fn find_by_id(conn: &mut PgConnection, id: Uuid) -> ModelResult<Self>
pub async fn find_by_id(conn: &mut PgConnection, id: Uuid) -> ModelResult<Self>
Find an active (non-soft-deleted) client by DB id (UUID).
Sourcepub async fn find_by_id_optional(
conn: &mut PgConnection,
id: Uuid,
) -> Result<Option<Self>, ModelError>
pub async fn find_by_id_optional( conn: &mut PgConnection, id: Uuid, ) -> Result<Option<Self>, ModelError>
Same as find_by_id, but returns Ok(None) when not found.
Sourcepub async fn find_by_client_id(
conn: &mut PgConnection,
client_id: &str,
) -> ModelResult<Self>
pub async fn find_by_client_id( conn: &mut PgConnection, client_id: &str, ) -> ModelResult<Self>
Find an active (non-soft-deleted) client by client_id.
Sourcepub async fn find_by_client_id_optional(
conn: &mut PgConnection,
client_id: &str,
) -> Result<Option<Self>, ModelError>
pub async fn find_by_client_id_optional( conn: &mut PgConnection, client_id: &str, ) -> Result<Option<Self>, ModelError>
Same as find_by_client_id, but returns Ok(None) when not found.
Sourcepub async fn insert(
conn: &mut PgConnection,
p: NewClientParams<'_>,
) -> ModelResult<Self>
pub async fn insert( conn: &mut PgConnection, p: NewClientParams<'_>, ) -> ModelResult<Self>
Insert a new client and return the full hydrated row.
Source§impl OAuthClient
impl OAuthClient
Sourcepub async fn upsert_metadata_document_client(
conn: &mut PgConnection,
client: MetadataDocumentClient<'_>,
) -> ModelResult<Self>
pub async fn upsert_metadata_document_client( conn: &mut PgConnection, client: MetadataDocumentClient<'_>, ) -> ModelResult<Self>
Stores or refreshes the cached registration of a Client ID Metadata Document client: a public client that must use PKCE with S256 and gets Bearer tokens through the authorization code and refresh token grants.
Trait Implementations§
Source§impl Debug for OAuthClient
impl Debug for OAuthClient
Source§impl<'de> Deserialize<'de> for OAuthClient
impl<'de> Deserialize<'de> for OAuthClient
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl<'a, R: Row> FromRow<'a, R> for OAuthClientwhere
&'a str: ColumnIndex<R>,
Uuid: Decode<'a, R::Database> + Type<R::Database>,
String: Decode<'a, R::Database> + Type<R::Database>,
ApplicationType: Decode<'a, R::Database> + Type<R::Database>,
TokenEndpointAuthMethod: Decode<'a, R::Database> + Type<R::Database>,
Option<Digest>: Decode<'a, R::Database> + Type<R::Database>,
Option<DateTime<Utc>>: Decode<'a, R::Database> + Type<R::Database>,
Vec<String>: Decode<'a, R::Database> + Type<R::Database>,
Option<Vec<String>>: Decode<'a, R::Database> + Type<R::Database>,
Vec<GrantTypeName>: Decode<'a, R::Database> + Type<R::Database>,
bool: Decode<'a, R::Database> + Type<R::Database>,
Vec<PkceMethod>: Decode<'a, R::Database> + Type<R::Database>,
DateTime<Utc>: Decode<'a, R::Database> + Type<R::Database>,
Option<String>: Decode<'a, R::Database> + Type<R::Database>,
impl<'a, R: Row> FromRow<'a, R> for OAuthClientwhere
&'a str: ColumnIndex<R>,
Uuid: Decode<'a, R::Database> + Type<R::Database>,
String: Decode<'a, R::Database> + Type<R::Database>,
ApplicationType: Decode<'a, R::Database> + Type<R::Database>,
TokenEndpointAuthMethod: Decode<'a, R::Database> + Type<R::Database>,
Option<Digest>: Decode<'a, R::Database> + Type<R::Database>,
Option<DateTime<Utc>>: Decode<'a, R::Database> + Type<R::Database>,
Vec<String>: Decode<'a, R::Database> + Type<R::Database>,
Option<Vec<String>>: Decode<'a, R::Database> + Type<R::Database>,
Vec<GrantTypeName>: Decode<'a, R::Database> + Type<R::Database>,
bool: Decode<'a, R::Database> + Type<R::Database>,
Vec<PkceMethod>: Decode<'a, R::Database> + Type<R::Database>,
DateTime<Utc>: Decode<'a, R::Database> + Type<R::Database>,
Option<String>: Decode<'a, R::Database> + Type<R::Database>,
Auto Trait Implementations§
impl Freeze for OAuthClient
impl RefUnwindSafe for OAuthClient
impl Send for OAuthClient
impl Sync for OAuthClient
impl Unpin for OAuthClient
impl UnsafeUnpin for OAuthClient
impl UnwindSafe for OAuthClient
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ
§fn with_current_context(self) -> WithContext<Self> ⓘ
fn with_current_context(self) -> WithContext<Self> ⓘ
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request§impl<L> LayerExt<L> for L
impl<L> LayerExt<L> for L
§fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
Layered].