6dbaf938422a73d739e30dc8d53f1f91728a1407
[cascardo/ipsilon.git] / ipsilon / info / common.py
1 #!/usr/bin/python
2 #
3 # Copyright (C) 2014 Ipsilon Project Contributors
4 #
5 # See the file named COPYING for the project license
6
7 from ipsilon.util.log import Log
8 from ipsilon.util.plugin import PluginLoader, PluginObject
9 from ipsilon.util.plugin import PluginInstaller
10
11
12 class InfoProviderBase(PluginObject):
13
14     def __init__(self):
15         super(InfoProviderBase, self).__init__()
16
17     def get_user_attrs(self, user):
18         raise NotImplementedError
19
20
21 FACILITY = 'info_config'
22
23
24 class Info(Log):
25
26     def __init__(self, *args, **kwargs):
27         self.providers = []
28
29         loader = PluginLoader(Info, FACILITY, 'InfoProvider')
30         plugins = loader.get_plugin_data()
31
32         available = plugins['available'].keys()
33         self.debug('Available info providers: %s' % str(available))
34
35         for item in plugins['whitelist']:
36             self.debug('Login plugin in whitelist: %s' % item)
37             if item not in plugins['available']:
38                 self.debug('Info Plugin %s not found' % item)
39                 continue
40             self.providers.append((item, plugins['available'][item]))
41             self.debug('Added Info plugin: %s' % item)
42
43     def get_user_attrs(self, user, provider=None):
44         if provider:
45             for p in self.providers:
46                 if p[0] == provider:
47                     return p[1].get_user_attrs(user)
48         else:
49             for p in self.providers:
50                 ret = p[1].get_user_attrs(user)
51                 if ret:
52                     return ret
53
54         return None
55
56
57 class InfoProviderInstaller(object):
58
59     def __init__(self):
60         self.facility = FACILITY
61         self.ptype = 'info'
62         self.name = None
63
64     def install_args(self, group):
65         raise NotImplementedError
66
67     def configure(self, opts):
68         raise NotImplementedError
69
70
71 class InfoProviderInstall(object):
72
73     def __init__(self):
74         pi = PluginInstaller(InfoProviderInstall)
75         self.plugins = pi.get_plugins()