Revision: 1948
Author: olavmrk
Date: Wed Nov  4 05:52:40 2009
Log: SAMLBuilder: Convert the various addMetadata-methods to use the  
Configuration class.
http://code.google.com/p/simplesamlphp/source/detail?r=1948

Modified:
  /trunk/lib/SimpleSAML/Metadata/SAMLBuilder.php

=======================================
--- /trunk/lib/SimpleSAML/Metadata/SAMLBuilder.php      Wed Nov  4 05:52:30 2009
+++ /trunk/lib/SimpleSAML/Metadata/SAMLBuilder.php      Wed Nov  4 05:52:40 2009
@@ -92,38 +92,37 @@
        }

        /**
-        * @param $metadata Metadata array
+        * @param SimpleSAML_Configuration $metadata  Metadata.
         * @param $e Reference to the element where the Extensions element 
should  
be included.
         */
-       private function addExtensions($metadata, &$e = NULL) {
+       private function addExtensions(SimpleSAML_Configuration $metadata, &$e 
=  
NULL) {
                $extensions = $this->createElement('Extensions');
                $includeExtensions = FALSE;

-               if (array_key_exists('tags', $metadata)) {
+               if ($metadata->hasValue('tags')) {
                        $includeExtensions = TRUE;
                        $attr =  
$this->createElement('saml:Attribute', 'urn:oasis:names:tc:SAML:2.0:assertion');
                        $attr->setAttribute('Name', 'tags');
-                       foreach ($metadata['tags'] AS $tag) {
+                       foreach ($metadata->getArray('tags') as $tag) {
                                
$attr->appendChild($this->createTextElement('saml:AttributeValue',  
$tag, 'urn:oasis:names:tc:SAML:2.0:assertion'));
                        }
                        $extensions->appendChild($attr);
                }

-               if (array_key_exists('hint.cidr', $metadata)) {
+               if ($metadata->hasValue('hint.cidr')) {
                        $includeExtensions = TRUE;
                        $attr =  
$this->createElement('saml:Attribute', 'urn:oasis:names:tc:SAML:2.0:assertion');
                        $attr->setAttribute('Name', 'hint.cidr');
-                       $hints = self::arrayize($metadata['hint.cidr']);
-                       foreach ($hints AS $hint) {
+                       foreach ($metadata->getArrayizeString('hint.cidr') as 
$hint) {
                                
$attr->appendChild($this->createTextElement('saml:AttributeValue',  
$hint, 'urn:oasis:names:tc:SAML:2.0:assertion'));
                        }
                        $extensions->appendChild($attr);
                }


-               if (array_key_exists('scope', $metadata)) {
+               if ($metadata->hasValue('scope')) {
                        $includeExtensions = TRUE;
-                       foreach ($metadata['scope'] AS $scopetext) {
+                       foreach ($metadata->getArray('scope') as $scopetext) {
                                $scope =  
$this->createElement('shibmd:Scope', 'urn:mace:shibboleth:metadata:1.0');
                                $scope->setAttribute('regexp', 'false');
                                
$scope->appendChild($this->document->createTextNode($scopetext));
@@ -239,118 +238,101 @@
                assert('isset($metadata["entityid"])');
                assert('isset($metadata["metadata-set"])');

+               $metadata = SimpleSAML_Configuration::loadFromArray($metadata,  
$metadata['entityid']);
+
                $e = $this->createElement('SPSSODescriptor');
                 
$e->setAttribute('protocolSupportEnumeration', 
'urn:oasis:names:tc:SAML:2.0:protocol');
-
-
+
+
                $this->addExtensions($metadata, $e);

                $this->addCertificate($e, $metadata);

-               if (array_key_exists('SingleLogoutService', $metadata)) {
+               if ($metadata->hasValue('SingleLogoutService')) {
                        $t = $this->createElement('SingleLogoutService');
                         
$t->setAttribute('Binding', 
'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect');
-                       $t->setAttribute('Location', 
$metadata['SingleLogoutService']);
-
-                       if (array_key_exists('SingleLogoutServiceResponse', 
$metadata)) {
-                               $t->setAttribute('ResponseLocation',  
$metadata['SingleLogoutServiceResponse']);
+                       $t->setAttribute('Location',  
$metadata->getString('SingleLogoutService'));
+
+                       if ($metadata->hasValue('SingleLogoutServiceResponse')) 
{
+                               $t->setAttribute('ResponseLocation',  
$metadata->getString('SingleLogoutServiceResponse'));
                        }

                        $e->appendChild($t);
                }

-               if (array_key_exists('NameIDFormat', $metadata)) {
+               if ($metadata->hasValue('NameIDFormat')) {
                        $t = $this->createElement('NameIDFormat');
-                        
$t->appendChild($this->document->createTextNode($metadata['NameIDFormat']));
+                        
$t->appendChild($this->document->createTextNode($metadata->getString('NameIDFormat')));
                        $e->appendChild($t);
                }

                $acsIndex = 0;
-               if (array_key_exists('AssertionConsumerService', $metadata)) {
-                       foreach  
(SimpleSAML_Utilities::arrayize($metadata['AssertionConsumerService']) as  
$acs) {
-                               $t = 
$this->createElement('AssertionConsumerService');
-                               $t->setAttribute('index', (string)$acsIndex);
-                                
$t->setAttribute('Binding', 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST');
-                               $t->setAttribute('Location', $acs);
-                               $e->appendChild($t);
-                               $acsIndex += 1;
-                       }
-               }
-               if (array_key_exists('AssertionConsumerService.artifact', 
$metadata)) {
-                       foreach  
(SimpleSAML_Utilities::arrayize($metadata['AssertionConsumerService.artifact']) 
 
as $acs) {
-                               $t = 
$this->createElement('AssertionConsumerService');
-                               $t->setAttribute('index', (string)$acsIndex);
-                                
$t->setAttribute('Binding', 
'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact');
-                               $t->setAttribute('Location', $acs);
-                               $e->appendChild($t);
-                               $acsIndex += 1;
-                       }
-
+               foreach 
($metadata->getArrayizeString('AssertionConsumerService',  
array()) as $acs) {
+                       $t = $this->createElement('AssertionConsumerService');
+                       $t->setAttribute('index', (string)$acsIndex);
+                        
$t->setAttribute('Binding', 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST');
+                       $t->setAttribute('Location', $acs);
+                       $e->appendChild($t);
+                       $acsIndex += 1;
+               }
+               foreach  
($metadata->getArrayizeString('AssertionConsumerService.artifact', array())  
as $acs) {
+                       $t = $this->createElement('AssertionConsumerService');
+                       $t->setAttribute('index', (string)$acsIndex);
+                        
$t->setAttribute('Binding', 
'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact');
+                       $t->setAttribute('Location', $acs);
+                       $e->appendChild($t);
+                       $acsIndex += 1;
                }

-
-               if ( array_key_exists('name', $metadata) &&  
array_key_exists('attributes', $metadata)) {
-                       /**
+               $attributes = $metadata->getArray('attributes', array());
+               if ( $metadata->hasValue('name') && count($attributes) > 0 ) {
+                       /*
                         * Add an AttributeConsumingService element with 
information as name  
and description and list
                         * of requested attributes
                         */
                        $attributeconsumer = 
$this->createElement('AttributeConsumingService');
                        $attributeconsumer->setAttribute('index', '0');
-
-                       if (array_key_exists('name', $metadata)) {
-                               if (is_array($metadata['name'])) {
-                                       foreach($metadata['name'] AS $lang => 
$localname) {
-                                               $t = 
$this->createTextElement('ServiceName', $localname);
-                                               $t->setAttribute('xml:lang', 
$lang);
-                                               
$attributeconsumer->appendChild($t);
-                                       }
-                               } else {
-                                       $t = 
$this->createTextElement('ServiceName', $metadata['name']);
-                                       $t->setAttribute('xml:lang', 'en');
-                                       $attributeconsumer->appendChild($t);
-                               }
-                       }
-
-
-
-                       if (array_key_exists('description', $metadata)) {
-                               if (is_array($metadata['description'])) {
-                                       foreach($metadata['description'] AS 
$lang => $localname) {
-                                               $t = 
$this->createTextElement('ServiceDescription', $localname);
-                                               $t->setAttribute('xml:lang', 
$lang);
-                                               
$attributeconsumer->appendChild($t);
-                                       }
-                               } else {
-                                       $t = 
$this->createTextElement('ServiceDescription',  
$metadata['description']);
-                                       $t->setAttribute('xml:lang', 'en');
-                                       $attributeconsumer->appendChild($t);
-                               }
-                       }
-
-                       if (array_key_exists('attributes', $metadata) &&  
is_array($metadata['attributes'])) {
-                               foreach ($metadata['attributes'] AS $attribute) 
{
-                                       $t = 
$this->createElement('RequestedAttribute');
-                                       $t->setAttribute('Name', $attribute);
-                                       $attributeconsumer->appendChild($t);
-                               }
-                       }
+
+                       $name = $metadata->getArrayizeString('name');
+                       foreach($name AS $lang => $localname) {
+                               if ($lang === 0) {
+                                       /* We use 'en' as the default language. 
*/
+                                       $lang = 'en';
+                               }
+                               $t = $this->createTextElement('ServiceName', 
$localname);
+                               $t->setAttribute('xml:lang', $lang);
+                               $attributeconsumer->appendChild($t);
+                       }
+
+                       $description = 
$metadata->getArrayizeString('description', array());
+                       foreach($metadata['description'] AS $lang => 
$localname) {
+                               if ($lang === 0) {
+                                       /* We use 'en' as the default language. 
*/
+                                       $lang = 'en';
+                               }
+                               $t = 
$this->createTextElement('ServiceDescription', $localname);
+                               $t->setAttribute('xml:lang', $lang);
+                               $attributeconsumer->appendChild($t);
+                       }
+
+
+                       foreach ($attributes as $attribute) {
+                               $t = $this->createElement('RequestedAttribute');
+                               $t->setAttribute('Name', $attribute);
+                               $attributeconsumer->appendChild($t);
+                       }
+
                        $e->appendChild($attributeconsumer);
                }

                $this->entityDescriptor->appendChild($e);
-
-
-
-               if (array_key_exists('contacts', $metadata) &&  
is_array($metadata['contacts']) ) {
-                       foreach($metadata['contacts'] AS $contact) {
-                               if (array_key_exists('contactType', $contact) 
&&  
array_key_exists('emailAddress', $contact)) {
-                    $this->addContact($contact['contactType'], $contact);
-                               }
+
+               foreach ($metadata->getArray('contacts', array()) as $contact) {
+                       if (array_key_exists('contactType', $contact) &&  
array_key_exists('emailAddress', $contact)) {
+                               $this->addContact($contact['contactType'], 
$contact);
                        }
                }
-
-
-
+
        }


@@ -364,51 +346,49 @@
                assert('isset($metadata["entityid"])');
                assert('isset($metadata["metadata-set"])');

+               $metadata = SimpleSAML_Configuration::loadFromArray($metadata,  
$metadata['entityid']);
+
                $e = $this->createElement('IDPSSODescriptor');
                 
$e->setAttribute('protocolSupportEnumeration', 
'urn:oasis:names:tc:SAML:2.0:protocol');

-               if (array_key_exists('redirect.sign', $metadata) &&  
$metadata['redirect.sign']) {
+               if ($metadata->getBoolean('redirect.sign', FALSE)) {
                        $e->setAttribute('WantAuthnRequestSigned', 'true');
                }
-
+
                $this->addExtensions($metadata, $e);

                $this->addCertificate($e, $metadata);

-               if (array_key_exists('SingleLogoutService', $metadata)) {
+               if ($metadata->hasValue('SingleLogoutService')) {
                        $t = $this->createElement('SingleLogoutService');
                         
$t->setAttribute('Binding', 
'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect');
-                       $t->setAttribute('Location', 
$metadata['SingleLogoutService']);
-
-                       if (array_key_exists('SingleLogoutServiceResponse', 
$metadata)) {
-                               $t->setAttribute('ResponseLocation',  
$metadata['SingleLogoutServiceResponse']);
+                       $t->setAttribute('Location',  
$metadata->getString('SingleLogoutService'));
+
+                       if ($metadata->hasValue('SingleLogoutServiceResponse')) 
{
+                               $t->setAttribute('ResponseLocation',  
$metadata->getString('SingleLogoutServiceResponse'));
                        }

                        $e->appendChild($t);
                }

-               if (array_key_exists('NameIDFormat', $metadata)) {
+               if ($metadata->hasValue('NameIDFormat')) {
                        $t = $this->createElement('NameIDFormat');
-                        
$t->appendChild($this->document->createTextNode($metadata['NameIDFormat']));
+                        
$t->appendChild($this->document->createTextNode($metadata->getString('NameIDFormat')));
                        $e->appendChild($t);
                }

-               if (array_key_exists('SingleSignOnService', $metadata)) {
+               if ($metadata->hasValue('SingleSignOnService')) {
                        $t = $this->createElement('SingleSignOnService');
                         
$t->setAttribute('Binding', 
'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect');
-                       $t->setAttribute('Location', 
$metadata['SingleSignOnService']);
+                       $t->setAttribute('Location',  
$metadata->getString('SingleSignOnService'));
                        $e->appendChild($t);
                }
-
+
                $this->entityDescriptor->appendChild($e);
-
-
-
-               if (array_key_exists('contacts', $metadata) &&  
is_array($metadata['contacts']) ) {
-                       foreach($metadata['contacts'] AS $contact) {
-                               if (array_key_exists('contactType', $contact) 
&&  
array_key_exists('emailAddress', $contact)) {
-                    $this->addContact($contact['contactType'], $contact);
-                               }
+
+               foreach ($metadata->getArray('contacts', array()) as $contact) {
+                       if (array_key_exists('contactType', $contact) &&  
array_key_exists('emailAddress', $contact)) {
+                               $this->addContact($contact['contactType'], 
$contact);
                        }
                }

@@ -425,38 +405,35 @@
                assert('isset($metadata["entityid"])');
                assert('isset($metadata["metadata-set"])');

+               $metadata = SimpleSAML_Configuration::loadFromArray($metadata,  
$metadata['entityid']);
+
                $e = $this->createElement('SPSSODescriptor');
                 
$e->setAttribute('protocolSupportEnumeration', 
'urn:oasis:names:tc:SAML:1.1:protocol');

                $this->addCertificate($e, $metadata);

-               if (array_key_exists('NameIDFormat', $metadata)) {
+               if ($metadata->hasValue('NameIDFormat')) {
                        $t = $this->createElement('NameIDFormat');
-                        
$t->appendChild($this->document->createTextNode($metadata['NameIDFormat']));
+                        
$t->appendChild($this->document->createTextNode($metadata->getString('NameIDFormat')));
                        $e->appendChild($t);
                }

                $acsIndex = 0;
-               if (array_key_exists('AssertionConsumerService', $metadata)) {
-                       foreach  
(SimpleSAML_Utilities::arrayize($metadata['AssertionConsumerService']) as  
$acs) {
-                               $t = 
$this->createElement('AssertionConsumerService');
-                               $t->setAttribute('index', (string)$acsIndex);
-                                
$t->setAttribute('Binding', 
'urn:oasis:names:tc:SAML:1.0:profiles:browser-post');
-                               $t->setAttribute('Location', $acs);
-                               $e->appendChild($t);
-                               $acsIndex += 1;
-                       }
-               }
-               if (array_key_exists('AssertionConsumerService.artifact', 
$metadata)) {
-                       foreach  
(SimpleSAML_Utilities::arrayize($metadata['AssertionConsumerService.artifact']) 
 
as $acs) {
-                               $t = 
$this->createElement('AssertionConsumerService');
-                               $t->setAttribute('index', (string)$acsIndex);
-                                
$t->setAttribute('Binding', 'urn:oasis:names:tc:SAML:1.0:profiles:artifact-01');
-                               $t->setAttribute('Location', $acs);
-                               $e->appendChild($t);
-                               $acsIndex += 1;
-                       }
-
+               foreach 
($metadata->getArrayizeString('AssertionConsumerService',  
array()) as $acs) {
+                       $t = $this->createElement('AssertionConsumerService');
+                       $t->setAttribute('index', (string)$acsIndex);
+                        
$t->setAttribute('Binding', 
'urn:oasis:names:tc:SAML:1.0:profiles:browser-post');
+                       $t->setAttribute('Location', $acs);
+                       $e->appendChild($t);
+                       $acsIndex += 1;
+               }
+               foreach  
($metadata->getArrayizeString('AssertionConsumerService.artifact', array())  
as $acs) {
+                       $t = $this->createElement('AssertionConsumerService');
+                       $t->setAttribute('index', (string)$acsIndex);
+                        
$t->setAttribute('Binding', 'urn:oasis:names:tc:SAML:1.0:profiles:artifact-01');
+                       $t->setAttribute('Location', $acs);
+                       $e->appendChild($t);
+                       $acsIndex += 1;
                }

                $this->entityDescriptor->appendChild($e);
@@ -473,21 +450,23 @@
                assert('isset($metadata["entityid"])');
                assert('isset($metadata["metadata-set"])');

+               $metadata = SimpleSAML_Configuration::loadFromArray($metadata,  
$metadata['entityid']);
+
                $e = $this->createElement('IDPSSODescriptor');
                 
$e->setAttribute('protocolSupportEnumeration', 
'urn:oasis:names:tc:SAML:1.1:protocol');

                $this->addCertificate($e, $metadata);

-               if (array_key_exists('NameIDFormat', $metadata)) {
+               if ($metadata->hasValue('NameIDFormat')) {
                        $t = $this->createElement('NameIDFormat');
-                        
$t->appendChild($this->document->createTextNode($metadata['NameIDFormat']));
+                        
$t->appendChild($this->document->createTextNode($metadata->getString('NameIDFormat')));
                        $e->appendChild($t);
                }

-               if (array_key_exists('SingleSignOnService', $metadata)) {
+               if ($metadata->hasValue('SingleSignOnService')) {
                        $t = $this->createElement('SingleSignOnService');
                         
$t->setAttribute('Binding', 'urn:mace:shibboleth:1.0:profiles:AuthnRequest');
-                       $t->setAttribute('Location', 
$metadata['SingleSignOnService']);
+                       $t->setAttribute('Location',  
$metadata->getString('SingleSignOnService'));
                        $e->appendChild($t);
                }

@@ -648,12 +627,11 @@
         *
         * @param DOMElement $ssoDesc  The IDPSSODescroptor or SPSSODecriptor 
the  
certificate
         *                             should be added to.
-        * @param array $metadata  The metadata for the entity.
+        * @param SimpleSAML_Configuration $metadata  The metadata for the 
entity.
         */
-       private function addCertificate(DOMElement $ssoDesc, $metadata) {
-               assert('is_array($metadata)');
-
-               $certInfo = SimpleSAML_Utilities::loadPublicKey($metadata);
+       private function addCertificate(DOMElement $ssoDesc,  
SimpleSAML_Configuration $metadata) {
+
+               $certInfo = 
SimpleSAML_Utilities::loadPublicKey($metadata->toArray());
                if ($certInfo === NULL || !array_key_exists('certData', 
$certInfo)) {
                        /* No certificate to add. */
                        return;

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"simpleSAMLphp commits" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/simplesamlphp-commits?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to