From d48f2bf62bd933802b9950c072956b646b98381a Mon Sep 17 00:00:00 2001
From: Hanne Moa <hanne.moa@uninett.no>
Date: Thu, 15 Sep 2016 14:11:31 +0200
Subject: [PATCH] Add a map from error codes to titles/descriptions

---
 lib/SimpleSAML/Error/Error.php      |   4 +-
 lib/SimpleSAML/Error/ErrorCodes.php | 188 ++++++++++++++++++++++++++++
 2 files changed, 190 insertions(+), 2 deletions(-)
 create mode 100644 lib/SimpleSAML/Error/ErrorCodes.php

diff --git a/lib/SimpleSAML/Error/Error.php b/lib/SimpleSAML/Error/Error.php
index 542c35be4..0e26bf552 100644
--- a/lib/SimpleSAML/Error/Error.php
+++ b/lib/SimpleSAML/Error/Error.php
@@ -100,8 +100,8 @@ class SimpleSAML_Error_Error extends SimpleSAML_Error_Exception
             $this->dictTitle = '{'.$this->module.':errors:title_'.$moduleCode[1].'}';
             $this->dictDescr = '{'.$this->module.':errors:descr_'.$moduleCode[1].'}';
         } else {
-            $this->dictTitle = '{errors:title_'.$this->errorCode.'}';
-            $this->dictDescr = '{errors:descr_'.$this->errorCode.'}';
+            $this->dictTitle = SimpleSAML\Error\ErrorCodes::getErrorCodeTitle($this->errorCode);
+            $this->dictDescr = SimpleSAML\Error\ErrorCodes::getErrorCodeDescription($this->errorCode);
         }
 
         if (!empty($this->parameters)) {
diff --git a/lib/SimpleSAML/Error/ErrorCodes.php b/lib/SimpleSAML/Error/ErrorCodes.php
new file mode 100644
index 000000000..e4d081950
--- /dev/null
+++ b/lib/SimpleSAML/Error/ErrorCodes.php
@@ -0,0 +1,188 @@
+<?php
+/**
+ * Class that maps SimpleSAMLphp error codes to translateable strings.
+ *
+ * @author Hanne Moa, UNINETT AS. <hanne.moa@uninett.no>
+ * @package SimpleSAMLphp
+ */
+
+namespace SimpleSAML\Error;
+
+class ErrorCodes
+{
+    /**
+     * Fetch all default translation strings for error code titles.
+     *
+     * @return array A map from error code to error code title
+     */
+    final public static function defaultGetAllErrorCodeTitles()
+    {
+        return array(
+            'ACSPARAMS' => \SimpleSAML\Locale\Translate::noop('{error:title_ACSPARAMS}'),
+            'ARSPARAMS' => \SimpleSAML\Locale\Translate::noop('{error:title_ARSPARAMS}'),
+            'AUTHSOURCEERROR' => \SimpleSAML\Locale\Translate::noop('{error:title_AUTHSOURCEERROR}'),
+            'BADREQUEST' => \SimpleSAML\Locale\Translate::noop('{error:title_BADREQUEST}'),
+            'CASERROR' => \SimpleSAML\Locale\Translate::noop('{error:title_CASERROR}'),
+            'CONFIG' => \SimpleSAML\Locale\Translate::noop('{error:title_CONFIG}'),
+            'CREATEREQUEST' => \SimpleSAML\Locale\Translate::noop('{error:title_CREATEREQUEST}'),
+            'DISCOPARAMS' => \SimpleSAML\Locale\Translate::noop('{error:title_DISCOPARAMS}'),
+            'GENERATEAUTHNRESPONSE' => \SimpleSAML\Locale\Translate::noop('{error:title_GENERATEAUTHNRESPONSE}'),
+            'INVALIDCERT' => \SimpleSAML\Locale\Translate::noop('{error:title_INVALIDCERT}'),
+            'LDAPERROR' => \SimpleSAML\Locale\Translate::noop('{error:title_LDAPERROR}'),
+            'LOGOUTINFOLOST' => \SimpleSAML\Locale\Translate::noop('{error:title_LOGOUTINFOLOST}'),
+            'LOGOUTREQUEST' => \SimpleSAML\Locale\Translate::noop('{error:title_LOGOUTREQUEST}'),
+            'MEMCACHEDOWN' => \SimpleSAML\Locale\Translate::noop('{error:title_MEMCACHEDOWN}'),
+            'METADATA' => \SimpleSAML\Locale\Translate::noop('{error:title_METADATA}'),
+            'METADATANOTFOUND' => \SimpleSAML\Locale\Translate::noop('{error:title_METADATANOTFOUND}'),
+            'NOACCESS' => \SimpleSAML\Locale\Translate::noop('{error:title_NOACCESS}'),
+            'NOCERT' => \SimpleSAML\Locale\Translate::noop('{error:title_NOCERT}'),
+            'NORELAYSTATE' => \SimpleSAML\Locale\Translate::noop('{error:title_NORELAYSTATE}'),
+            'NOSTATE' => \SimpleSAML\Locale\Translate::noop('{error:title_NOSTATE}'),
+            'NOTFOUND' => \SimpleSAML\Locale\Translate::noop('{error:title_NOTFOUND}'),
+            'NOTFOUNDREASON' => \SimpleSAML\Locale\Translate::noop('{error:title_NOTFOUNDREASON}'),
+            'NOTSET' => \SimpleSAML\Locale\Translate::noop('{error:title_NOTSET}'),
+            'NOTVALIDCERT' => \SimpleSAML\Locale\Translate::noop('{error:title_NOTVALIDCERT}'),
+            'PROCESSASSERTION' => \SimpleSAML\Locale\Translate::noop('{error:title_PROCESSASSERTION}'),
+            'PROCESSAUTHNREQUEST' => \SimpleSAML\Locale\Translate::noop('{error:title_PROCESSAUTHNREQUEST}'),
+            'RESPONSESTATUSNOSUCCESS' => \SimpleSAML\Locale\Translate::noop('{error:title_RESPONSESTATUSNOSUCCESS}'),
+            'SLOSERVICEPARAMS' => \SimpleSAML\Locale\Translate::noop('{error:title_SLOSERVICEPARAMS}'),
+            'SSOPARAMS' => \SimpleSAML\Locale\Translate::noop('{error:title_SSOPARAMS}'),
+            'UNHANDLEDEXCEPTION' => \SimpleSAML\Locale\Translate::noop('{error:title_UNHANDLEDEXCEPTION}'),
+            'UNKNOWNCERT' => \SimpleSAML\Locale\Translate::noop('{error:title_UNKNOWNCERT}'),
+            'USERABORTED' => \SimpleSAML\Locale\Translate::noop('{error:title_USERABORTED}'),
+            'WRONGUSERPASS' => \SimpleSAML\Locale\Translate::noop('{error:title_WRONGUSERPASS}'),
+        );
+    }
+
+
+    /**
+     * Fetch all translation strings for error code titles.
+     *
+     * Extend this to add error codes.
+     *
+     * @return array A map from error code to error code title
+     */
+    public static function getAllErrorCodeTitles()
+    {
+        return self::defaultGetAllErrorCodeTitles();
+    }
+
+
+    /**
+     * Fetch all default translation strings for error code descriptions.
+     *
+     * @return string A map from error code to error code description
+     */
+    final public static function defaultGetAllErrorCodeDescriptions()
+    {
+        return array(
+            'ACSPARAMS' => \SimpleSAML\Locale\Translate::noop('{error:descr_ACSPARAMS}'),
+            'ARSPARAMS' => \SimpleSAML\Locale\Translate::noop('{error:descr_ARSPARAMS}'),
+            'AUTHSOURCEERROR' => \SimpleSAML\Locale\Translate::noop('{error:descr_AUTHSOURCEERROR}'),
+            'BADREQUEST' => \SimpleSAML\Locale\Translate::noop('{error:descr_BADREQUEST}'),
+            'CASERROR' => \SimpleSAML\Locale\Translate::noop('{error:descr_CASERROR}'),
+            'CONFIG' => \SimpleSAML\Locale\Translate::noop('{error:descr_CONFIG}'),
+            'CREATEREQUEST' => \SimpleSAML\Locale\Translate::noop('{error:descr_CREATEREQUEST}'),
+            'DISCOPARAMS' => \SimpleSAML\Locale\Translate::noop('{error:descr_DISCOPARAMS}'),
+            'GENERATEAUTHNRESPONSE' => \SimpleSAML\Locale\Translate::noop('{error:descr_GENERATEAUTHNRESPONSE}'),
+            'INVALIDCERT' => \SimpleSAML\Locale\Translate::noop('{error:descr_INVALIDCERT}'),
+            'LDAPERROR' => \SimpleSAML\Locale\Translate::noop('{error:descr_LDAPERROR}'),
+            'LOGOUTINFOLOST' => \SimpleSAML\Locale\Translate::noop('{error:descr_LOGOUTINFOLOST}'),
+            'LOGOUTREQUEST' => \SimpleSAML\Locale\Translate::noop('{error:descr_LOGOUTREQUEST}'),
+            'MEMCACHEDOWN' => \SimpleSAML\Locale\Translate::noop('{error:descr_MEMCACHEDOWN}'),
+            'METADATA' => \SimpleSAML\Locale\Translate::noop('{error:descr_METADATA}'),
+            'METADATANOTFOUND' => \SimpleSAML\Locale\Translate::noop('{error:descr_METADATANOTFOUND}'),
+            'NOACCESS' => \SimpleSAML\Locale\Translate::noop('{error:descr_NOACCESS}'),
+            'NOCERT' => \SimpleSAML\Locale\Translate::noop('{error:descr_NOCERT}'),
+            'NORELAYSTATE' => \SimpleSAML\Locale\Translate::noop('{error:descr_NORELAYSTATE}'),
+            'NOSTATE' => \SimpleSAML\Locale\Translate::noop('{error:descr_NOSTATE}'),
+            'NOTFOUND' => \SimpleSAML\Locale\Translate::noop('{error:descr_NOTFOUND}'),
+            'NOTFOUNDREASON' => \SimpleSAML\Locale\Translate::noop('{error:descr_NOTFOUNDREASON}'),
+            'NOTSET' => \SimpleSAML\Locale\Translate::noop('{error:descr_NOTSET}'),
+            'NOTVALIDCERT' => \SimpleSAML\Locale\Translate::noop('{error:descr_NOTVALIDCERT}'),
+            'PROCESSASSERTION' => \SimpleSAML\Locale\Translate::noop('{error:descr_PROCESSASSERTION}'),
+            'PROCESSAUTHNREQUEST' => \SimpleSAML\Locale\Translate::noop('{error:descr_PROCESSAUTHNREQUEST}'),
+            'RESPONSESTATUSNOSUCCESS' => \SimpleSAML\Locale\Translate::noop('{error:descr_RESPONSESTATUSNOSUCCESS}'),
+            'SLOSERVICEPARAMS' => \SimpleSAML\Locale\Translate::noop('{error:descr_SLOSERVICEPARAMS}'),
+            'SSOPARAMS' => \SimpleSAML\Locale\Translate::noop('{error:descr_SSOPARAMS}'),
+            'UNHANDLEDEXCEPTION' => \SimpleSAML\Locale\Translate::noop('{error:descr_UNHANDLEDEXCEPTION}'),
+            'UNKNOWNCERT' => \SimpleSAML\Locale\Translate::noop('{error:descr_UNKNOWNCERT}'),
+            'USERABORTED' => \SimpleSAML\Locale\Translate::noop('{error:descr_USERABORTED}'),
+            'WRONGUSERPASS' => \SimpleSAML\Locale\Translate::noop('{error:descr_WRONGUSERPASS}'),
+        );
+    }
+
+    /**
+     * Fetch all translation strings for error code descriptions.
+     *
+     * Extend this to add error codes.
+     *
+     * @return string A map from error code to error code description
+     */
+    public static function getAllErrorCodeDescriptions()
+    {
+        return self::defaultGetAllErrorCodeDescriptions();
+    }
+
+
+    /**
+     * Get a map of both errorcode titles and descriptions
+     *
+     * Convenience-method for template-callers
+     *
+     * @return array An array containing both errorcode maps.
+     */
+    public static function getAllErrorCodeMessages()
+    {
+        return array(
+            'title' => self::getAllErrorCodeTitles(),
+            'descr' => self::getAllErrorCodeDescriptions(),
+        );
+    }
+
+
+    /**
+     * Fetch a translation string for a title for a given error code.
+     *
+     * @param string $errorCode The error code to look up
+     *
+     * @return string A string to translate
+     */
+    public static function getErrorCodeTitle($errorCode)
+    {
+        $errorCodeTitles = self::getAllErrorCodeTitles();
+        return $errorCodeTitles[$errorCode];
+    }
+
+
+    /**
+     * Fetch a translation string for a description for a given error code.
+     *
+     * @param string $errorCode The error code to look up
+     *
+     * @return string A string to translate
+     */
+    public static function getErrorCodeDescription($errorCode)
+    {
+        $errorCodeDescriptions = self::getAllErrorCodeDescriptions();
+        return $errorCodeDescriptions[$errorCode];
+    }
+
+
+    /**
+     * Get both title and description for a specific error code
+     *
+     * Convenience-method for template-callers
+     *
+     * @param string $errorCode The error code to look up
+     *
+     * @return array An array containing both errorcode strings.
+     */
+    public static function getErrorCodeMessage($errorCode)
+    {
+        return array(
+            'title' => self::getErrorCodeTitle($errorCode),
+            'descr' => self::getErrorCodeDescription($errorCode),
+        );
+    }
+}
-- 
GitLab