use serde::{Deserialize, Serialize};
use crate::auth::{PrincipalId, SecretBearer};
#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
#[cfg_attr(feature = "server", derive(utoipa::ToSchema))]
#[serde(rename_all = "snake_case", tag = "method")]
pub enum PlatformClientAuth {
SecretBasic {
#[schemars(with = "String")]
secret: SecretBearer,
},
SecretPost {
#[schemars(with = "String")]
secret: SecretBearer,
},
Public,
}
#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
#[cfg_attr(feature = "server", derive(utoipa::ToSchema))]
#[serde(deny_unknown_fields)]
pub struct ConfigurePlatformOidcRequest {
pub issuer_url: String,
pub client_id: String,
pub client_auth: PlatformClientAuth,
#[serde(default = "default_jwks_ttl_secs")]
pub jwks_ttl_secs: i64,
}
const fn default_jwks_ttl_secs() -> i64 {
300
}
#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
#[cfg_attr(feature = "server", derive(utoipa::ToSchema))]
pub struct PlatformOidcConnectionView {
pub issuer_url: String,
pub jwks_uri: String,
pub client_id: String,
pub client_auth: String,
pub jwks_ttl_secs: i64,
}
#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
#[cfg_attr(feature = "server", derive(utoipa::ToSchema))]
#[serde(deny_unknown_fields)]
pub struct RegisterPlatformAdminRequest {
pub name: String,
pub match_claim: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
#[cfg_attr(feature = "server", derive(utoipa::ToSchema))]
pub struct RegisterPlatformAdminResponse {
pub principal_id: PrincipalId,
}
#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
#[cfg_attr(feature = "server", derive(utoipa::ToSchema))]
#[serde(deny_unknown_fields)]
pub struct PlatformLoginRequest {
pub redirect_uri: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
#[cfg_attr(feature = "server", derive(utoipa::ToSchema))]
#[serde(deny_unknown_fields)]
pub struct PlatformCallbackRequest {
pub code: String,
pub state: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub iss: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
#[cfg_attr(feature = "server", derive(utoipa::ToSchema))]
pub struct PlatformPrincipalSummary {
pub principal_id: PrincipalId,
pub principal_kind: String,
pub name: String,
pub status: String,
pub match_claim: Option<String>,
pub subject: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
#[cfg_attr(feature = "server", derive(utoipa::ToSchema))]
pub struct PlatformPrincipalListResponse {
pub principals: Vec<PlatformPrincipalSummary>,
}
#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
#[cfg_attr(feature = "server", derive(utoipa::ToSchema))]
#[serde(deny_unknown_fields)]
pub struct SetPlatformPrincipalStatusRequest {
pub status: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, schemars::JsonSchema)]
#[cfg_attr(feature = "server", derive(utoipa::ToSchema))]
#[serde(deny_unknown_fields)]
pub struct IssuePlatformCredentialRequest {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub expires_in_days: Option<u32>,
}