alibi_sqlx/store/entities/
oauth_resource.rs1use crate::{JsonMetadata, SqlxModel};
2use chrono::{DateTime, Utc};
3#[derive(
4 Clone, Debug, PartialEq, serde::Serialize, serde::Deserialize, sqlx::FromRow, SqlxModel,
5)]
6#[auth(table = "oauthResource")]
7pub struct Model {
8 pub id: String,
9 #[serde(rename = "identifier")]
10 pub identifier: String,
11 #[serde(rename = "name")]
12 pub name: String,
13 #[sqlx(rename = "accessTokenTtl")]
14 #[serde(rename = "accessTokenTtl")]
15 pub access_token_ttl: Option<i32>,
16 #[sqlx(rename = "refreshTokenTtl")]
17 #[serde(rename = "refreshTokenTtl")]
18 pub refresh_token_ttl: Option<i32>,
19 #[sqlx(rename = "signingAlgorithm")]
20 #[serde(rename = "signingAlgorithm")]
21 pub signing_algorithm: Option<String>,
22 #[sqlx(rename = "signingKeyId")]
23 #[serde(rename = "signingKeyId")]
24 pub signing_key_id: Option<String>,
25 #[sqlx(rename = "allowedScopes")]
26 #[serde(rename = "allowedScopes")]
27 pub allowed_scopes: Option<JsonMetadata>,
28 #[sqlx(rename = "customClaims")]
29 #[serde(rename = "customClaims")]
30 pub custom_claims: Option<JsonMetadata>,
31 #[sqlx(rename = "dpopBoundAccessTokensRequired")]
32 #[serde(rename = "dpopBoundAccessTokensRequired")]
33 pub dpop_bound_access_tokens_required: Option<bool>,
34 #[serde(rename = "disabled")]
35 pub disabled: Option<bool>,
36 #[sqlx(rename = "createdAt")]
37 #[serde(rename = "createdAt")]
38 pub created_at: Option<DateTime<Utc>>,
39 #[sqlx(rename = "updatedAt")]
40 #[serde(rename = "updatedAt")]
41 pub updated_at: Option<DateTime<Utc>>,
42 #[sqlx(rename = "policyVersion")]
43 #[serde(rename = "policyVersion")]
44 pub policy_version: Option<i32>,
45 #[serde(rename = "metadata")]
46 pub metadata: Option<JsonMetadata>,
47}
48
49impl TryFrom<Model> for alibi_core::store::OAuthResource {
50 type Error = alibi_core::AuthError;
51 fn try_from(model: Model) -> Result<Self, Self::Error> {
52 let mut metadata = serde_json::to_value(&model)?;
53 let object = metadata
54 .as_object_mut()
55 .ok_or_else(|| alibi_core::AuthError::internal("OAuth fields must be an object"))?;
56 for name in ["id", "identifier", "createdAt", "updatedAt"] {
57 _ = object.remove(name);
58 }
59 Ok(Self {
60 id: model.id,
61 identifier: model.identifier.clone(),
62 metadata,
63 created_at: model.created_at,
64 updated_at: model.updated_at,
65 })
66 }
67}
68impl Model {
69 pub(crate) fn columns_from_metadata(
70 mut fields: serde_json::Value,
71 ) -> alibi_core::AuthResult<Self> {
72 let object = fields
73 .as_object_mut()
74 .ok_or_else(|| alibi_core::AuthError::bad_request("OAuth fields must be an object"))?;
75 for (key, value) in [("id", ""), ("identifier", "")] {
76 _ = object.insert(key.into(), serde_json::Value::String(value.into()));
77 }
78 Ok(serde_json::from_value(fields)?)
79 }
80}