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