use serde::{Deserialize, Serialize};
pub mod dwk {
pub const AGENT: &str = "aauth-agent.json";
pub const PERSON: &str = "aauth-person.json";
pub const RESOURCE: &str = "aauth-resource.json";
pub const ACCESS: &str = "aauth-access.json";
pub fn is_known(name: &str) -> bool {
[AGENT, PERSON, RESOURCE, ACCESS].contains(&name)
}
}
pub fn metadata_url(issuer: &str, dwk: &str) -> String {
format!("{}/.well-known/{dwk}", crate::identifier::trim(issuer))
}
#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
pub struct PersonServerMetadata {
pub issuer: String,
pub auth_token_endpoint: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub person_token_endpoint: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub mission_endpoint: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub jwks_uri: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
}
#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct KeyedMetadata {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub issuer: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub jwks_uri: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub jwks: Option<crate::jwk::Jwks>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
}