3131use LightSaml \Model \Context \SerializationContext ;
3232use LightSaml \Model \Metadata \AssertionConsumerService ;
3333use LightSaml \Model \Metadata \ContactPerson ;
34+ use LightSaml \Model \Metadata \EntitiesDescriptor ;
3435use LightSaml \Model \Metadata \EntityDescriptor ;
3536use LightSaml \Model \Metadata \KeyDescriptor ;
3637use LightSaml \Model \Metadata \Metadata ;
@@ -252,9 +253,20 @@ protected function getIdentityProviderEntityDescriptorManually(): EntityDescript
252253 return $ builder ->get ();
253254 }
254255
256+ protected function getFirstEntityDescriptorFromXml (string $ xml ): EntityDescriptor
257+ {
258+ $ descriptor = Metadata::fromXML ($ xml , new DeserializationContext ());
259+
260+ if ($ descriptor instanceof EntitiesDescriptor) {
261+ return Arr::first ($ descriptor ->getAllEntityDescriptors ());
262+ }
263+
264+ return $ descriptor ;
265+ }
266+
255267 protected function getIdentityProviderEntityDescriptorFromXml (): EntityDescriptor
256268 {
257- return Metadata:: fromXML ($ this ->getConfig ('metadata ' ), new DeserializationContext ( ));
269+ return $ this -> getFirstEntityDescriptorFromXml ($ this ->getConfig ('metadata ' ));
258270 }
259271
260272 protected function getIdentityProviderEntityDescriptorFromUrl (): EntityDescriptor
@@ -263,10 +275,8 @@ protected function getIdentityProviderEntityDescriptorFromUrl(): EntityDescripto
263275 $ xml = Cache::get (self ::CACHE_KEY );
264276 $ ttl = Cache::get (self ::CACHE_KEY_TTL );
265277
266- $ deserializationContext = new DeserializationContext ();
267-
268278 if ($ xml && $ ttl && $ ttl + $ this ->getConfig ('ttl ' , 86400 ) > time ()) {
269- return Metadata:: fromXML ($ xml, $ deserializationContext );
279+ return $ this -> getFirstEntityDescriptorFromXml ($ xml );
270280 }
271281
272282 Cache::forever (self ::CACHE_KEY_TTL , time ());
@@ -284,7 +294,7 @@ protected function getIdentityProviderEntityDescriptorFromUrl(): EntityDescripto
284294 }
285295 }
286296
287- return Metadata:: fromXML ($ xml, $ deserializationContext );
297+ return $ this -> getFirstEntityDescriptorFromXml ($ xml );
288298 }
289299
290300 /**
0 commit comments