From e92391db03b5166769fd950f4e098716c7d24f32 Mon Sep 17 00:00:00 2001
From: Guillaume Rousse <guillaume.rousse@renater.fr>
Date: Wed, 5 Dec 2018 16:49:09 +0100
Subject: [PATCH] extract organization URL from metadata

---
 lib/AccountManager/Metadata.pm | 9 +++++++++
 t/metadata.t                   | 3 ++-
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/lib/AccountManager/Metadata.pm b/lib/AccountManager/Metadata.pm
index e4524ba..e193795 100644
--- a/lib/AccountManager/Metadata.pm
+++ b/lib/AccountManager/Metadata.pm
@@ -186,6 +186,15 @@ sub parse {
                     }
                     push @{ $data->{contacts} }, $details;
                 }
+            } elsif ($child->localname() eq 'Organization') {
+                my @urls = $child->getElementsByLocalName('OrganizationURL');
+                my %urls =
+                    map { $_->getAttribute('xml:lang') => $_->textContent() }
+                    @urls;
+                $data->{organization} =
+                    $urls{en} ? $urls{en}               :
+                    @urls     ? $urls[0]->textContent() :
+                    undef;
             }
 
             ## Getting X.509 certificates
diff --git a/t/metadata.t b/t/metadata.t
index 4415581..5a709a6 100755
--- a/t/metadata.t
+++ b/t/metadata.t
@@ -10,7 +10,7 @@ use Test::Exception;
 
 use AccountManager::Metadata;
 
-plan tests => 21;
+plan tests => 22;
 
 my $metadata;
 
@@ -91,6 +91,7 @@ ok(defined $sp, 'filtered metadata extraction: defined result');
 ok(ref $sp eq 'ARRAY', 'filtered metadata extraction: result type');
 ok(scalar @$sp == 1, 'filtered metadata extraction: result count');
 is($sp->[0]->{entityid}, 'https://filesender.ipm.ir/', 'filtered entity has expected ID');
+is($sp->[0]->{organization}, 'http://www.ipm.ir/', 'filtered entity has expected organization URL');
 
 my $none = $metadata->parse(id => 'https://no.such.sp/');
 ok(defined $none, 'filtered metadata extraction: defined result');
-- 
GitLab