aauth_protocol/
metadata.rs1use serde::{Deserialize, Serialize};
4
5pub mod dwk {
7 pub const AGENT: &str = "aauth-agent.json";
9 pub const PERSON: &str = "aauth-person.json";
11 pub const RESOURCE: &str = "aauth-resource.json";
13 pub const ACCESS: &str = "aauth-access.json";
15
16 pub fn is_known(name: &str) -> bool {
18 [AGENT, PERSON, RESOURCE, ACCESS].contains(&name)
19 }
20}
21
22pub fn metadata_url(issuer: &str, dwk: &str) -> String {
32 format!("{}/.well-known/{dwk}", crate::identifier::trim(issuer))
33}
34
35#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
37pub struct PersonServerMetadata {
38 pub issuer: String,
40 pub auth_token_endpoint: String,
42 #[serde(default, skip_serializing_if = "Option::is_none")]
45 pub person_token_endpoint: Option<String>,
46 #[serde(default, skip_serializing_if = "Option::is_none")]
48 pub mission_endpoint: Option<String>,
49 #[serde(default, skip_serializing_if = "Option::is_none")]
51 pub jwks_uri: Option<String>,
52 #[serde(default, skip_serializing_if = "Option::is_none")]
54 pub name: Option<String>,
55 #[serde(default, skip_serializing_if = "Option::is_none")]
57 pub description: Option<String>,
58}
59
60#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
62pub struct KeyedMetadata {
63 #[serde(default, skip_serializing_if = "Option::is_none")]
66 pub issuer: Option<String>,
67 #[serde(default, skip_serializing_if = "Option::is_none")]
69 pub jwks_uri: Option<String>,
70 #[serde(default, skip_serializing_if = "Option::is_none")]
72 pub jwks: Option<crate::jwk::Jwks>,
73 #[serde(default, skip_serializing_if = "Option::is_none")]
75 pub name: Option<String>,
76}