diff options
author | Olav Morken <olav.morken@uninett.no> | 2010-04-21 12:56:08 +0000 |
---|---|---|
committer | Olav Morken <olav.morken@uninett.no> | 2010-04-21 12:56:08 +0000 |
commit | d970a850e835bd106bb3920d93bcb09f3a45756d (patch) | |
tree | ebb0e124ef0d34b08ab26e2decfe35fddce548cd /lib/SAML2/XML/ds | |
parent | ce9c4077c5ea8898eb2480c7c251c27418bf9e53 (diff) | |
download | simplesamlphp-d970a850e835bd106bb3920d93bcb09f3a45756d.zip simplesamlphp-d970a850e835bd106bb3920d93bcb09f3a45756d.tar.gz simplesamlphp-d970a850e835bd106bb3920d93bcb09f3a45756d.tar.bz2 |
SAML2: Metadata XML classes.
git-svn-id: https://simplesamlphp.googlecode.com/svn/trunk@2261 44740490-163a-0410-bde0-09ae8108e29a
Diffstat (limited to 'lib/SAML2/XML/ds')
-rw-r--r-- | lib/SAML2/XML/ds/KeyInfo.php | 94 | ||||
-rw-r--r-- | lib/SAML2/XML/ds/KeyName.php | 45 | ||||
-rw-r--r-- | lib/SAML2/XML/ds/X509Certificate.php | 45 | ||||
-rw-r--r-- | lib/SAML2/XML/ds/X509Data.php | 74 |
4 files changed, 258 insertions, 0 deletions
diff --git a/lib/SAML2/XML/ds/KeyInfo.php b/lib/SAML2/XML/ds/KeyInfo.php new file mode 100644 index 0000000..44b4b0d --- /dev/null +++ b/lib/SAML2/XML/ds/KeyInfo.php @@ -0,0 +1,94 @@ +<?php + +/** + * Class representing a ds:KeyInfo element. + * + * @package simpleSAMLphp + * @version $Id$ + */ +class SAML2_XML_ds_KeyInfo { + + /** + * The Id attribute on this element. + * + * @var string|NULL + */ + public $Id = NULL; + + + /** + * The various key information elements. + * + * Array with various elements describing this key. + * Unknown elements will be represented by SAML2_XML_Chunk. + * + * @var array + */ + public $info = array(); + + + /** + * Initialize a KeyInfo element. + * + * @param DOMElement|NULL $xml The XML element we should load. + */ + public function __construct(DOMElement $xml = NULL) { + + if ($xml === NULL) { + return; + } + + if ($xml->hasAttribute('Id')) { + $this->Id = $xml->getAttribute('Id'); + } + + for ($n = $xml->firstChild; $n !== NULL; $n = $n->nextSibling) { + if (!($n instanceof DOMElement)) { + continue; + } + + if ($n->namespaceURI !== XMLSecurityDSig::XMLDSIGNS) { + $this->info[] = new SAML2_XML_Chunk($n); + continue; + } + switch ($n->localName) { + case 'KeyName': + $this->info[] = new SAML2_XML_ds_KeyName($n); + break; + case 'X509Data': + $this->info[] = new SAML2_XML_ds_X509Data($n); + break; + default: + $this->info[] = new SAML2_XML_Chunk($n); + break; + } + } + } + + + /** + * Convert this KeyInfo to XML. + * + * @param DOMElement $parent The element we should append this KeyInfo to. + */ + public function toXML(DOMElement $parent) { + assert('is_null($this->Id) || is_string($this->Id)'); + assert('is_array($this->info)'); + + $doc = $parent->ownerDocument; + + $e = $doc->createElementNS(XMLSecurityDSig::XMLDSIGNS, 'ds:KeyInfo'); + $parent->appendChild($e); + + if (isset($this->Id)) { + $e->setAttribute('Id', $this->Id); + } + + foreach ($this->info as $n) { + $n->toXML($e); + } + + return $e; + } + +} diff --git a/lib/SAML2/XML/ds/KeyName.php b/lib/SAML2/XML/ds/KeyName.php new file mode 100644 index 0000000..6eae3a4 --- /dev/null +++ b/lib/SAML2/XML/ds/KeyName.php @@ -0,0 +1,45 @@ +<?php + +/** + * Class representing a ds:KeyName element. + * + * @package simpleSAMLphp + * @version $Id$ + */ +class SAML2_XML_ds_KeyName { + + /** + * The key name. + * + * @var string + */ + public $name; + + + /** + * Initialize a KeyName element. + * + * @param DOMElement|NULL $xml The XML element we should load. + */ + public function __construct(DOMElement $xml = NULL) { + + if ($xml === NULL) { + return; + } + + $this->name = $xml->textContent; + } + + + /** + * Convert this KeyName element to XML. + * + * @param DOMElement $parent The element we should append this KeyName element to. + */ + public function toXML(DOMElement $parent) { + assert('is_string($this->name)'); + + return SAML2_Utils::addString($parent, XMLSecurityDSig::XMLDSIGNS, 'ds:KeyName', $this->name); + } + +} diff --git a/lib/SAML2/XML/ds/X509Certificate.php b/lib/SAML2/XML/ds/X509Certificate.php new file mode 100644 index 0000000..c4dcac1 --- /dev/null +++ b/lib/SAML2/XML/ds/X509Certificate.php @@ -0,0 +1,45 @@ +<?php + +/** + * Class representing a ds:X509Certificate element. + * + * @package simpleSAMLphp + * @version $Id$ + */ +class SAML2_XML_ds_X509Certificate { + + /** + * The base64-encoded certificate. + * + * @var string + */ + public $certificate; + + + /** + * Initialize an X509Certificate element. + * + * @param DOMElement|NULL $xml The XML element we should load. + */ + public function __construct(DOMElement $xml = NULL) { + + if ($xml === NULL) { + return; + } + + $this->certificate = $xml->textContent; + } + + + /** + * Convert this X509Certificate element to XML. + * + * @param DOMElement $parent The element we should append this X509Certificate element to. + */ + public function toXML(DOMElement $parent) { + assert('is_string($this->certificate)'); + + return SAML2_Utils::addString($parent, XMLSecurityDSig::XMLDSIGNS, 'ds:X509Certificate', $this->certificate); + } + +} diff --git a/lib/SAML2/XML/ds/X509Data.php b/lib/SAML2/XML/ds/X509Data.php new file mode 100644 index 0000000..e6b3c06 --- /dev/null +++ b/lib/SAML2/XML/ds/X509Data.php @@ -0,0 +1,74 @@ +<?php + +/** + * Class representing a ds:X509Data element. + * + * @package simpleSAMLphp + * @version $Id$ + */ +class SAML2_XML_ds_X509Data { + + /** + * The various X509 data elements. + * + * Array with various elements describing this certificate. + * Unknown elements will be represented by SAML2_XML_Chunk. + * + * @var array + */ + public $data = array(); + + + /** + * Initialize a X509Data. + * + * @param DOMElement|NULL $xml The XML element we should load. + */ + public function __construct(DOMElement $xml = NULL) { + + if ($xml === NULL) { + return; + } + + for ($n = $xml->firstChild; $n !== NULL; $n = $n->nextSibling) { + if (!($n instanceof DOMElement)) { + continue; + } + + if ($n->namespaceURI !== XMLSecurityDSig::XMLDSIGNS) { + $this->data[] = new SAML2_XML_Chunk($n); + continue; + } + switch ($n->localName) { + case 'X509Certificate': + $this->data[] = new SAML2_XML_ds_X509Certificate($n); + break; + default: + $this->data[] = new SAML2_XML_Chunk($n); + break; + } + } + } + + + /** + * Convert this X509Data element to XML. + * + * @param DOMElement $parent The element we should append this X509Data element to. + */ + public function toXML(DOMElement $parent) { + assert('is_array($this->data)'); + + $doc = $parent->ownerDocument; + + $e = $doc->createElementNS(XMLSecurityDSig::XMLDSIGNS, 'ds:X509Data'); + $parent->appendChild($e); + + foreach ($this->data as $n) { + $n->toXML($e); + } + + return $e; + } + +} |