From 0ea81de751de7cc6074bddba35c77f816ada3ea2 Mon Sep 17 00:00:00 2001
From: "renater.salaun" <renater.salaun@047e039d-479c-447e-8a29-aa6bf4a09bab>
Date: Thu, 2 Oct 2014 13:03:09 +0000
Subject: [PATCH] Bug fix to get email addresses regardless of XML namespaces

git-svn-id: https://svn.geant.net/GEANT/edugain_testidp_account_manager/trunk@11 047e039d-479c-447e-8a29-aa6bf4a09bab
---
 lib/IdPAccountManager/SAMLMetadata.pm | 14 ++++++++------
 templates/web/select_sp.tt2.html      | 11 +++++------
 2 files changed, 13 insertions(+), 12 deletions(-)

diff --git a/lib/IdPAccountManager/SAMLMetadata.pm b/lib/IdPAccountManager/SAMLMetadata.pm
index 62ba33b..85e3467 100644
--- a/lib/IdPAccountManager/SAMLMetadata.pm
+++ b/lib/IdPAccountManager/SAMLMetadata.pm
@@ -234,10 +234,12 @@ sub _parse_saml_metadata {
 		}elsif ($child->nodeName =~ /ContactPerson$/) {
 			my %contact_details;
 			$contact_details{'type'} = $child->getAttribute('contactType');
-			foreach my $contact_child ($child->childNodes()) {
-				$contact_details{$contact_child->nodeName} = &IdPAccountManager::Tools::encode_utf8($contact_child->textContent());
-			}
-			push @{$extracted_data->{'contacts'}}, \%contact_details;
+                        if (defined $contact_details{'type'}) {
+                            foreach my $contact_child ($child->childNodes()) {
+                                    $contact_details{$contact_child->localName} = &IdPAccountManager::Tools::encode_utf8($contact_child->textContent());
+                            }
+                            push @{$extracted_data->{'contacts'}}, \%contact_details;
+                        }
 		}
 
 
@@ -257,8 +259,8 @@ sub _parse_saml_metadata {
 			my %contact_details;
 			$contact_details{'type'} = $contact->getAttribute('contactType');
 			foreach my $contact_child ($EntityDescriptor->childNodes()) {
-				&IdPAccountManager::Tools::do_log('trace', "Contact : %s", $contact_child->nodeName);
-				$contact_details{$contact_child->nodeName} = &IdPAccountManager::Tools::encode_utf8($contact_child->textContent());
+				&IdPAccountManager::Tools::do_log('trace', "Contact : %s", $contact_child->localName);
+				$contact_details{$contact_child->localName} = &IdPAccountManager::Tools::encode_utf8($contact_child->textContent());
 			}
 			push @{$extracted_data->{'contacts'}}, \%contact_details;
 		}
diff --git a/templates/web/select_sp.tt2.html b/templates/web/select_sp.tt2.html
index 0a3c444..40488c3 100644
--- a/templates/web/select_sp.tt2.html
+++ b/templates/web/select_sp.tt2.html
@@ -1,5 +1,5 @@
 <h3>Send email challenge</h3>
-[% IF entity.display_name && entity.display_name.en %]
+[% IF sp_metadata_as_hashref.display_name && sp_metadata_as_hashref.display_name.en %]
 [% SET sp_display_name = sp_metadata_as_hashref.display_name.en %]
 [% ELSE %]
 [% SET sp_display_name = sp_metadata_as_hashref.entityid %]
@@ -11,17 +11,16 @@ Before you can create test accounts at this Identity Provider, we need to ensure
 <fieldset>
 [% IF  sp_metadata_as_hashref.contacts.defined %]
     <legend>Select your email address</legend>
-   <label for="sp_entityid">The email addresses below have been extracted from your SP SAML metadata.<br/>Please select the email address where an email challenge can be sent to validate your identity</label>
+   <label for="sp_entityid">The email addresses below have been extracted from your SP SAML metadata.<br/>Please select the email address where an email challenge
+   can be sent to validate your identity</label>
 
-   <ul>
 [% FOREACH contact IN sp_metadata_as_hashref.contacts -%]
 [% matches = contact.EmailAddress.match('^(mailto:)?(.*)$') %]
 [% SET email = matches.1%]
 
-<li><input name="email" value="[% email %]" id="[% email %]" type="radio"/>
-<label for="[% email %]">[% email %]</label></li>
+<input name="email" value="[% email %]" id="[% email %]" type="radio"/>
+<label for="[% email %]">[% email %]</label>
 [% END %]
-</ul>
 
 [% ELSE %]
 No ContactPerson elements could be found in your SP SAML metadata. Therefore we are unable to provide test accounts for your SP. Please contact your local federation
-- 
GitLab