summaryrefslogtreecommitdiffstats
path: root/ipsilon/providers/openid/extensions/common.py
blob: 02cd1a0a1c8cfbc3c1f5a85443ca012e6f0d77c8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#!/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):
        self.plugins = PluginLoader(LoadExtensions,
                                    FACILITY, 'OpenidExtension')
        self.plugins.get_plugin_data()

        available = self.plugins.available.keys()
        self._debug('Available Extensions: %s' % str(available))

    def enable(self, enabled):
        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 available(self):
        return self.plugins.available