Exemple #1
0
 /**
  * This function attempts to validate an XML string against the specified schema. It will parse the string into a
  * DOM document and validate this document against the schema.
  *
  * Note that this function returns values that are evaluated as a logical true, both when validation works and when
  * it doesn't. Please use strict comparisons to check the values returned.
  *
  * @param string|\DOMDocument $xml The XML string or document which should be validated.
  * @param string              $schema The filename of the schema that should be used to validate the document.
  *
  * @return boolean|string Returns a string with errors found if validation fails. True if validation passes ok.
  * @throws \InvalidArgumentException If $schema is not a string, or $xml is neither a string nor a \DOMDocument.
  *
  * @author Olav Morken, UNINETT AS <*****@*****.**>
  */
 public static function isValid($xml, $schema)
 {
     if (!(is_string($schema) && (is_string($xml) || $xml instanceof \DOMDocument))) {
         throw new \InvalidArgumentException('Invalid input parameters.');
     }
     \SimpleSAML_XML_Errors::begin();
     if ($xml instanceof \DOMDocument) {
         $dom = $xml;
         $res = true;
     } else {
         $dom = new \DOMDocument();
         $res = $dom->loadXML($xml);
     }
     if ($res) {
         $config = \SimpleSAML_Configuration::getInstance();
         $schemaPath = $config->resolvePath('schemas') . '/';
         $schemaFile = $schemaPath . $schema;
         $res = $dom->schemaValidate($schemaFile);
         if ($res) {
             \SimpleSAML_XML_Errors::end();
             return true;
         }
         $errorText = "Schema validation failed on XML string:\n";
     } else {
         $errorText = "Failed to parse XML string for schema validation:\n";
     }
     $errors = \SimpleSAML_XML_Errors::end();
     $errorText .= \SimpleSAML_XML_Errors::formatErrors($errors);
     return $errorText;
 }
Exemple #2
0
 /**
  * This function attempts to validate an XML string against the specified schema.
  *
  * It will parse the string into a DOM document and validate this document against the schema.
  *
  * @param $xml     The XML string or document which should be validated.
  * @param $schema  The schema which should be used.
  * @return Returns a string with the errors if validation fails. An empty string is
  *         returned if validation passes.
  * @deprecated
  */
 public static function validateXML($xml, $schema)
 {
     assert('is_string($xml) || $xml instanceof DOMDocument');
     assert('is_string($schema)');
     SimpleSAML_XML_Errors::begin();
     if ($xml instanceof DOMDocument) {
         $dom = $xml;
         $res = TRUE;
     } else {
         $dom = new DOMDocument();
         $res = $dom->loadXML($xml);
     }
     if ($res) {
         $config = SimpleSAML_Configuration::getInstance();
         $schemaPath = $config->resolvePath('schemas') . '/';
         $schemaFile = $schemaPath . $schema;
         $res = $dom->schemaValidate($schemaFile);
         if ($res) {
             SimpleSAML_XML_Errors::end();
             return '';
         }
         $errorText = "Schema validation failed on XML string:\n";
     } else {
         $errorText = "Failed to parse XML string for schema validation:\n";
     }
     $errors = SimpleSAML_XML_Errors::end();
     $errorText .= SimpleSAML_XML_Errors::formatErrors($errors);
     return $errorText;
 }
Exemple #3
0
$t->data['url'] = $url;
/* We accept http or https URLs */
if (substr($url, 0, 7) !== 'http://' && substr($url, 0, 8) !== 'https://') {
    $t->data['status'] = 'invalidurl';
    $t->show();
    exit;
}
/* Attempt to download the metadata. */
$metadata = file_get_contents($url);
if ($metadata === FALSE) {
    $t->data['status'] = 'nodownload';
    $t->show();
    exit;
}
/* Load the metadata into an XML document. */
SimpleSAML_XML_Errors::begin();
$doc = new DOMDocument();
$doc->validateOnParse = FALSE;
$doc->strictErrorChecking = TRUE;
try {
    $ok = $doc->loadXML($metadata);
    if ($ok !== TRUE) {
        $doc = NULL;
    }
} catch (DOMException $e) {
    $doc = NULL;
}
$errors = SimpleSAML_XML_Errors::end();
if ($doc === NULL || count($errors) > 0) {
    $t->data['status'] = 'invalidxml';
    $t->data['errortext'] = SimpleSAML_XML_Errors::formatErrors($errors);