/lib/simplesamlphp-1.10.0/lib/SAML2/StatusResponse.php
https://bitbucket.org/sahkoinenaanestys/sahkoinenaanestys · PHP · 193 lines · 86 code · 40 blank · 67 comment · 12 complexity · 52d07ecc2633530b6f14e740ea3720a0 MD5 · raw file
- <?php
- /**
- * Base class for all SAML 2 response messages.
- *
- * Implements samlp:StatusResponseType. All of the elements in that type is
- * stored in the SAML2_Message class, and this class is therefore more
- * or less empty. It is included mainly to make it easy to separate requests from
- * responses.
- *
- * The status code is represented as an array on the following form:
- * array(
- * 'Code' => '<top-level status code>',
- * 'SubCode' => '<second-level status code>',
- * 'Message' => '<status message>',
- * )
- *
- * Only the 'Code' field is required. The others will be set to NULL if they
- * aren't present.
- *
- * @package simpleSAMLphp
- * @version $Id$
- */
- abstract class SAML2_StatusResponse extends SAML2_Message {
- /**
- * The ID of the request this is a response to, or NULL if this is an unsolicited response.
- *
- * @var string|NULL
- */
- private $inResponseTo;
- /**
- * The status code of the response.
- *
- * @var array
- */
- private $status;
- /**
- * Constructor for SAML 2 response messages.
- *
- * @param string $tagName The tag name of the root element.
- * @param DOMElement|NULL $xml The input message.
- */
- protected function __construct($tagName, DOMElement $xml = NULL) {
- parent::__construct($tagName, $xml);
- $this->status = array(
- 'Code' => SAML2_Const::STATUS_SUCCESS,
- 'SubCode' => NULL,
- 'Message' => NULL,
- );
- if ($xml === NULL) {
- return;
- }
- if ($xml->hasAttribute('InResponseTo')) {
- $this->inResponseTo = $xml->getAttribute('InResponseTo');
- }
- $status = SAML2_Utils::xpQuery($xml, './saml_protocol:Status');
- if (empty($status)) {
- throw new Exception('Missing status code on response.');
- }
- $status = $status[0];
- $statusCode = SAML2_Utils::xpQuery($status, './saml_protocol:StatusCode');
- if (empty($statusCode)) {
- throw new Exception('Missing status code in status element.');
- }
- $statusCode = $statusCode[0];
- $this->status['Code'] = $statusCode->getAttribute('Value');
- $subCode = SAML2_Utils::xpQuery($statusCode, './saml_protocol:StatusCode');
- if (!empty($subCode)) {
- $this->status['SubCode'] = $subCode[0]->getAttribute('Value');
- }
- $message = SAML2_Utils::xpQuery($status, './saml_protocol:StatusMessage');
- if (!empty($message)) {
- $this->status['Message'] = trim($message[0]->textContent);
- }
- }
- /**
- * Determine whether this is a successful response.
- *
- * @return boolean TRUE if the status code is success, FALSE if not.
- */
- public function isSuccess() {
- assert('array_key_exists("Code", $this->status)');
- if ($this->status['Code'] === SAML2_Const::STATUS_SUCCESS) {
- return TRUE;
- }
- return FALSE;
- }
- /**
- * Retrieve the ID of the request this is a response to.
- *
- * @return string|NULL The ID of the request.
- */
- public function getInResponseTo() {
- return $this->inResponseTo;
- }
- /**
- * Set the ID of the request this is a response to.
- *
- * @param string|NULL $inResponseTo The ID of the request.
- */
- public function setInResponseTo($inResponseTo) {
- assert('is_string($inResponseTo) || is_null($inResponseTo)');
- $this->inResponseTo = $inResponseTo;
- }
- /**
- * Retrieve the status code.
- *
- * @return array The status code.
- */
- public function getStatus() {
- return $this->status;
- }
- /**
- * Set the status code.
- *
- * @param array $status The status code.
- */
- public function setStatus(array $status) {
- assert('array_key_exists("Code", $status)');
- $this->status = $status;
- if (!array_key_exists('SubCode', $status)) {
- $this->status['SubCode'] = NULL;
- }
- if (!array_key_exists('Message', $status)) {
- $this->status['Message'] = NULL;
- }
- }
- /**
- * Convert status response message to an XML element.
- *
- * @return DOMElement This status response.
- */
- public function toUnsignedXML() {
- $root = parent::toUnsignedXML();
- if ($this->inResponseTo !== NULL) {
- $root->setAttribute('InResponseTo', $this->inResponseTo);
- }
- $status = $this->document->createElementNS(SAML2_Const::NS_SAMLP, 'Status');
- $root->appendChild($status);
- $statusCode = $this->document->createElementNS(SAML2_Const::NS_SAMLP, 'StatusCode');
- $statusCode->setAttribute('Value', $this->status['Code']);
- $status->appendChild($statusCode);
- if (!is_null($this->status['SubCode'])) {
- $subStatusCode = $this->document->createElementNS(SAML2_Const::NS_SAMLP, 'StatusCode');
- $subStatusCode->setAttribute('Value', $this->status['SubCode']);
- $statusCode->appendChild($subStatusCode);
- }
- if (!is_null($this->status['Message'])) {
- SAML2_Utils::addString($status, SAML2_Const::NS_SAMLP, 'StatusMessage', $this->status['Message']);
- }
- return $root;
- }
- }
- ?>