From 9bfcd5548ef5c781f935f9d723e7ddfa1863306f Mon Sep 17 00:00:00 2001 From: Jageshwar Sah Date: Sat, 27 Jul 2024 12:04:55 +0530 Subject: [PATCH] moved some of the extraction logic to their own struct impl --- src/metadata/entity_descriptor.rs | 20 ++++++++++++++++++++ src/metadata/mod.rs | 20 ++++++++++++++++++++ src/service_provider/mod.rs | 12 ++---------- 3 files changed, 42 insertions(+), 10 deletions(-) diff --git a/src/metadata/entity_descriptor.rs b/src/metadata/entity_descriptor.rs index 294e8af..d18b58e 100644 --- a/src/metadata/entity_descriptor.rs +++ b/src/metadata/entity_descriptor.rs @@ -308,6 +308,26 @@ impl<'a> Iterator for EntityDescriptorIterator<'a> { } } +impl EntityDescriptor { + pub fn sso_binding_location(&self, binding: &str) -> Option { + if let Some(idp_sso_descriptors) = &self.idp_sso_descriptors { + for idp_sso_descriptor in idp_sso_descriptors { + return idp_sso_descriptor.sso_binding_location(binding); + } + } + None + } + + pub fn slo_binding_location(&self, binding: &str) -> Option { + if let Some(idp_sso_descriptors) = &self.idp_sso_descriptors { + for idp_sso_descriptor in idp_sso_descriptors { + return idp_sso_descriptor.slo_binding_location(binding); + } + } + None + } +} + #[cfg(test)] mod test { use crate::traits::ToXml; diff --git a/src/metadata/mod.rs b/src/metadata/mod.rs index b8e86b6..3b21f7d 100644 --- a/src/metadata/mod.rs +++ b/src/metadata/mod.rs @@ -162,6 +162,26 @@ pub struct IdpSsoDescriptor { pub attributes: Vec, } +impl IdpSsoDescriptor { + pub fn sso_binding_location(&self, binding: &str) -> Option { + for sso_service in &self.single_sign_on_services { + if sso_service.binding == binding { + return Some(sso_service.location.clone()); + } + } + None + } + + pub fn slo_binding_location(&self, binding: &str) -> Option { + for single_logout_services in &self.single_logout_services { + if single_logout_services.binding == binding { + return Some(single_logout_services.location.clone()); + } + } + None + } +} + const NAME: &str = "md:IDPSSODescriptor"; impl TryFrom for Event<'_> { diff --git a/src/service_provider/mod.rs b/src/service_provider/mod.rs index 68dfeb9..7cbf74f 100644 --- a/src/service_provider/mod.rs +++ b/src/service_provider/mod.rs @@ -249,11 +249,7 @@ impl ServiceProvider { pub fn sso_binding_location(&self, binding: &str) -> Option { if let Some(idp_sso_descriptors) = &self.idp_metadata.idp_sso_descriptors { for idp_sso_descriptor in idp_sso_descriptors { - for sso_service in &idp_sso_descriptor.single_sign_on_services { - if sso_service.binding == binding { - return Some(sso_service.location.clone()); - } - } + return idp_sso_descriptor.sso_binding_location(binding); } } None @@ -262,11 +258,7 @@ impl ServiceProvider { pub fn slo_binding_location(&self, binding: &str) -> Option { if let Some(idp_sso_descriptors) = &self.idp_metadata.idp_sso_descriptors { for idp_sso_descriptor in idp_sso_descriptors { - for single_logout_services in &idp_sso_descriptor.single_logout_services { - if single_logout_services.binding == binding { - return Some(single_logout_services.location.clone()); - } - } + return idp_sso_descriptor.slo_binding_location(binding); } } None