diff --git a/lib/SAML2/XML/md/Extensions.php b/lib/SAML2/XML/md/Extensions.php index d3d237acc2a25e10d8569aae5148a64d0f833a3c..797bdaf09e3ffc13505d20ebfae3897708e27d80 100644 --- a/lib/SAML2/XML/md/Extensions.php +++ b/lib/SAML2/XML/md/Extensions.php @@ -22,6 +22,8 @@ class SAML2_XML_md_Extensions { $ret[] = new SAML2_XML_shibmd_Scope($node); } elseif ($node->namespaceURI === SAML2_XML_mdattr_EntityAttributes::NS && $node->localName === 'EntityAttributes') { $ret[] = new SAML2_XML_mdattr_EntityAttributes($node); + } elseif ($node->namespaceURI === SAML2_XML_mdrpi_Common::NS_MDRPI && $node->localName === 'RegistrationInfo') { + $ret[] = new SAML2_XML_mdrpi_RegistrationInfo($node); } elseif ($node->namespaceURI === SAML2_XML_mdrpi_Common::NS_MDRPI && $node->localName === 'PublicationInfo') { $ret[] = new SAML2_XML_mdrpi_PublicationInfo($node); } elseif ($node->namespaceURI === SAML2_XML_mdui_UIInfo::NS && $node->localName === 'UIInfo') { diff --git a/lib/SAML2/XML/mdrpi/RegistrationInfo.php b/lib/SAML2/XML/mdrpi/RegistrationInfo.php new file mode 100644 index 0000000000000000000000000000000000000000..4bb334a4d038c14ec44895c08cae2015b10b9656 --- /dev/null +++ b/lib/SAML2/XML/mdrpi/RegistrationInfo.php @@ -0,0 +1,86 @@ +<?php + +/** + * Class for handling the mdrpi:RegistrationInfo element. + * + * @link: http://docs.oasis-open.org/security/saml/Post2.0/saml-metadata-rpi/v1.0/saml-metadata-rpi-v1.0.pdf + * @package simpleSAMLphp + * @version $Id$ + */ +class SAML2_XML_mdrpi_RegistrationInfo { + + /** + * The identifier of the metadata registration authority. + * + * @var string + */ + public $registrationAuthority; + + /** + * The registration timestamp for the metadata, as a UNIX timestamp. + * + * @var int|NULL + */ + public $registrationInstant; + + /** + * Link to registration policy for this metadata. + * + * This is an associative array with language=>URL. + * + * @var array + */ + public $RegistrationPolicy = array(); + + + /** + * Create/parse a mdrpi:RegistrationInfo element. + * + * @param DOMElement|NULL $xml The XML element we should load. + */ + public function __construct(DOMElement $xml = NULL) { + + if ($xml === NULL) { + return; + } + + if (!$xml->hasAttribute('registrationAuthority')) { + throw new Exception('Missing required attribute "registrationAuthority" in mdrpi:RegistrationInfo element.'); + } + $this->registrationAuthority = $xml->getAttribute('registrationAuthority'); + + if ($xml->hasAttribute('registrationInstant')) { + $this->registrationInstant = SimpleSAML_Utilities::parseSAML2Time($xml->getAttribute('registrationInstant')); + } + + $this->RegistrationPolicy = SAML2_Utils::extractLocalizedStrings($xml, SAML2_XML_mdrpi_Common::NS_MDRPI, 'RegistrationPolicy'); + } + + + /** + * Convert this element to XML. + * + * @param DOMElement $parent The element we should append to. + */ + public function toXML(DOMElement $parent) { + assert('is_string($this->registrationAuthority)'); + assert('is_int($this->registrationInstant) || is_null($this->registrationInstant)'); + assert('is_array($this->RegistrationPolicy)'); + + $doc = $parent->ownerDocument; + + $e = $doc->createElementNS(SAML2_XML_mdrpi_Common::NS_MDRPI, 'mdrpi:RegistrationInfo'); + $parent->appendChild($e); + + $e->setAttribute('registrationAuthority', $this->registrationAuthority); + + if ($this->registrationInstant !== NULL) { + $e->setAttribute('registrationInstant', gmdate('Y-m-d\TH:i:s\Z', $this->registrationInstant)); + } + + SAML2_Utils::addStrings($e, SAML2_XML_mdrpi_Common::NS_MDRPI, 'mdrpi:RegistrationPolicy', TRUE, $this->RegistrationPolicy); + + return $e; + } + +}