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