Skip to content

Commit

Permalink
Handle multiple entity descriptors in IdP metadata, by choosing the f…
Browse files Browse the repository at this point in the history
…irst one. (#862)
  • Loading branch information
27pchrisl authored Jul 18, 2022
1 parent 0bb219b commit 6ccc6eb
Showing 1 changed file with 15 additions and 5 deletions.
20 changes: 15 additions & 5 deletions Provider.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
use LightSaml\Model\Context\SerializationContext;
use LightSaml\Model\Metadata\AssertionConsumerService;
use LightSaml\Model\Metadata\ContactPerson;
use LightSaml\Model\Metadata\EntitiesDescriptor;
use LightSaml\Model\Metadata\EntityDescriptor;
use LightSaml\Model\Metadata\KeyDescriptor;
use LightSaml\Model\Metadata\Metadata;
Expand Down Expand Up @@ -252,9 +253,20 @@ protected function getIdentityProviderEntityDescriptorManually(): EntityDescript
return $builder->get();
}

protected function getFirstEntityDescriptorFromXml(string $xml): EntityDescriptor
{
$descriptor = Metadata::fromXML($xml, new DeserializationContext());

if ($descriptor instanceof EntitiesDescriptor) {
return Arr::first($descriptor->getAllEntityDescriptors());
}

return $descriptor;
}

protected function getIdentityProviderEntityDescriptorFromXml(): EntityDescriptor
{
return Metadata::fromXML($this->getConfig('metadata'), new DeserializationContext());
return $this->getFirstEntityDescriptorFromXml($this->getConfig('metadata'));
}

protected function getIdentityProviderEntityDescriptorFromUrl(): EntityDescriptor
Expand All @@ -263,10 +275,8 @@ protected function getIdentityProviderEntityDescriptorFromUrl(): EntityDescripto
$xml = Cache::get(self::CACHE_KEY);
$ttl = Cache::get(self::CACHE_KEY_TTL);

$deserializationContext = new DeserializationContext();

if ($xml && $ttl && $ttl + $this->getConfig('ttl', 86400) > time()) {
return Metadata::fromXML($xml, $deserializationContext);
return $this->getFirstEntityDescriptorFromXml($xml);
}

Cache::forever(self::CACHE_KEY_TTL, time());
Expand All @@ -284,7 +294,7 @@ protected function getIdentityProviderEntityDescriptorFromUrl(): EntityDescripto
}
}

return Metadata::fromXML($xml, $deserializationContext);
return $this->getFirstEntityDescriptorFromXml($xml);
}

/**
Expand Down

0 comments on commit 6ccc6eb

Please sign in to comment.