From e11524dbb5f5456e31684379552bb4f760a76590 Mon Sep 17 00:00:00 2001
From: Jaime Perez Crespo <jaime.perez@uninett.no>
Date: Fri, 31 Jul 2015 13:41:06 +0200
Subject: [PATCH] Reformat the SimpleSAML_Utilities class.

---
 lib/SimpleSAML/Utilities.php | 1324 ++++++++++++++++++----------------
 1 file changed, 704 insertions(+), 620 deletions(-)

diff --git a/lib/SimpleSAML/Utilities.php b/lib/SimpleSAML/Utilities.php
index 2ab85f34c..0313330ef 100644
--- a/lib/SimpleSAML/Utilities.php
+++ b/lib/SimpleSAML/Utilities.php
@@ -1,645 +1,729 @@
 <?php
 
+
 /**
  * Misc static functions that is used several places.in example parsing and id generation.
  *
  * @author Andreas Ă…kre Solberg, UNINETT AS. <andreas.solberg@uninett.no>
  * @package simpleSAMLphp
  */
-class SimpleSAML_Utilities {
-
-	/**
-	 * List of log levels.
-	 *
-	 * This list is used to restore the log levels after some log levels are disabled.
-	 *
-	 * @var array
-	 */
-	private static $logLevelStack = array();
-
-
-	/**
-	 * The current mask of disabled log levels.
-	 *
-	 * Note: This mask is not directly related to the PHP error reporting level.
-	 *
-	 * @var int
-	 */
-	public static $logMask = 0;
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::getSelfHost() instead.
-	 */
-	public static function getSelfHost() {
-		return \SimpleSAML\Utils\HTTP::getSelfHost();
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::getSelfURLHost() instead.
-	 */
-	public static function selfURLhost() {
-		return \SimpleSAML\Utils\HTTP::getSelfURLHost();
-	}
-
-	
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::isHTTPS() instead.
-	 */
-	public static function isHTTPS() {
-		return \SimpleSAML\Utils\HTTP::isHTTPS();
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::getSelfURLNoQuery() instead.
-	 */
-	public static function selfURLNoQuery() {
-		return \SimpleSAML\Utils\HTTP::getSelfURLNoQuery();
-	
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::getSelfHostWithPath() instead.
-	 */
-	public static function getSelfHostWithPath() {
-		return \SimpleSAML\Utils\HTTP::getSelfHostWithPath();
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::getFirstPathElement() instead.
-	 */
-	public static function getFirstPathElement($trailingslash = true) {
-		return \SimpleSAML\Utils\HTTP::getFirstPathElement($trailingslash);
-	}
+class SimpleSAML_Utilities
+{
+
+    /**
+     * List of log levels.
+     *
+     * This list is used to restore the log levels after some log levels are disabled.
+     *
+     * @var array
+     */
+    private static $logLevelStack = array();
+
+
+    /**
+     * The current mask of disabled log levels.
+     *
+     * Note: This mask is not directly related to the PHP error reporting level.
+     *
+     * @var int
+     */
+    public static $logMask = 0;
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::getSelfHost() instead.
+     */
+    public static function getSelfHost()
+    {
+        return \SimpleSAML\Utils\HTTP::getSelfHost();
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::getSelfURLHost() instead.
+     */
+    public static function selfURLhost()
+    {
+        return \SimpleSAML\Utils\HTTP::getSelfURLHost();
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::isHTTPS() instead.
+     */
+    public static function isHTTPS()
+    {
+        return \SimpleSAML\Utils\HTTP::isHTTPS();
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::getSelfURLNoQuery()
+     *     instead.
+     */
+    public static function selfURLNoQuery()
+    {
+        return \SimpleSAML\Utils\HTTP::getSelfURLNoQuery();
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::getSelfHostWithPath()
+     *     instead.
+     */
+    public static function getSelfHostWithPath()
+    {
+        return \SimpleSAML\Utils\HTTP::getSelfHostWithPath();
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::getFirstPathElement()
+     *     instead.
+     */
+    public static function getFirstPathElement($trailingslash = true)
+    {
+        return \SimpleSAML\Utils\HTTP::getFirstPathElement($trailingslash);
+    }
 
 
     /**
      * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::getSelfURL() instead.
      */
-	public static function selfURL() {
-		return \SimpleSAML\Utils\HTTP::getSelfURL();
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::getBaseURL() instead.
-	 */
-	public static function getBaseURL() {
-		return \SimpleSAML\Utils\HTTP::getBaseURL();
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::addURLParameters() instead.
-	 */
-	public static function addURLparameter($url, $parameters) {
-		return \SimpleSAML\Utils\HTTP::addURLParameters($url, $parameters);
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use \SimpleSAML\Utils\HTTP::checkURLAllowed() instead.
-	 */
-	public static function checkURLAllowed($url, array $trustedSites = NULL) {
-		return \SimpleSAML\Utils\HTTP::checkURLAllowed($url, $trustedSites);
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML_Auth_State::parseStateID() instead.
-	 */
-	public static function parseStateID($stateId) {
-		return SimpleSAML_Auth_State::parseStateID($stateId);
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0.
-	 */
-	public static function checkDateConditions($start=NULL, $end=NULL) {
-		$currentTime = time();
-
-		if (!empty($start)) {
-			$startTime = SAML2_Utils::xsDateTimeToTimestamp($start);
-			/* Allow for a 10 minute difference in Time */
-			if (($startTime < 0) || (($startTime - 600) > $currentTime)) {
-				return FALSE;
-			}
-		}
-		if (!empty($end)) {
-			$endTime = SAML2_Utils::xsDateTimeToTimestamp($end);
-			if (($endTime < 0) || ($endTime <= $currentTime)) {
-				return FALSE;
-			}
-		}
-		return TRUE;
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\Random::generateID() instead.
-	 */
-	public static function generateID() {
-		return SimpleSAML\Utils\Random::generateID();
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use \SimpleSAML\Utils\Time::generateTimestamp() instead.
-	 */
-	public static function generateTimestamp($instant = NULL) {
-		return SimpleSAML\Utils\Time::generateTimestamp($instant);
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use \SimpleSAML\Utils\Time::parseDuration() instead.
-	 */
-	public static function parseDuration($duration, $timestamp = NULL) {
-		return SimpleSAML\Utils\Time::parseDuration($duration, $timestamp);
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please raise a SimpleSAML_Error_Error exception instead.
-	 */
-	public static function fatalError($trackId = 'na', $errorCode = null, Exception $e = null) {
-		throw new SimpleSAML_Error_Error($errorCode, $e);
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in version 2.0. Use SimpleSAML\Utils\Net::ipCIDRcheck() instead.
-	 */
-	public static function ipCIDRcheck($cidr, $ip = null) {
-		return SimpleSAML\Utils\Net::ipCIDRcheck($cidr, $ip);
-	}
-
-	private static function _doRedirect($url, $parameters = array()) {
-		assert('is_string($url)');
-		assert('!empty($url)');
-		assert('is_array($parameters)');
-
-		if (!empty($parameters)) {
-			$url = self::addURLparameter($url, $parameters);
-		}
-
-		/* Set the HTTP result code. This is either 303 See Other or
-		 * 302 Found. HTTP 303 See Other is sent if the HTTP version
-		 * is HTTP/1.1 and the request type was a POST request.
-		 */
-		if ($_SERVER['SERVER_PROTOCOL'] === 'HTTP/1.1' &&
-			$_SERVER['REQUEST_METHOD'] === 'POST') {
-			$code = 303;
-		} else {
-			$code = 302;
-		}
-
-		if (strlen($url) > 2048) {
-			SimpleSAML_Logger::warning('Redirecting to a URL longer than 2048 bytes.');
-		}
-
-		/* Set the location header. */
-		header('Location: ' . $url, TRUE, $code);
-
-		/* Disable caching of this response. */
-		header('Pragma: no-cache');
-		header('Cache-Control: no-cache, must-revalidate');
-
-		/* Show a minimal web page with a clickable link to the URL. */
-		echo '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
-		echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"' .
-			' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">' . "\n";
-		echo '<html xmlns="http://www.w3.org/1999/xhtml">';
-		echo '<head>
+    public static function selfURL()
+    {
+        return \SimpleSAML\Utils\HTTP::getSelfURL();
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::getBaseURL() instead.
+     */
+    public static function getBaseURL()
+    {
+        return \SimpleSAML\Utils\HTTP::getBaseURL();
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::addURLParameters() instead.
+     */
+    public static function addURLparameter($url, $parameters)
+    {
+        return \SimpleSAML\Utils\HTTP::addURLParameters($url, $parameters);
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use \SimpleSAML\Utils\HTTP::checkURLAllowed() instead.
+     */
+    public static function checkURLAllowed($url, array $trustedSites = null)
+    {
+        return \SimpleSAML\Utils\HTTP::checkURLAllowed($url, $trustedSites);
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML_Auth_State::parseStateID() instead.
+     */
+    public static function parseStateID($stateId)
+    {
+        return SimpleSAML_Auth_State::parseStateID($stateId);
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0.
+     */
+    public static function checkDateConditions($start = null, $end = null)
+    {
+        $currentTime = time();
+
+        if (!empty($start)) {
+            $startTime = SAML2_Utils::xsDateTimeToTimestamp($start);
+            /* Allow for a 10 minute difference in Time */
+            if (($startTime < 0) || (($startTime - 600) > $currentTime)) {
+                return false;
+            }
+        }
+        if (!empty($end)) {
+            $endTime = SAML2_Utils::xsDateTimeToTimestamp($end);
+            if (($endTime < 0) || ($endTime <= $currentTime)) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\Random::generateID() instead.
+     */
+    public static function generateID()
+    {
+        return SimpleSAML\Utils\Random::generateID();
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use \SimpleSAML\Utils\Time::generateTimestamp()
+     *     instead.
+     */
+    public static function generateTimestamp($instant = null)
+    {
+        return SimpleSAML\Utils\Time::generateTimestamp($instant);
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use \SimpleSAML\Utils\Time::parseDuration() instead.
+     */
+    public static function parseDuration($duration, $timestamp = null)
+    {
+        return SimpleSAML\Utils\Time::parseDuration($duration, $timestamp);
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please raise a SimpleSAML_Error_Error exception instead.
+     */
+    public static function fatalError($trackId = 'na', $errorCode = null, Exception $e = null)
+    {
+        throw new SimpleSAML_Error_Error($errorCode, $e);
+    }
+
+
+    /**
+     * @deprecated This method will be removed in version 2.0. Use SimpleSAML\Utils\Net::ipCIDRcheck() instead.
+     */
+    public static function ipCIDRcheck($cidr, $ip = null)
+    {
+        return SimpleSAML\Utils\Net::ipCIDRcheck($cidr, $ip);
+    }
+
+
+    private static function _doRedirect($url, $parameters = array())
+    {
+        assert('is_string($url)');
+        assert('!empty($url)');
+        assert('is_array($parameters)');
+
+        if (!empty($parameters)) {
+            $url = self::addURLparameter($url, $parameters);
+        }
+
+        /* Set the HTTP result code. This is either 303 See Other or
+         * 302 Found. HTTP 303 See Other is sent if the HTTP version
+         * is HTTP/1.1 and the request type was a POST request.
+         */
+        if ($_SERVER['SERVER_PROTOCOL'] === 'HTTP/1.1' &&
+            $_SERVER['REQUEST_METHOD'] === 'POST'
+        ) {
+            $code = 303;
+        } else {
+            $code = 302;
+        }
+
+        if (strlen($url) > 2048) {
+            SimpleSAML_Logger::warning('Redirecting to a URL longer than 2048 bytes.');
+        }
+
+        /* Set the location header. */
+        header('Location: '.$url, true, $code);
+
+        /* Disable caching of this response. */
+        header('Pragma: no-cache');
+        header('Cache-Control: no-cache, must-revalidate');
+
+        /* Show a minimal web page with a clickable link to the URL. */
+        echo '<?xml version="1.0" encoding="UTF-8"?>'."\n";
+        echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"'.
+            ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'."\n";
+        echo '<html xmlns="http://www.w3.org/1999/xhtml">';
+        echo '<head>
 					<meta http-equiv="content-type" content="text/html; charset=utf-8">
 					<title>Redirect</title>
 				</head>';
-		echo '<body>';
-		echo '<h1>Redirect</h1>';
-		echo '<p>';
-		echo 'You were redirected to: ';
-		echo '<a id="redirlink" href="' .
-			htmlspecialchars($url) . '">' . htmlspecialchars($url) . '</a>';
-		echo '<script type="text/javascript">document.getElementById("redirlink").focus();</script>';
-		echo '</p>';
-		echo '</body>';
-		echo '</html>';
-
-		/* End script execution. */
-		exit;
-	} 
-
-
-	/**
-	 * @deprecated 1.12.0 This method will be removed from the API. Instead, use the redirectTrustedURL() or
-	 * redirectUntrustedURL() functions accordingly.
-	 */
-	public static function redirect($url, $parameters = array(), $allowed_redirect_hosts = NULL) {
-		assert('is_string($url)');
-		assert('strlen($url) > 0');
-		assert('is_array($parameters)');
-
-		if ($allowed_redirect_hosts !== NULL) {
-			$url = self::checkURLAllowed($url, $allowed_redirect_hosts);
-		} else {
-			$url = self::normalizeURL($url);
-		}
-		self::_doRedirect($url, $parameters);
-	}
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::redirectTrustedURL() instead.
-	 */
-	public static function redirectTrustedURL($url, $parameters = array()) {
-		\SimpleSAML\Utils\HTTP::redirectTrustedURL($url, $parameters);
-	}
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::redirectUntrustedURL() instead.
-	 */
-	public static function redirectUntrustedURL($url, $parameters = array()) {
-		\SimpleSAML\Utils\HTTP::redirectUntrustedURL($url, $parameters);
-	}
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\Arrays::transpose() instead.
-	 */
-	public static function transposeArray($in) {
-		return SimpleSAML\Utils\Arrays::transpose($in);
-	}
-
-
-	/**
-	 * @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);
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\XML::getDOMChildren() instead.
-	 */
-	public static function getDOMChildren(DOMElement $element, $localName, $namespaceURI) {
-		return SimpleSAML\Utils\XML::getDOMChildren($element, $localName, $namespaceURI);
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\XML::getDOMText() instead.
-	 */
-	public static function getDOMText($element) {
-		return SimpleSAML\Utils\XML::getDOMText($element);
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::getAcceptLanguage() instead.
-	 */
-	public static function getAcceptLanguage() {
-		return \SimpleSAML\Utils\HTTP::getAcceptLanguage();
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\XML::isValid() instead.
-	 */
-	public static function validateXML($xml, $schema) {
-		$result = \SimpleSAML\Utils\XML::isValid($xml, $schema);
-		return ($result === true) ? '' : $result;
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\XML::checkSAMLMessage() instead.
-	 */
-	public static function validateXMLDocument($message, $type) {
-		\SimpleSAML\Utils\XML::checkSAMLMessage($message, $type);
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use openssl_random_pseudo_bytes() instead.
-	 */
-	public static function generateRandomBytes($length) {
-		assert('is_int($length)');
-
-		return openssl_random_pseudo_bytes($length);
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use bin2hex() instead.
-	 */
-	public static function stringToHex($bytes) {
-		$ret = '';
-		for($i = 0; $i < strlen($bytes); $i++) {
-			$ret .= sprintf('%02x', ord($bytes[$i]));
-		}
-		return $ret;
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\System::resolvePath() instead.
-	 */
-	public static function resolvePath($path, $base = NULL) {
-		return \SimpleSAML\Utils\System::resolvePath($path, $base);
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::resolveURL() instead.
-	 */
-	public static function resolveURL($url, $base = NULL) {
-		return \SimpleSAML\Utils\HTTP::resolveURL($url, $base);
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::normalizeURL() instead.
-	 */
-	public static function normalizeURL($url) {
-		return \SimpleSAML\Utils\HTTP::normalizeURL($url);
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::parseQueryString() instead.
-	 */
-	public static function parseQueryString($query_string) {
-		return \SimpleSAML\Utils\HTTP::parseQueryString($query_string);
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use
-	 * SimpleSAML\Utils\Arrays::normalizeAttributesArray() instead.
-	 */
-	public static function parseAttributes($attributes) {
-		return SimpleSAML\Utils\Arrays::normalizeAttributesArray($attributes);
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\Config::getSecretSalt() instead.
-	 */
-	public static function getSecretSalt() {
-		return SimpleSAML\Utils\Config::getSecretSalt();
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please call error_get_last() directly.
-	 */
-	public static function getLastError() {
-
-		if (!function_exists('error_get_last')) {
-			return '[Cannot get error message]';
-		}
-
-		$error = error_get_last();
-		if ($error === NULL) {
-			return '[No error message found]';
-		}
-
-		return $error['message'];
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\Config::getCertPath() instead.
-	 */
-	public static function resolveCert($path) {
-		return \SimpleSAML\Utils\Config::getCertPath($path);
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\Crypto::loadPublicKey() instead.
-	 */
-	public static function loadPublicKey(SimpleSAML_Configuration $metadata, $required = FALSE, $prefix = '') {
-		return SimpleSAML\Utils\Crypto::loadPublicKey($metadata, $required, $prefix);
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\Crypto::loadPrivateKey() instead.
-	 */
-	public static function loadPrivateKey(SimpleSAML_Configuration $metadata, $required = FALSE, $prefix = '') {
-		return SimpleSAML\Utils\Crypto::loadPrivateKey($metadata, $required, $prefix);
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\XML::formatDOMElement() instead.
-	 */
-	public static function formatDOMElement(DOMElement $root, $indentBase = '') {
-		SimpleSAML\Utils\XML::formatDOMElement($root, $indentBase);
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\XML::formatXMLString() instead.
-	 */
-	public static function formatXMLString($xml, $indentBase = '') {
-		return SimpleSAML\Utils\XML::formatXMLString($xml, $indentBase);
-	}
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\Arrays::arrayize() instead.
-	 */
-	public static function arrayize($data, $index = 0) {
-		return SimpleSAML\Utils\Arrays::arrayize($data, $index);
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\Auth::isAdmin() instead.
-	 */
-	public static function isAdmin() {
-		return SimpleSAML\Utils\Auth::isAdmin();
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\Auth::getAdminLoginURL instead();
-	 */
-	public static function getAdminLoginURL($returnTo = NULL) {
-		return SimpleSAML\Utils\Auth::getAdminLoginURL($returnTo);
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\Auth::requireAdmin() instead.
-	 */
-	public static function requireAdmin() {
-		\SimpleSAML\Utils\Auth::requireAdmin();
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::submitPOSTData() instead.
-	 */
-	public static function postRedirect($destination, $post) {
-		\SimpleSAML\Utils\HTTP::submitPOSTData($destination, $post);
-	}
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. PLease use SimpleSAML\Utils\HTTP::getPOSTRedirectURL() instead.
-	 */
-	public static function createPostRedirectLink($destination, $post) {
-		return \SimpleSAML\Utils\HTTP::getPOSTRedirectURL($destination, $post);
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::getPOSTRedirectURL() instead.
-	 */
-	public static function createHttpPostRedirectLink($destination, $post) {
-		assert('is_string($destination)');
-		assert('is_array($post)');
-
-		$postId = SimpleSAML\Utils\Random::generateID();
-		$postData = array(
-			'post' => $post,
-			'url' => $destination,
-		);
+        echo '<body>';
+        echo '<h1>Redirect</h1>';
+        echo '<p>';
+        echo 'You were redirected to: ';
+        echo '<a id="redirlink" href="'.
+            htmlspecialchars($url).'">'.htmlspecialchars($url).'</a>';
+        echo '<script type="text/javascript">document.getElementById("redirlink").focus();</script>';
+        echo '</p>';
+        echo '</body>';
+        echo '</html>';
+
+        /* End script execution. */
+        exit;
+    }
+
+
+    /**
+     * @deprecated 1.12.0 This method will be removed from the API. Instead, use the redirectTrustedURL() or
+     * redirectUntrustedURL() functions accordingly.
+     */
+    public static function redirect($url, $parameters = array(), $allowed_redirect_hosts = null)
+    {
+        assert('is_string($url)');
+        assert('strlen($url) > 0');
+        assert('is_array($parameters)');
+
+        if ($allowed_redirect_hosts !== null) {
+            $url = self::checkURLAllowed($url, $allowed_redirect_hosts);
+        } else {
+            $url = self::normalizeURL($url);
+        }
+        self::_doRedirect($url, $parameters);
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::redirectTrustedURL()
+     *     instead.
+     */
+    public static function redirectTrustedURL($url, $parameters = array())
+    {
+        \SimpleSAML\Utils\HTTP::redirectTrustedURL($url, $parameters);
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::redirectUntrustedURL()
+     *     instead.
+     */
+    public static function redirectUntrustedURL($url, $parameters = array())
+    {
+        \SimpleSAML\Utils\HTTP::redirectUntrustedURL($url, $parameters);
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\Arrays::transpose() instead.
+     */
+    public static function transposeArray($in)
+    {
+        return SimpleSAML\Utils\Arrays::transpose($in);
+    }
+
+
+    /**
+     * @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);
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\XML::getDOMChildren() instead.
+     */
+    public static function getDOMChildren(DOMElement $element, $localName, $namespaceURI)
+    {
+        return SimpleSAML\Utils\XML::getDOMChildren($element, $localName, $namespaceURI);
+    }
 
-		$session = SimpleSAML_Session::getSessionFromRequest();
-		$session->setData('core_postdatalink', $postId, $postData);
-
-		$redirInfo = base64_encode(SimpleSAML\Utils\Crypto::aesEncrypt($session->getSessionId() . ':' . $postId));
-
-		$url = SimpleSAML_Module::getModuleURL('core/postredirect.php', array('RedirInfo' => $redirInfo));
-		$url = preg_replace("#^https:#", "http:", $url);
-
-		return $url;
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0.
-	 */
-	public static function validateCA($certificate, $caFile) {
-		SimpleSAML_XML_Validator::validateCertificate($certificate, $caFile);
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\Time::initTimezone() instead.
-	 */
-	public static function initTimezone() {
-		\SimpleSAML\Utils\Time::initTimezone();
-	}
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\System::writeFile() instead.
-	 */
-	public static function writeFile($filename, $data, $mode=0600) {
-		\SimpleSAML\Utils\System::writeFile($filename, $data, $mode);
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\System::getTempDir instead.
-	 */
-	public static function getTempDir() {
-		return SimpleSAML\Utils\System::getTempDir();
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0.
-	 */
-	public static function maskErrors($mask) {
-		assert('is_int($mask)');
-
-		$currentEnabled = error_reporting();
-		self::$logLevelStack[] = array($currentEnabled, self::$logMask);
-
-		$currentEnabled &= ~$mask;
-		error_reporting($currentEnabled);
-		self::$logMask |= $mask;
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0.
-	 */
-	public static function popErrorMask() {
-		$lastMask = array_pop(self::$logLevelStack);
-		error_reporting($lastMask[0]);
-		self::$logMask = $lastMask[1];
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\Config\Metadata::getDefaultEndpoint() instead.
-	 */
-	public static function getDefaultEndpoint(array $endpoints, array $bindings = NULL) {
-		return \SimpleSAML\Utils\Config\Metadata::getDefaultEndpoint($endpoints, $bindings);
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::checkSessionCookie() instead.
-	 */
-	public static function checkCookie($retryURL = NULL) {
-		\SimpleSAML\Utils\HTTP::checkSessionCookie($retryURL);
-	}
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\XML::getDOMText() instead.
+     */
+    public static function getDOMText($element)
+    {
+        return SimpleSAML\Utils\XML::getDOMText($element);
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::getAcceptLanguage()
+     *     instead.
+     */
+    public static function getAcceptLanguage()
+    {
+        return \SimpleSAML\Utils\HTTP::getAcceptLanguage();
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\XML::isValid() instead.
+     */
+    public static function validateXML($xml, $schema)
+    {
+        $result = \SimpleSAML\Utils\XML::isValid($xml, $schema);
+        return ($result === true) ? '' : $result;
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\XML::checkSAMLMessage() instead.
+     */
+    public static function validateXMLDocument($message, $type)
+    {
+        \SimpleSAML\Utils\XML::checkSAMLMessage($message, $type);
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use openssl_random_pseudo_bytes() instead.
+     */
+    public static function generateRandomBytes($length)
+    {
+        assert('is_int($length)');
+
+        return openssl_random_pseudo_bytes($length);
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use bin2hex() instead.
+     */
+    public static function stringToHex($bytes)
+    {
+        $ret = '';
+        for ($i = 0; $i < strlen($bytes); $i++) {
+            $ret .= sprintf('%02x', ord($bytes[$i]));
+        }
+        return $ret;
+    }
 
 
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\XML::debugSAMLMessage() instead.
-	 */
-	public static function debugMessage($message, $type) {
-		\SimpleSAML\Utils\XML::debugSAMLMessage($message, $type);
-	}
-
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\System::resolvePath() instead.
+     */
+    public static function resolvePath($path, $base = null)
+    {
+        return \SimpleSAML\Utils\System::resolvePath($path, $base);
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::resolveURL() instead.
+     */
+    public static function resolveURL($url, $base = null)
+    {
+        return \SimpleSAML\Utils\HTTP::resolveURL($url, $base);
+    }
 
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::fetch() instead.
-	 */
-	public static function fetch($path, $context = array(), $getHeaders = FALSE) {
-		return \SimpleSAML\Utils\HTTP::fetch($path, $context, $getHeaders);
-	}
 
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\Crypto::aesEncrypt() instead.
-	 */
-	public static function aesEncrypt($clear) {
-		return SimpleSAML\Utils\Crypto::aesEncrypt($clear);
-	}
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::normalizeURL() instead.
+     */
+    public static function normalizeURL($url)
+    {
+        return \SimpleSAML\Utils\HTTP::normalizeURL($url);
+    }
 
 
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\Crypto::aesDecrypt() instead.
-	 */
-	public static function aesDecrypt($encData) {
-		return SimpleSAML\Utils\Crypto::aesDecrypt($encData);
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\System::getOS() instead.
-	 */
-	public static function isWindowsOS() {
-		return SimpleSAML\Utils\System::getOS() === SimpleSAML\Utils\System::WINDOWS;
-	}
-
-
-	/**
-	 * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::setCookie() instead.
-	 */
-	public static function setCookie($name, $value, array $params = NULL, $throw = TRUE) {
-		\SimpleSAML\Utils\HTTP::setCookie($name, $value, $params, $throw);
-	}
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::parseQueryString() instead.
+     */
+    public static function parseQueryString($query_string)
+    {
+        return \SimpleSAML\Utils\HTTP::parseQueryString($query_string);
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use
+     * SimpleSAML\Utils\Arrays::normalizeAttributesArray() instead.
+     */
+    public static function parseAttributes($attributes)
+    {
+        return SimpleSAML\Utils\Arrays::normalizeAttributesArray($attributes);
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\Config::getSecretSalt() instead.
+     */
+    public static function getSecretSalt()
+    {
+        return SimpleSAML\Utils\Config::getSecretSalt();
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please call error_get_last() directly.
+     */
+    public static function getLastError()
+    {
+
+        if (!function_exists('error_get_last')) {
+            return '[Cannot get error message]';
+        }
+
+        $error = error_get_last();
+        if ($error === null) {
+            return '[No error message found]';
+        }
+
+        return $error['message'];
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\Config::getCertPath() instead.
+     */
+    public static function resolveCert($path)
+    {
+        return \SimpleSAML\Utils\Config::getCertPath($path);
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\Crypto::loadPublicKey() instead.
+     */
+    public static function loadPublicKey(SimpleSAML_Configuration $metadata, $required = false, $prefix = '')
+    {
+        return SimpleSAML\Utils\Crypto::loadPublicKey($metadata, $required, $prefix);
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\Crypto::loadPrivateKey() instead.
+     */
+    public static function loadPrivateKey(SimpleSAML_Configuration $metadata, $required = false, $prefix = '')
+    {
+        return SimpleSAML\Utils\Crypto::loadPrivateKey($metadata, $required, $prefix);
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\XML::formatDOMElement() instead.
+     */
+    public static function formatDOMElement(DOMElement $root, $indentBase = '')
+    {
+        SimpleSAML\Utils\XML::formatDOMElement($root, $indentBase);
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\XML::formatXMLString() instead.
+     */
+    public static function formatXMLString($xml, $indentBase = '')
+    {
+        return SimpleSAML\Utils\XML::formatXMLString($xml, $indentBase);
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\Arrays::arrayize() instead.
+     */
+    public static function arrayize($data, $index = 0)
+    {
+        return SimpleSAML\Utils\Arrays::arrayize($data, $index);
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\Auth::isAdmin() instead.
+     */
+    public static function isAdmin()
+    {
+        return SimpleSAML\Utils\Auth::isAdmin();
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\Auth::getAdminLoginURL instead();
+     */
+    public static function getAdminLoginURL($returnTo = null)
+    {
+        return SimpleSAML\Utils\Auth::getAdminLoginURL($returnTo);
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\Auth::requireAdmin() instead.
+     */
+    public static function requireAdmin()
+    {
+        \SimpleSAML\Utils\Auth::requireAdmin();
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::submitPOSTData() instead.
+     */
+    public static function postRedirect($destination, $post)
+    {
+        \SimpleSAML\Utils\HTTP::submitPOSTData($destination, $post);
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. PLease use SimpleSAML\Utils\HTTP::getPOSTRedirectURL()
+     *     instead.
+     */
+    public static function createPostRedirectLink($destination, $post)
+    {
+        return \SimpleSAML\Utils\HTTP::getPOSTRedirectURL($destination, $post);
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::getPOSTRedirectURL()
+     *     instead.
+     */
+    public static function createHttpPostRedirectLink($destination, $post)
+    {
+        assert('is_string($destination)');
+        assert('is_array($post)');
+
+        $postId = SimpleSAML\Utils\Random::generateID();
+        $postData = array(
+            'post' => $post,
+            'url'  => $destination,
+        );
+
+        $session = SimpleSAML_Session::getSessionFromRequest();
+        $session->setData('core_postdatalink', $postId, $postData);
+
+        $redirInfo = base64_encode(SimpleSAML\Utils\Crypto::aesEncrypt($session->getSessionId().':'.$postId));
+
+        $url = SimpleSAML_Module::getModuleURL('core/postredirect.php', array('RedirInfo' => $redirInfo));
+        $url = preg_replace("#^https:#", "http:", $url);
+
+        return $url;
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0.
+     */
+    public static function validateCA($certificate, $caFile)
+    {
+        SimpleSAML_XML_Validator::validateCertificate($certificate, $caFile);
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\Time::initTimezone() instead.
+     */
+    public static function initTimezone()
+    {
+        \SimpleSAML\Utils\Time::initTimezone();
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\System::writeFile() instead.
+     */
+    public static function writeFile($filename, $data, $mode = 0600)
+    {
+        \SimpleSAML\Utils\System::writeFile($filename, $data, $mode);
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\System::getTempDir instead.
+     */
+    public static function getTempDir()
+    {
+        return SimpleSAML\Utils\System::getTempDir();
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0.
+     */
+    public static function maskErrors($mask)
+    {
+        assert('is_int($mask)');
+
+        $currentEnabled = error_reporting();
+        self::$logLevelStack[] = array($currentEnabled, self::$logMask);
+
+        $currentEnabled &= ~$mask;
+        error_reporting($currentEnabled);
+        self::$logMask |= $mask;
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0.
+     */
+    public static function popErrorMask()
+    {
+        $lastMask = array_pop(self::$logLevelStack);
+        error_reporting($lastMask[0]);
+        self::$logMask = $lastMask[1];
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use
+     *     SimpleSAML\Utils\Config\Metadata::getDefaultEndpoint() instead.
+     */
+    public static function getDefaultEndpoint(array $endpoints, array $bindings = null)
+    {
+        return \SimpleSAML\Utils\Config\Metadata::getDefaultEndpoint($endpoints, $bindings);
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::checkSessionCookie()
+     *     instead.
+     */
+    public static function checkCookie($retryURL = null)
+    {
+        \SimpleSAML\Utils\HTTP::checkSessionCookie($retryURL);
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\XML::debugSAMLMessage() instead.
+     */
+    public static function debugMessage($message, $type)
+    {
+        \SimpleSAML\Utils\XML::debugSAMLMessage($message, $type);
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::fetch() instead.
+     */
+    public static function fetch($path, $context = array(), $getHeaders = false)
+    {
+        return \SimpleSAML\Utils\HTTP::fetch($path, $context, $getHeaders);
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\Crypto::aesEncrypt() instead.
+     */
+    public static function aesEncrypt($clear)
+    {
+        return SimpleSAML\Utils\Crypto::aesEncrypt($clear);
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\Crypto::aesDecrypt() instead.
+     */
+    public static function aesDecrypt($encData)
+    {
+        return SimpleSAML\Utils\Crypto::aesDecrypt($encData);
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\System::getOS() instead.
+     */
+    public static function isWindowsOS()
+    {
+        return SimpleSAML\Utils\System::getOS() === SimpleSAML\Utils\System::WINDOWS;
+    }
+
+
+    /**
+     * @deprecated This method will be removed in SSP 2.0. Please use SimpleSAML\Utils\HTTP::setCookie() instead.
+     */
+    public static function setCookie($name, $value, array $params = null, $throw = true)
+    {
+        \SimpleSAML\Utils\HTTP::setCookie($name, $value, $params, $throw);
+    }
 
 }
-- 
GitLab