pub struct OAuthClient {Show 18 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>>,
}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>>Implementations§
Source§impl OAuthClient
impl OAuthClient
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.
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>,
Deserialize this value from the given Serde deserializer. Read more
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>,
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>,
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
Mutably borrows from an owned value. Read more
§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> ⓘ
Converts
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> ⓘ
Converts
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>
Wrap the input message
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>,
Applies the layer to a service and wraps it in [
Layered].§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
§impl<T> ServiceExt for T
impl<T> ServiceExt for T
§fn map_response_body<F>(self, f: F) -> MapResponseBody<Self, F>where
Self: Sized,
fn map_response_body<F>(self, f: F) -> MapResponseBody<Self, F>where
Self: Sized,
Apply a transformation to the response body. Read more
§fn decompression(self) -> Decompression<Self>where
Self: Sized,
fn decompression(self) -> Decompression<Self>where
Self: Sized,
Decompress response bodies. Read more
§fn trace_for_http(self) -> Trace<Self, SharedClassifier<ServerErrorsAsFailures>>where
Self: Sized,
fn trace_for_http(self) -> Trace<Self, SharedClassifier<ServerErrorsAsFailures>>where
Self: Sized,
High level tracing that classifies responses using HTTP status codes. Read more
§fn trace_for_grpc(self) -> Trace<Self, SharedClassifier<GrpcErrorsAsFailures>>where
Self: Sized,
fn trace_for_grpc(self) -> Trace<Self, SharedClassifier<GrpcErrorsAsFailures>>where
Self: Sized,
High level tracing that classifies responses using gRPC headers. Read more