Fix plugins enablement code
[cascardo/ipsilon.git] / ipsilon / providers / common.py
index 6bcfef8..d882b40 100755 (executable)
@@ -34,6 +34,21 @@ class ProviderException(Exception, Log):
         return repr(self.message)
 
 
+class AuthenticationError(ProviderException):
+
+    def __init__(self, message, code):
+        super(AuthenticationError, self).__init__(message)
+        self.code = code
+        self._debug('%s [%s]' % (message, code))
+
+
+class InvalidRequest(ProviderException):
+
+    def __init__(self, message):
+        super(InvalidRequest, self).__init__(message)
+        self._debug(message)
+
+
 class ProviderBase(PluginObject):
 
     def __init__(self, name, path):
@@ -41,6 +56,7 @@ class ProviderBase(PluginObject):
         self.name = name
         self.path = path
         self.tree = None
+        self.is_enabled = False
 
     def on_enable(self):
         # this one does nothing
@@ -66,31 +82,24 @@ class ProviderBase(PluginObject):
         self._debug('IdP Provider registered: %s' % self.name)
 
         if self.get_config_value('enabled') == '1':
-            # and add self to the root
-            root = site[FACILITY]['root']
-            root.add_subtree(self.name, self.tree)
-            self._debug('IdP Provider enabled: %s' % self.name)
+            # and enable self
+            self._enable(site)
 
-    @property
-    def is_enabled(self):
-        if self.get_config_value('enabled') == '1':
-            return True
-        return False
+    def _enable(self, site):
+        root = site[FACILITY]['root']
+        root.add_subtree(self.name, self.tree)
+        self._debug('IdP Provider enabled: %s' % self.name)
+        self.is_enabled = True
+        self.on_enable()
 
     def enable(self, site):
         if self.is_enabled:
             return
 
-        # and add self to the root
-        root = site[FACILITY]['root']
-        root.add_subtree(self.name, self.tree)
-
+        self._enable(site)
         self.set_config_value('enabled', '1')
         self.save_plugin_config(FACILITY)
 
-        self.on_enable()
-        self._debug('IdP Provider enabled: %s' % self.name)
-
     def disable(self, site):
         if not self.is_enabled:
             return
@@ -99,6 +108,7 @@ class ProviderBase(PluginObject):
         root = site[FACILITY]['root']
         root.del_subtree(self.name)
 
+        self.is_enabled = False
         self.set_config_value('enabled', '0')
         self.save_plugin_config(FACILITY)
         self._debug('IdP Provider disabled: %s' % self.name)
@@ -118,7 +128,13 @@ class ProviderPageBase(Page):
         raise cherrypy.HTTPError(501)
 
     def root(self, *args, **kwargs):
-        op = getattr(self, cherrypy.request.method, self.GET)
+        method = cherrypy.request.method
+
+        preop = getattr(self, 'pre_%s' % method, None)
+        if preop and callable(preop):
+            preop(*args, **kwargs)
+
+        op = getattr(self, method, self.GET)
         if callable(op):
             return op(*args, **kwargs)
         else: