From ce445821164d3aa48ea8932eedf2c60d5876005c Mon Sep 17 00:00:00 2001 From: Jaime Perez Crespo <jaime.perez@uninett.no> Date: Thu, 23 Apr 2015 15:11:26 +0200 Subject: [PATCH] Move SimpleSAML_Utilities::validateXML() to SimpleSAML\Utils\XML::isValid(). --- lib/SimpleSAML/Utilities.php | 46 ++--------------------------- lib/SimpleSAML/Utils/XML.php | 56 ++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+), 43 deletions(-) diff --git a/lib/SimpleSAML/Utilities.php b/lib/SimpleSAML/Utilities.php index c12c8aca5..0dc6bdf3b 100644 --- a/lib/SimpleSAML/Utilities.php +++ b/lib/SimpleSAML/Utilities.php @@ -311,51 +311,11 @@ class SimpleSAML_Utilities { /** - * 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 + * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\XML::isValid() instead. */ 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; + $result = \SimpleSAML\Utils\XML::isValid($xml, $schema); + return ($result === true) ? '' : $result; } diff --git a/lib/SimpleSAML/Utils/XML.php b/lib/SimpleSAML/Utils/XML.php index f594752d5..72ddbcf85 100644 --- a/lib/SimpleSAML/Utils/XML.php +++ b/lib/SimpleSAML/Utils/XML.php @@ -271,6 +271,7 @@ class XML * * @return boolean True if both namespace and local name matches, false otherwise. * @throws \SimpleSAML_Error_Exception If the namespace shortcut is unknown. + * * @author Andreas Solberg, UNINETT AS <andreas.solberg@uninett.no> * @author Olav Morken, UNINETT AS <olav.morken@uninett.no> */ @@ -311,4 +312,59 @@ class XML } return true; } + + + /** + * 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 <olav.morken@uninett.no> + */ + 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; + } } -- GitLab