use std::collections::BTreeMap;
use openauth_core::secret::SecretString;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SamlProviderConfig {
pub issuer: String,
#[serde(default)]
pub entry_point: String,
pub cert: String,
pub callback_url: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub acs_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub audience: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub idp_metadata: Option<SamlIdpMetadata>,
pub sp_metadata: SamlSpMetadata,
#[serde(skip_serializing_if = "Option::is_none")]
pub mapping: Option<SamlMapping>,
pub want_assertions_signed: bool,
pub authn_requests_signed: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub signature_algorithm: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub digest_algorithm: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub identifier_format: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub private_key: Option<SecretString>,
#[serde(skip_serializing_if = "Option::is_none")]
pub decryption_pvk: Option<SecretString>,
#[serde(skip_serializing_if = "Option::is_none")]
pub additional_params: Option<BTreeMap<String, serde_json::Value>>,
}
pub type SamlConfig = SamlProviderConfig;
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SamlIdpMetadata {
pub metadata: Option<String>,
#[serde(alias = "entityID")]
pub entity_id: Option<String>,
pub entity_url: Option<String>,
pub redirect_url: Option<String>,
pub cert: Option<String>,
pub private_key: Option<SecretString>,
pub private_key_pass: Option<SecretString>,
pub is_assertion_encrypted: Option<bool>,
pub enc_private_key: Option<SecretString>,
pub enc_private_key_pass: Option<SecretString>,
pub single_sign_on_service: Option<Vec<SamlService>>,
pub single_logout_service: Option<Vec<SamlService>>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SamlService {
#[serde(rename = "Binding")]
pub binding: String,
#[serde(rename = "Location")]
pub location: String,
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SamlSpMetadata {
pub metadata: Option<String>,
#[serde(alias = "entityID")]
pub entity_id: Option<String>,
pub binding: Option<String>,
pub private_key: Option<SecretString>,
pub private_key_pass: Option<SecretString>,
pub is_assertion_encrypted: Option<bool>,
pub enc_private_key: Option<SecretString>,
pub enc_private_key_pass: Option<SecretString>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SamlMapping {
pub id: Option<String>,
pub email: Option<String>,
pub email_verified: Option<String>,
pub name: Option<String>,
pub first_name: Option<String>,
pub last_name: Option<String>,
pub extra_fields: Option<BTreeMap<String, String>>,
}