b75d39476f6374e0677f296c10db42c857d81ec4
[cascardo/ipsilon.git] / ipsilon / providers / openid / extensions / common.py
1 #!/usr/bin/python
2 #
3 # Copyright (C) 2014  Ipsilon project Contributors, for licensee see COPYING
4
5 from __future__ import absolute_import
6
7 from ipsilon.providers.common import FACILITY
8 from ipsilon.util.plugin import PluginLoader
9 from ipsilon.util.log import Log
10
11
12 class OpenidExtensionBase(Log):
13
14     def __init__(self, name=None):
15         self.name = name
16         self.enabled = False
17         self.type_uris = []
18
19     def _display(self, request, userdata):
20         raise NotImplementedError
21
22     def _response(self, request, userdata):
23         raise NotImplementedError
24
25     def get_type_uris(self):
26         if self.enabled:
27             return self.type_uris
28         return []
29
30     def get_display_data(self, request, userdata):
31         if self.enabled:
32             return self._display(request, userdata)
33         return {}
34
35     def get_response(self, request, userdata):
36         if self.enabled:
37             return self._response(request, userdata)
38         return None
39
40     def enable(self):
41         self.enabled = True
42
43     def disable(self):
44         self.enabled = False
45
46
47 FACILITY = 'openid_extensions'
48
49
50 class LoadExtensions(Log):
51
52     def __init__(self, enabled):
53         loader = PluginLoader(LoadExtensions, FACILITY, 'OpenidExtension')
54         self.plugins = loader.get_plugin_data()
55
56         available = self.plugins['available'].keys()
57         self._debug('Available Extensions: %s' % str(available))
58
59         for item in enabled:
60             if item not in self.plugins['available']:
61                 self.debug('<%s> not available' % item)
62                 continue
63             self.debug('Enable OpenId extension: %s' % item)
64             self.plugins['available'][item].enable()
65
66     def get_extensions(self):
67         return self.plugins['available']