From 9e04149ba59f5639f6430fc327813a6b51144523 Mon Sep 17 00:00:00 2001 From: Guillaume Rousse <guillaume.rousse@renater.fr> Date: Mon, 5 Feb 2018 16:17:43 +0100 Subject: [PATCH] fix type-filtering in metadata Also exclude entities without identifiable type when filtering on type. --- lib/AccountManager/Metadata.pm | 6 ++++++ t/metadata.t | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/AccountManager/Metadata.pm b/lib/AccountManager/Metadata.pm index 2b73fc4..41fce72 100644 --- a/lib/AccountManager/Metadata.pm +++ b/lib/AccountManager/Metadata.pm @@ -55,6 +55,7 @@ sub parse { next unless $child->nodeType() == XML_ELEMENT_NODE; if ($child->localname() eq 'IDPSSODescriptor') { + # skip immediatly if requested type differs next ENTITY if $args{type} && $args{type} ne 'idp'; $data->{type} = 'idp'; @@ -81,6 +82,7 @@ sub parse { } } elsif ($child->localname() eq 'SPSSODescriptor') { + # skip immediatly if requested type differs next ENTITY if $args{type} && $args{type} ne 'sp'; $data->{type} = 'sp'; @@ -169,6 +171,10 @@ sub parse { } } + # skip finaly if specific type was requested, + # and no identifiable type was found + next ENTITY if $args{type} && !$data->{type}; + push @array, $data; } diff --git a/t/metadata.t b/t/metadata.t index cecd79a..4415581 100755 --- a/t/metadata.t +++ b/t/metadata.t @@ -100,6 +100,6 @@ ok(scalar @$none == 0, 'filtered metadata extraction: result count'); my $idp = $metadata->parse(type => 'idp'); ok(defined $idp, 'filtered metadata extraction: defined result'); ok(ref $idp eq 'ARRAY', 'filtered metadata extraction: result type'); -ok(scalar @$idp == 2561, 'filtered metadata extraction: result count'); +ok(scalar @$idp == 2556, 'filtered metadata extraction: result count'); is($idp->[0]->{type}, 'idp', 'filtered entity has expected type'); -- GitLab