diff options
Diffstat (limited to 'ipsilon/providers/openid/extensions/common.py')
-rwxr-xr-x | ipsilon/providers/openid/extensions/common.py | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/ipsilon/providers/openid/extensions/common.py b/ipsilon/providers/openid/extensions/common.py new file mode 100755 index 0000000..b75d394 --- /dev/null +++ b/ipsilon/providers/openid/extensions/common.py @@ -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'] |