From a9e54086da655c8565e676052e97feb07f35d955 Mon Sep 17 00:00:00 2001
From: Guillaume Rousse <guillaume.rousse@renater.fr>
Date: Fri, 3 Nov 2017 13:55:01 +0100
Subject: [PATCH] return extracted metadata directly

---
 bin/account-manager-client.pl         | 14 +++-----
 lib/IdPAccountManager/SAMLMetadata.pm | 49 +++++++--------------------
 lib/IdPAccountManager/WebRequest.pm   |  5 +--
 3 files changed, 18 insertions(+), 50 deletions(-)

diff --git a/bin/account-manager-client.pl b/bin/account-manager-client.pl
index d10d507..08d1ecc 100755
--- a/bin/account-manager-client.pl
+++ b/bin/account-manager-client.pl
@@ -158,13 +158,11 @@ sub parse_federation_metadata {
     };
     die "unable to load federation metadata: $EVAL_ERROR" if $EVAL_ERROR;
 
-    my %args;
-    if ($options{sp_entityid}) {
-        $args{filter_entity_id} = $options{sp_entityid};
-    }
-
+    my $data;
     eval {
-        $federation_metadata->parse(%args);
+        $data = $federation_metadata->parse(
+            entity_id => $options{sp_entityid},
+        );
     };
     die "unable to parse federation metadata: $EVAL_ERROR\n" if $EVAL_ERROR;
 
@@ -173,9 +171,7 @@ sub parse_federation_metadata {
 
     ## List SAML entities
     printf "Hashref representing the metadata:\n";
-    IdPAccountManager::Tools::dump_var(
-        $federation_metadata->{federation_metadata_as_hashref},
-        0, \*STDOUT);
+    IdPAccountManager::Tools::dump_var($data, 0, \*STDOUT);
 
 }
 
diff --git a/lib/IdPAccountManager/SAMLMetadata.pm b/lib/IdPAccountManager/SAMLMetadata.pm
index 588eea7..2a6d249 100644
--- a/lib/IdPAccountManager/SAMLMetadata.pm
+++ b/lib/IdPAccountManager/SAMLMetadata.pm
@@ -39,42 +39,9 @@ sub new {
 sub parse {
     my ($self, %args) = @_;
 
-    my %parser_args = (
-        metadata_as_xml    => $self->{doc},
-        filter_entity_type => 'sp'
-    );
-
-    if ($args{filter_entity_id}) {
-        $parser_args{filter_entity_id} = $args{filter_entity_id};
-    }
-
-    $self->{federation_metadata_as_hashref} =
-      $self->_parse_saml_metadata(%parser_args);
-
-    die "Failed to parse federation metadata"
-        unless defined $self->{federation_metadata_as_hashref};
-
-    return 1;
-}
-
-## Dumps the SAML metadata content
-sub print {
-    my ($self, $fd) = @_;
-    $fd = \*STDOUT unless $fd;
-
-    my $root = $self->{doc}->documentElement();
-    print $fd $root->toString();
-}
-
-## Parse a SAML federation metadata file
-sub _parse_saml_metadata {
-    my ($self, %args) = @_;
-
-    my $root = $args{metadata_as_xml};
-
     my @extracted_array;
     foreach my $EntityDescriptor (
-        @{ $root->getElementsByLocalName('EntityDescriptor') })
+        @{ $self->{doc}->getElementsByLocalName('EntityDescriptor') })
     {
 
         my $extracted_data = {};
@@ -85,9 +52,8 @@ sub _parse_saml_metadata {
             }
         }
 
-        next
-          if ($args{filter_entity_id}
-            && ($args{filter_entity_id} ne $extracted_data->{entityid}));
+        next if ($args{entity_id}
+            && ($args{entity_id} ne $extracted_data->{entityid}));
 
         $extracted_data->{xml_md} =
           IdPAccountManager::Tools::escape_xml($EntityDescriptor->toString());
@@ -283,6 +249,15 @@ sub _parse_saml_metadata {
     return \@extracted_array;
 }
 
+## Dumps the SAML metadata content
+sub print {
+    my ($self, $fd) = @_;
+    $fd = \*STDOUT unless $fd;
+
+    my $root = $self->{doc}->documentElement();
+    print $fd $root->toString();
+}
+
 1;
 __END__
 
diff --git a/lib/IdPAccountManager/WebRequest.pm b/lib/IdPAccountManager/WebRequest.pm
index 9dff134..65548e7 100755
--- a/lib/IdPAccountManager/WebRequest.pm
+++ b/lib/IdPAccountManager/WebRequest.pm
@@ -249,7 +249,7 @@ sub req_account_wizard {
     }
 
     eval {
-        $federation_metadata->parse();
+        $self->{param_out} = $federation_metadata->parse();
     };
     if ($EVAL_ERROR) {
         push @{ $self->{param_out}->{errors} }, "internal";
@@ -260,9 +260,6 @@ sub req_account_wizard {
         return undef;
     }
 
-    $self->{param_out}->{federation_metadata_as_hashref} =
-      $federation_metadata->{federation_metadata_as_hashref};
-
     return 1;
 }
 
-- 
GitLab