atrium_oauth/types/
client_metadata.rs

1use crate::keyset::Keyset;
2use jose_jwk::JwkSet;
3use serde::{Deserialize, Serialize};
4
5#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, Default)]
6pub struct OAuthClientMetadata {
7    pub client_id: String,
8    #[serde(skip_serializing_if = "Option::is_none")]
9    pub client_uri: Option<String>,
10    pub redirect_uris: Vec<String>,
11    #[serde(skip_serializing_if = "Option::is_none")]
12    pub scope: Option<String>,
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub grant_types: Option<Vec<String>>,
15    #[serde(skip_serializing_if = "Option::is_none")]
16    pub token_endpoint_auth_method: Option<String>,
17    // https://datatracker.ietf.org/doc/html/rfc9449#section-5.2
18    #[serde(skip_serializing_if = "Option::is_none")]
19    pub dpop_bound_access_tokens: Option<bool>,
20    // https://datatracker.ietf.org/doc/html/rfc7591#section-2
21    #[serde(skip_serializing_if = "Option::is_none")]
22    pub jwks_uri: Option<String>,
23    #[serde(skip_serializing_if = "Option::is_none")]
24    pub jwks: Option<JwkSet>,
25    // https://openid.net/specs/openid-connect-registration-1_0.html#ClientMetadata
26    #[serde(skip_serializing_if = "Option::is_none")]
27    pub token_endpoint_auth_signing_alg: Option<String>,
28}
29
30pub trait TryIntoOAuthClientMetadata {
31    type Error;
32
33    fn try_into_client_metadata(
34        self,
35        keyset: &Option<Keyset>,
36    ) -> core::result::Result<OAuthClientMetadata, Self::Error>;
37}