summaryrefslogtreecommitdiffstats
path: root/ipsilon/providers/common.py
diff options
context:
space:
mode:
authorSimo Sorce <simo@redhat.com>2014-04-07 16:49:06 -0400
committerSimo Sorce <simo@redhat.com>2014-04-11 17:25:54 -0400
commit0464f1403990d3bfd85cd471f6676e70b1e81648 (patch)
treec8c87d56d7b26a7f02bb63a308ba4b884fe4f842 /ipsilon/providers/common.py
parente8c8dce4043fa4fb3bb636cab21be77978642002 (diff)
downloadipsilon-0464f1403990d3bfd85cd471f6676e70b1e81648.tar.gz
ipsilon-0464f1403990d3bfd85cd471f6676e70b1e81648.tar.xz
ipsilon-0464f1403990d3bfd85cd471f6676e70b1e81648.zip
Change provider plugins registration and enablement
When plugins are not enabled at startup the admin page is not available as it is created only on enablement. Split enablement and registration, so plugins can be registered even when actually disabled. Also rework the way enablement is tracked and make sure enablement status is saved back to the database when it changes so it is kept on restarts. Signed-off-by: Simo Sorce <simo@redhat.com>
Diffstat (limited to 'ipsilon/providers/common.py')
-rwxr-xr-xipsilon/providers/common.py52
1 files changed, 37 insertions, 15 deletions
diff --git a/ipsilon/providers/common.py b/ipsilon/providers/common.py
index f9c1311..b1eab1a 100755
--- a/ipsilon/providers/common.py
+++ b/ipsilon/providers/common.py
@@ -43,6 +43,7 @@ class ProviderBase(PluginObject):
super(ProviderBase, self).__init__()
self.name = name
self.path = path
+ self.tree = None
self.admin = None
def _debug(self, fact):
@@ -52,32 +53,55 @@ class ProviderBase(PluginObject):
def get_tree(self, site):
raise NotImplementedError
- def enable(self, site):
- plugins = site[FACILITY]
- if self in plugins['enabled']:
+ 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 = plugins['root']
- root.add_subtree(self.name, self.get_tree(site))
+ root = site[FACILITY]['root']
+ root.add_subtree(self.name, self.tree)
- plugins['enabled'].append(self)
+ self.set_config_value('enabled', '1')
+ self.save_plugin_config(FACILITY)
self._debug('IdP Provider enabled: %s' % self.name)
def disable(self, site):
- plugins = site[FACILITY]
- if self not in plugins['enabled']:
+ if not self.is_enabled:
return
# remove self to the root
- root = plugins['root']
+ root = site[FACILITY]['root']
root.del_subtree(self.name)
- plugins['enabled'].remove(self)
+ self.set_config_value('enabled', '0')
+ self.save_plugin_config(FACILITY)
self._debug('IdP Provider disabled: %s' % self.name)
@@ -123,11 +147,9 @@ class LoadProviders(object):
self._debug('Available providers: %s' % str(available))
providers['root'] = root
- for item in providers['whitelist']:
- self._debug('IdP Provider in whitelist: %s' % item)
- if item not in providers['available']:
- continue
- providers['available'][item].enable(site)
+ for item in providers['available']:
+ plugin = providers['available'][item]
+ plugin.register(site)
def _debug(self, fact):
if cherrypy.config.get('debug', False):