Add OpenIDP Provider
[cascardo/ipsilon.git] / ipsilon / providers / openid / extensions / common.py
diff --git a/ipsilon/providers/openid/extensions/common.py b/ipsilon/providers/openid/extensions/common.py
new file mode 100755 (executable)
index 0000000..b75d394
--- /dev/null
@@ -0,0 +1,67 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2014  Ipsilon project Contributors, for licensee see COPYING
+
+from __future__ import absolute_import
+
+from ipsilon.providers.common import FACILITY
+from ipsilon.util.plugin import PluginLoader
+from ipsilon.util.log import Log
+
+
+class OpenidExtensionBase(Log):
+
+    def __init__(self, name=None):
+        self.name = name
+        self.enabled = False
+        self.type_uris = []
+
+    def _display(self, request, userdata):
+        raise NotImplementedError
+
+    def _response(self, request, userdata):
+        raise NotImplementedError
+
+    def get_type_uris(self):
+        if self.enabled:
+            return self.type_uris
+        return []
+
+    def get_display_data(self, request, userdata):
+        if self.enabled:
+            return self._display(request, userdata)
+        return {}
+
+    def get_response(self, request, userdata):
+        if self.enabled:
+            return self._response(request, userdata)
+        return None
+
+    def enable(self):
+        self.enabled = True
+
+    def disable(self):
+        self.enabled = False
+
+
+FACILITY = 'openid_extensions'
+
+
+class LoadExtensions(Log):
+
+    def __init__(self, enabled):
+        loader = PluginLoader(LoadExtensions, FACILITY, 'OpenidExtension')
+        self.plugins = loader.get_plugin_data()
+
+        available = self.plugins['available'].keys()
+        self._debug('Available Extensions: %s' % str(available))
+
+        for item in enabled:
+            if item not in self.plugins['available']:
+                self.debug('<%s> not available' % item)
+                continue
+            self.debug('Enable OpenId extension: %s' % item)
+            self.plugins['available'][item].enable()
+
+    def get_extensions(self):
+        return self.plugins['available']