예제 #1
0
 /**
  * Extract the response element from the SOAP response.
  *
  * @param string $soapResponse  The SOAP response.
  * @return string  The <saml1p:Response> element, as a string.
  */
 private static function extractResponse($soapResponse)
 {
     assert('is_string($soapResponse)');
     try {
         $doc = SAML2_DOMDocumentFactory::fromString($soapResponse);
     } catch (\Exception $e) {
         throw new SimpleSAML_Error_Exception('Error parsing SAML 1 artifact response.');
     }
     $soapEnvelope = $doc->firstChild;
     if (!SimpleSAML\Utils\XML::isDOMElementOfType($soapEnvelope, 'Envelope', 'http://schemas.xmlsoap.org/soap/envelope/')) {
         throw new SimpleSAML_Error_Exception('Expected artifact response to contain a <soap:Envelope> element.');
     }
     $soapBody = SimpleSAML\Utils\XML::getDOMChildren($soapEnvelope, 'Body', 'http://schemas.xmlsoap.org/soap/envelope/');
     if (count($soapBody) === 0) {
         throw new SimpleSAML_Error_Exception('Couldn\'t find <soap:Body> in <soap:Envelope>.');
     }
     $soapBody = $soapBody[0];
     $responseElement = SimpleSAML\Utils\XML::getDOMChildren($soapBody, 'Response', 'urn:oasis:names:tc:SAML:1.0:protocol');
     if (count($responseElement) === 0) {
         throw new SimpleSAML_Error_Exception('Couldn\'t find <saml1p:Response> in <soap:Body>.');
     }
     $responseElement = $responseElement[0];
     /*
      * Save the <saml1p:Response> element. Note that we need to import it
      * into a new document, in order to preserve namespace declarations.
      */
     $newDoc = SAML2_DOMDocumentFactory::create();
     $newDoc->appendChild($newDoc->importNode($responseElement, TRUE));
     $responseXML = $newDoc->saveXML();
     return $responseXML;
 }
예제 #2
0
 /**
  * This function locates the EntityDescriptor node in a DOMDocument. This node should
  * be the first (and only) node in the document.
  *
  * This function will throw an exception if it is unable to locate the node.
  *
  * @param DOMDocument $doc The DOMDocument where we should find the EntityDescriptor node.
  *
  * @return SAML2_XML_md_EntityDescriptor The DOMEntity which represents the EntityDescriptor.
  * @throws Exception If the document is empty or the first element is not an EntityDescriptor element.
  */
 private static function findEntityDescriptor($doc)
 {
     assert('$doc instanceof DOMDocument');
     // find the EntityDescriptor DOMElement. This should be the first (and only) child of the DOMDocument
     $ed = $doc->documentElement;
     if ($ed === null) {
         throw new Exception('Failed to load SAML metadata from empty XML document.');
     }
     if (SimpleSAML\Utils\XML::isDOMElementOfType($ed, 'EntityDescriptor', '@md') === false) {
         throw new Exception('Expected first element in the metadata document to be an EntityDescriptor element.');
     }
     return new SAML2_XML_md_EntityDescriptor($ed);
 }
예제 #3
0
 /**
  * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\XML::isDOMElementOfType() instead.
  */
 public static function isDOMElementOfType(DOMNode $element, $name, $nsURI)
 {
     return SimpleSAML\Utils\XML::isDOMElementOfType($element, $name, $nsURI);
 }