/** * Initialize an EntitiesDescriptor. * * @param \DOMElement|null $xml The XML element we should load. */ public function __construct(\DOMElement $xml = null) { parent::__construct($xml); if ($xml === null) { return; } if ($xml->hasAttribute('ID')) { $this->ID = $xml->getAttribute('ID'); } if ($xml->hasAttribute('validUntil')) { $this->validUntil = Utils::xsDateTimeToTimestamp($xml->getAttribute('validUntil')); } if ($xml->hasAttribute('cacheDuration')) { $this->cacheDuration = $xml->getAttribute('cacheDuration'); } if ($xml->hasAttribute('Name')) { $this->Name = $xml->getAttribute('Name'); } $this->Extensions = Extensions::getList($xml); foreach (Utils::xpQuery($xml, './saml_metadata:EntityDescriptor|./saml_metadata:EntitiesDescriptor') as $node) { if ($node->localName === 'EntityDescriptor') { $this->children[] = new EntityDescriptor($node); } else { $this->children[] = new EntitiesDescriptor($node); } } }
/** * Initialize a ContactPerson element. * * @param \DOMElement|null $xml The XML element we should load. * @throws \Exception */ public function __construct(\DOMElement $xml = null) { if ($xml === null) { return; } if (!$xml->hasAttribute('contactType')) { throw new \Exception('Missing contactType on ContactPerson.'); } $this->contactType = $xml->getAttribute('contactType'); $this->Extensions = Extensions::getList($xml); $this->Company = self::getStringElement($xml, 'Company'); $this->GivenName = self::getStringElement($xml, 'GivenName'); $this->SurName = self::getStringElement($xml, 'SurName'); $this->EmailAddress = self::getStringElements($xml, 'EmailAddress'); $this->TelephoneNumber = self::getStringElements($xml, 'TelephoneNumber'); }
/** * Initialize an Organization element. * * @param \DOMElement|null $xml The XML element we should load. */ public function __construct(\DOMElement $xml = null) { if ($xml === null) { return; } $this->Extensions = Extensions::getList($xml); $this->OrganizationName = Utils::extractLocalizedStrings($xml, Constants::NS_MD, 'OrganizationName'); if (empty($this->OrganizationName)) { $this->OrganizationName = array('invalid' => ''); } $this->OrganizationDisplayName = Utils::extractLocalizedStrings($xml, Constants::NS_MD, 'OrganizationDisplayName'); if (empty($this->OrganizationDisplayName)) { $this->OrganizationDisplayName = array('invalid' => ''); } $this->OrganizationURL = Utils::extractLocalizedStrings($xml, Constants::NS_MD, 'OrganizationURL'); if (empty($this->OrganizationURL)) { $this->OrganizationURL = array('invalid' => ''); } }
/** * Initialize a RoleDescriptor. * * @param string $elementName The name of this element. * @param \DOMElement|null $xml The XML element we should load. * @throws \Exception */ protected function __construct($elementName, \DOMElement $xml = null) { assert('is_string($elementName)'); parent::__construct($xml); $this->elementName = $elementName; if ($xml === null) { return; } if ($xml->hasAttribute('ID')) { $this->ID = $xml->getAttribute('ID'); } if ($xml->hasAttribute('validUntil')) { $this->validUntil = Utils::xsDateTimeToTimestamp($xml->getAttribute('validUntil')); } if ($xml->hasAttribute('cacheDuration')) { $this->cacheDuration = $xml->getAttribute('cacheDuration'); } if (!$xml->hasAttribute('protocolSupportEnumeration')) { throw new \Exception('Missing protocolSupportEnumeration attribute on ' . $xml->localName); } $this->protocolSupportEnumeration = preg_split('/[\\s]+/', $xml->getAttribute('protocolSupportEnumeration')); if ($xml->hasAttribute('errorURL')) { $this->errorURL = $xml->getAttribute('errorURL'); } $this->Extensions = Extensions::getList($xml); foreach (Utils::xpQuery($xml, './saml_metadata:KeyDescriptor') as $kd) { $this->KeyDescriptor[] = new KeyDescriptor($kd); } $organization = Utils::xpQuery($xml, './saml_metadata:Organization'); if (count($organization) > 1) { throw new \Exception('More than one Organization in the entity.'); } elseif (!empty($organization)) { $this->Organization = new Organization($organization[0]); } foreach (Utils::xpQuery($xml, './saml_metadata:ContactPerson') as $cp) { $this->contactPersons[] = new ContactPerson($cp); } }
/** * Initialize an EntitiyDescriptor. * * @param \DOMElement|null $xml The XML element we should load. * @throws \Exception */ public function __construct(\DOMElement $xml = null) { parent::__construct($xml); if ($xml === null) { return; } if (!$xml->hasAttribute('entityID')) { throw new \Exception('Missing required attribute entityID on EntityDescriptor.'); } $this->entityID = $xml->getAttribute('entityID'); if ($xml->hasAttribute('ID')) { $this->ID = $xml->getAttribute('ID'); } if ($xml->hasAttribute('validUntil')) { $this->validUntil = Utils::xsDateTimeToTimestamp($xml->getAttribute('validUntil')); } if ($xml->hasAttribute('cacheDuration')) { $this->cacheDuration = $xml->getAttribute('cacheDuration'); } $this->Extensions = Extensions::getList($xml); for ($node = $xml->firstChild; $node !== null; $node = $node->nextSibling) { if (!$node instanceof \DOMElement) { continue; } if ($node->namespaceURI !== Constants::NS_MD) { continue; } switch ($node->localName) { case 'RoleDescriptor': $this->RoleDescriptor[] = new UnknownRoleDescriptor($node); break; case 'IDPSSODescriptor': $this->RoleDescriptor[] = new IDPSSODescriptor($node); break; case 'SPSSODescriptor': $this->RoleDescriptor[] = new SPSSODescriptor($node); break; case 'AuthnAuthorityDescriptor': $this->RoleDescriptor[] = new AuthnAuthorityDescriptor($node); break; case 'AttributeAuthorityDescriptor': $this->RoleDescriptor[] = new AttributeAuthorityDescriptor($node); break; case 'PDPDescriptor': $this->RoleDescriptor[] = new PDPDescriptor($node); break; } } $affiliationDescriptor = Utils::xpQuery($xml, './saml_metadata:AffiliationDescriptor'); if (count($affiliationDescriptor) > 1) { throw new \Exception('More than one AffiliationDescriptor in the entity.'); } elseif (!empty($affiliationDescriptor)) { $this->AffiliationDescriptor = new AffiliationDescriptor($affiliationDescriptor[0]); } if (empty($this->RoleDescriptor) && is_null($this->AffiliationDescriptor)) { throw new \Exception('Must have either one of the RoleDescriptors or an AffiliationDescriptor in EntityDescriptor.'); } elseif (!empty($this->RoleDescriptor) && !is_null($this->AffiliationDescriptor)) { throw new \Exception('AffiliationDescriptor cannot be combined with other RoleDescriptor elements in EntityDescriptor.'); } $organization = Utils::xpQuery($xml, './saml_metadata:Organization'); if (count($organization) > 1) { throw new \Exception('More than one Organization in the entity.'); } elseif (!empty($organization)) { $this->Organization = new Organization($organization[0]); } foreach (Utils::xpQuery($xml, './saml_metadata:ContactPerson') as $cp) { $this->ContactPerson[] = new ContactPerson($cp); } foreach (Utils::xpQuery($xml, './saml_metadata:AdditionalMetadataLocation') as $aml) { $this->AdditionalMetadataLocation[] = new AdditionalMetadataLocation($aml); } }
/** * Initialize a AffiliationDescriptor. * * @param \DOMElement|null $xml The XML element we should load. * @throws \Exception */ public function __construct(\DOMElement $xml = null) { parent::__construct($xml); if ($xml === null) { return; } if (!$xml->hasAttribute('affiliationOwnerID')) { throw new \Exception('Missing affiliationOwnerID on AffiliationDescriptor.'); } $this->affiliationOwnerID = $xml->getAttribute('affiliationOwnerID'); if ($xml->hasAttribute('ID')) { $this->ID = $xml->getAttribute('ID'); } if ($xml->hasAttribute('validUntil')) { $this->validUntil = Utils::xsDateTimeToTimestamp($xml->getAttribute('validUntil')); } if ($xml->hasAttribute('cacheDuration')) { $this->cacheDuration = $xml->getAttribute('cacheDuration'); } $this->Extensions = Extensions::getList($xml); $this->AffiliateMember = Utils::extractStrings($xml, Constants::NS_MD, 'AffiliateMember'); if (empty($this->AffiliateMember)) { throw new \Exception('Missing AffiliateMember in AffiliationDescriptor.'); } foreach (Utils::xpQuery($xml, './saml_metadata:KeyDescriptor') as $kd) { $this->KeyDescriptor[] = new KeyDescriptor($kd); } }