use std::collections::HashMap;
use serde::{Deserialize, Serialize};
use crate::auth::{IssuerUrl, SecretBearer};
use crate::reference::CardRef;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)]
#[cfg_attr(feature = "server", derive(utoipa::ToSchema))]
#[serde(deny_unknown_fields)]
pub struct ClaimMappingPayload {
pub subject: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub email: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub groups: Option<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)]
#[cfg_attr(feature = "server", derive(utoipa::ToSchema))]
pub enum ClientAuthKind {
SecretBasic,
SecretPost,
PrivateKeyJwt,
Public,
}
#[derive(
Debug, Clone, Copy, PartialEq, Eq, Default, Serialize, Deserialize, schemars::JsonSchema,
)]
#[cfg_attr(feature = "server", derive(utoipa::ToSchema))]
#[serde(rename_all = "snake_case")]
pub enum IssuerTokenPolicy {
#[default]
Human,
Workload,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)]
#[cfg_attr(feature = "server", derive(utoipa::ToSchema))]
#[serde(deny_unknown_fields)]
pub struct CreateTrustedIssuerRequest {
pub issuer: IssuerUrl,
pub expected_audience: String,
pub client_id: String,
pub client_auth: ClientAuthKind,
#[serde(default)]
pub client_secret: Option<SecretBearer>,
pub claim_mapping: ClaimMappingPayload,
#[serde(default)]
pub group_role_map: HashMap<String, Vec<String>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub default_roles: Option<Vec<String>>,
pub principal_kind: IssuerTokenPolicy,
#[serde(default)]
pub jwks_ttl_secs: Option<u64>,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, schemars::JsonSchema)]
#[cfg_attr(feature = "server", derive(utoipa::ToSchema))]
#[serde(deny_unknown_fields)]
pub struct TrustedIssuerView {
pub issuer: String,
pub jwks_uri: String,
pub expected_audience: String,
pub client_id: String,
pub client_auth: String,
pub principal_kind: String,
pub jwks_ttl_secs: i64,
pub claim_mapping: ClaimMappingPayload,
pub group_role_map: HashMap<String, Vec<String>>,
pub default_roles: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)]
#[cfg_attr(feature = "server", derive(utoipa::ToSchema))]
#[serde(deny_unknown_fields)]
pub struct CreateWorkloadBindingRequest {
pub issuer: IssuerUrl,
pub subject: String,
#[serde(default)]
pub audience: Option<String>,
pub card_ref: CardRef,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)]
#[cfg_attr(feature = "server", derive(utoipa::ToSchema))]
#[serde(deny_unknown_fields)]
pub struct WorkloadBindingView {
pub issuer: String,
pub subject: String,
pub audience: Option<String>,
pub card_ref: CardRef,
}