X-Git-Url: http://git.cascardo.info/?p=cascardo%2Fipsilon.git;a=blobdiff_plain;f=ipsilon%2Fproviders%2Fcommon.py;h=b1eab1a02fa87f5436d7ecb558bd102a2d79628a;hp=3b2072c809ba5234794a1d3fdbc8fe8874f03e7e;hb=0464f1403990d3bfd85cd471f6676e70b1e81648;hpb=1d7df9dbac43b63424ee07ebfb86c6a106dcb43c diff --git a/ipsilon/providers/common.py b/ipsilon/providers/common.py index 3b2072c..b1eab1a 100755 --- a/ipsilon/providers/common.py +++ b/ipsilon/providers/common.py @@ -43,6 +43,66 @@ class ProviderBase(PluginObject): super(ProviderBase, self).__init__() self.name = name self.path = path + self.tree = None + self.admin = None + + def _debug(self, fact): + if cherrypy.config.get('debug', False): + cherrypy.log(fact) + + def get_tree(self, site): + raise NotImplementedError + + def register(self, site): + if self.tree: + # already registered + return + + # configure self + plugins = site[FACILITY] + if self.name in plugins['config']: + self.set_config(plugins['config'][self.name]) + + # init pages and admin interfaces + self.tree = self.get_tree(site) + + self._debug('IdP Provider registered: %s' % self.name) + + if self.get_config_value('enabled') == '1': + # and add self to the root + root = site[FACILITY]['root'] + root.add_subtree(self.name, self.tree) + self._debug('IdP Provider enabled: %s' % self.name) + + @property + def is_enabled(self): + if self.get_config_value('enabled') == '1': + return True + return False + + def enable(self, site): + if self.is_enabled: + return + + # and add self to the root + root = site[FACILITY]['root'] + root.add_subtree(self.name, self.tree) + + self.set_config_value('enabled', '1') + self.save_plugin_config(FACILITY) + self._debug('IdP Provider enabled: %s' % self.name) + + def disable(self, site): + if not self.is_enabled: + return + + # remove self to the root + root = site[FACILITY]['root'] + root.del_subtree(self.name) + + self.set_config_value('enabled', '0') + self.save_plugin_config(FACILITY) + self._debug('IdP Provider disabled: %s' % self.name) class ProviderPageBase(Page): @@ -86,16 +146,10 @@ class LoadProviders(object): available = providers['available'].keys() self._debug('Available providers: %s' % str(available)) - for item in providers['whitelist']: - self._debug('IdP Provider in whitelist: %s' % item) - if item not in providers['available']: - continue - self._debug('IdP Provider enabled: %s' % item) - providers['enabled'].append(item) - provider = providers['available'][item] - if item in providers['config']: - provider.set_config(providers['config'][item]) - root.__dict__[item] = provider.get_tree(site) + providers['root'] = root + for item in providers['available']: + plugin = providers['available'][item] + plugin.register(site) def _debug(self, fact): if cherrypy.config.get('debug', False):