mod idp;
mod options;
mod raw_mapping;
mod slo;
mod sp;
use crate::config::{IdpConfig, SpConfig};
use crate::entity::EntitySetting;
use crate::error::SamlError as Error;
use crate::idp::IdentityProvider;
use crate::sp::ServiceProvider;
use raw_mapping::{raw_idp_metadata_config, raw_sp_metadata_config};
pub use options::{ForceAuthn, LogoutSigning, RespondSlo, RespondSso, StartSlo, StartSso};
pub struct Saml<Role = Unknown>(Role);
pub enum Unknown {}
pub struct Sp {
service_provider: ServiceProvider,
}
pub struct Idp {
identity_provider: IdentityProvider,
}
pub type SamlError = Error;
impl Saml {
pub fn sp(config: SpConfig) -> Result<Saml<Sp>, SamlError> {
let setting = EntitySetting::try_from(&config)?;
let raw_config = raw_sp_metadata_config(&config);
let service_provider = ServiceProvider::from_config(&raw_config, setting)?;
Ok(Saml(Sp { service_provider }))
}
pub fn idp(config: IdpConfig) -> Result<Saml<Idp>, SamlError> {
let setting = EntitySetting::try_from(&config)?;
let raw_config = raw_idp_metadata_config(&config);
let identity_provider = IdentityProvider::from_config(&raw_config, setting)?;
Ok(Saml(Idp { identity_provider }))
}
}