Improve exceptions for saml2 providers
authorSimo Sorce <simo@redhat.com>
Mon, 3 Mar 2014 00:03:38 +0000 (19:03 -0500)
committerSimo Sorce <simo@redhat.com>
Mon, 3 Mar 2014 00:11:34 +0000 (19:11 -0500)
Signed-off-by: Simo Sorce <simo@redhat.com>
ipsilon/providers/common.py
ipsilon/providers/saml2/auth.py
ipsilon/providers/saml2/provider.py

index 4599735..f8819c7 100755 (executable)
@@ -22,6 +22,20 @@ from ipsilon.util.page import Page
 import cherrypy
 
 
+class ProviderException(Exception):
+
+    def __init__(self, message):
+        super(ProviderException, self).__init__(message)
+        self.message = message
+
+    def __str__(self):
+        return repr(self.message)
+
+    def _debug(self, fact):
+        if cherrypy.config.get('debug', False):
+            cherrypy.log('%s: %s' % (self.__class__.__name__, fact))
+
+
 class ProviderBase(PluginObject):
 
     def __init__(self, name, path):
index 7f92d77..0dd16b8 100755 (executable)
@@ -17,7 +17,7 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-from ipsilon.providers.common import ProviderPageBase
+from ipsilon.providers.common import ProviderPageBase, ProviderException
 from ipsilon.providers.saml2.provider import ServiceProvider
 from ipsilon.providers.saml2.provider import InvalidProviderId
 from ipsilon.providers.saml2.provider import NameIdNotAllowed
@@ -27,25 +27,19 @@ import datetime
 import lasso
 
 
-class AuthenticationError(Exception):
+class AuthenticationError(ProviderException):
 
     def __init__(self, message, code):
         super(AuthenticationError, self).__init__(message)
-        self.message = message
         self.code = code
+        self._debug('%s [%s]' % (message, code))
 
-    def __str__(self):
-        return repr(self.message)
 
-
-class InvalidRequest(Exception):
+class InvalidRequest(ProviderException):
 
     def __init__(self, message):
         super(InvalidRequest, self).__init__(message)
-        self.message = message
-
-    def __str__(self):
-        return repr(self.message)
+        self._debug(message)
 
 
 class AuthenticateRequest(ProviderPageBase):
index acf2ee7..03efeb3 100755 (executable)
@@ -17,6 +17,7 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+from ipsilon.providers.common import ProviderException
 import cherrypy
 import lasso
 
@@ -34,15 +35,12 @@ NAMEID_MAP = {
 }
 
 
-class InvalidProviderId(Exception):
+class InvalidProviderId(ProviderException):
 
-    def __init__(self, message):
-        msg = 'Invalid Provider ID: %s' % message
-        super(InvalidProviderId, self).__init__(msg)
-        self.message = msg
-
-    def __str__(self):
-        return repr(self.message)
+    def __init__(self, code):
+        message = 'Invalid Provider ID: %s' % code
+        super(InvalidProviderId, self).__init__(message)
+        self._debug(message)
 
 
 class NameIdNotAllowed(Exception):
@@ -101,7 +99,7 @@ class ServiceProvider(object):
             for nameid in allowed:
                 if nip.format == NAMEID_MAP[nameid]:
                     return nip.format
-        raise NameIdNotAllowed()
+        raise NameIdNotAllowed(nip.format)
 
     def _debug(self, fact):
         if cherrypy.config.get('debug', False):