From 7f89ab9785e764d4b460711598182190ce455c3b Mon Sep 17 00:00:00 2001 From: Olav Morken <olav.morken@uninett.no> Date: Thu, 5 Nov 2009 11:26:51 +0000 Subject: [PATCH] SAMLParser: Seperate out RoleDescriptorType parsing from SSODescriptor parsing. git-svn-id: https://simplesamlphp.googlecode.com/svn/trunk@1958 44740490-163a-0410-bde0-09ae8108e29a --- lib/SimpleSAML/Metadata/SAMLParser.php | 71 ++++++++++++++++---------- 1 file changed, 45 insertions(+), 26 deletions(-) diff --git a/lib/SimpleSAML/Metadata/SAMLParser.php b/lib/SimpleSAML/Metadata/SAMLParser.php index 986717f2d..a760c83cf 100644 --- a/lib/SimpleSAML/Metadata/SAMLParser.php +++ b/lib/SimpleSAML/Metadata/SAMLParser.php @@ -722,26 +722,24 @@ class SimpleSAML_Metadata_SAMLParser { } - /** - * This function extracts metadata from a SSODescriptor element. + * Parse a RoleDescriptorType element. * * The returned associative array has the following elements: - * - 'protocols': Array with the protocols this SSODescriptor supports. - * - 'SingleLogoutService': Array with the single logout service endpoints. Each endpoint is stored - * as an associative array with the elements that parseGenericEndpoint returns. - * - 'nameIDFormats': The NameIDFormats supported by this SSODescriptor. This may be an empty array. - * - 'keys': Array of associative arrays with the elements from parseKeyDescriptor: + * - 'protocols': Array with the protocols supported. + * - 'expire': Timestamp for when this descriptor expires. + * - 'keys': Array of associative arrays with the elements from parseKeyDescriptor. * - * @param $element The element we should extract metadata from. + * @param DOMElement $element The element we should extract metadata from. * @param int|NULL $expireTime The unix timestamp for when this element should expire, or * NULL if unknwon. * @return Associative array with metadata we have extracted from this element. */ - private static function parseSSODescriptor($element, $expireTime) { - assert('$element instanceof DOMElement'); + private static function parseRoleDescriptorType(DOMElement $element, $expireTime) { assert('is_null($expireTime) || is_int($expireTime)'); + $ret = array(); + if ($expireTime === NULL) { /* No expiry time defined by a parent element. Check if this element defines * one. @@ -750,17 +748,49 @@ class SimpleSAML_Metadata_SAMLParser { } - $sd = array(); - if ($expireTime !== NULL) { /* We have got an expire timestamp, either from this element, or one of the * parent elements. */ - $sd['expire'] = $expireTime; + $ret['expire'] = $expireTime; } - $sd['protocols'] = self::getSupportedProtocols($element); - + $ret['protocols'] = self::getSupportedProtocols($element); + + /* Process KeyDescriptor elements. */ + $ret['keys'] = array(); + $keys = SimpleSAML_Utilities::getDOMChildren($element, 'KeyDescriptor', '@md'); + foreach($keys as $kd) { + $key = self::parseKeyDescriptor($kd); + if($key !== NULL) { + $ret['keys'][] = $key; + } + } + + return $ret; + } + + + /** + * This function extracts metadata from a SSODescriptor element. + * + * The returned associative array has the following elements: + * - 'protocols': Array with the protocols this SSODescriptor supports. + * - 'SingleLogoutService': Array with the single logout service endpoints. Each endpoint is stored + * as an associative array with the elements that parseGenericEndpoint returns. + * - 'nameIDFormats': The NameIDFormats supported by this SSODescriptor. This may be an empty array. + * - 'keys': Array of associative arrays with the elements from parseKeyDescriptor: + * + * @param $element The element we should extract metadata from. + * @param int|NULL $expireTime The unix timestamp for when this element should expire, or + * NULL if unknwon. + * @return Associative array with metadata we have extracted from this element. + */ + private static function parseSSODescriptor($element, $expireTime) { + assert('$element instanceof DOMElement'); + assert('is_null($expireTime) || is_int($expireTime)'); + + $sd = self::parseRoleDescriptorType($element, $expireTime); /* Find all SingleLogoutService elements. */ $sd['SingleLogoutService'] = array(); @@ -784,17 +814,6 @@ class SimpleSAML_Metadata_SAMLParser { $sd['nameIDFormats'][] = self::parseNameIDFormat($nif[0]); } - /* Process KeyDescriptor elements. */ - $sd['keys'] = array(); - $keys = SimpleSAML_Utilities::getDOMChildren($element, 'KeyDescriptor', '@md'); - foreach($keys as $kd) { - $key = self::parseKeyDescriptor($kd); - if($key !== NULL) { - $sd['keys'][] = $key; - } - } - - return $sd; } -- GitLab