diff options
-rwxr-xr-x | ipsilon/admin/common.py | 14 | ||||
-rwxr-xr-x | ipsilon/admin/providers.py | 87 | ||||
-rwxr-xr-x | ipsilon/info/common.py | 12 | ||||
-rwxr-xr-x | ipsilon/login/common.py | 9 | ||||
-rw-r--r-- | templates/admin/providers.html | 74 |
5 files changed, 93 insertions, 103 deletions
diff --git a/ipsilon/admin/common.py b/ipsilon/admin/common.py index 827038e..b3c318b 100755 --- a/ipsilon/admin/common.py +++ b/ipsilon/admin/common.py @@ -213,8 +213,14 @@ class AdminPlugins(AdminPage): def root_with_msg(self, message=None, message_type=None): plugins = self._site[self.facility] enabled = [] - for p in plugins['enabled']: - enabled.append(p.name) + if self.order: + for plugin in plugins['enabled']: + enabled.append(plugin.name) + else: + for _, plugin in plugins['available'].iteritems(): + if plugin.is_enabled: + enabled.append(plugin.name) + targs = {'title': self.title, 'menu': self._master.menu, 'message': message, @@ -240,7 +246,7 @@ class AdminPlugins(AdminPage): msg = "Unknown plugin %s" % plugin return self.root_with_msg(msg, "error") obj = plugins['available'][plugin] - if obj not in plugins['enabled']: + if not obj.is_enabled: obj.enable(self._site) if self.order: enabled = list(x.name for x in plugins['enabled']) @@ -257,7 +263,7 @@ class AdminPlugins(AdminPage): msg = "Unknown plugin %s" % plugin return self.root_with_msg(msg, "error") obj = plugins['available'][plugin] - if obj in plugins['enabled']: + if obj.is_enabled: obj.disable(self._site) if self.order: enabled = list(x.name for x in plugins['enabled']) diff --git a/ipsilon/admin/providers.py b/ipsilon/admin/providers.py index 06e5f54..ddba535 100755 --- a/ipsilon/admin/providers.py +++ b/ipsilon/admin/providers.py @@ -1,89 +1,14 @@ #!/usr/bin/python # -# Copyright (C) 2014 Simo Sorce <simo@redhat.com> -# -# see file 'COPYING' for use and warranty information -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. - +# Copyright (C) 2014 Ipsilon Contributors see COPYING for license -import cherrypy -from ipsilon.util.page import admin_protect +from ipsilon.admin.common import AdminPlugins from ipsilon.providers.common import FACILITY -from ipsilon.admin.common import AdminPluginConfig -from ipsilon.admin.common import AdminPage -class ProviderPlugins(AdminPage): +class ProviderPlugins(AdminPlugins): def __init__(self, site, parent): - super(ProviderPlugins, self).__init__(site) - self._master = parent + super(ProviderPlugins, self).__init__('providers', site, parent, + FACILITY, ordered=False) self.title = 'Identity Providers' - self.url = '%s/providers' % parent.url - self.facility = FACILITY - parent.add_subtree('providers', self) - - for plugin in self._site[FACILITY]['available']: - cherrypy.log.error('Admin provider plugin: %s' % plugin) - obj = self._site[FACILITY]['available'][plugin] - page = AdminPluginConfig(obj, self._site, self) - if hasattr(obj, 'admin'): - obj.admin.mount(page) - self.add_subtree(plugin, page) - - def root_with_msg(self, message=None, message_type=None): - plugins = self._site[FACILITY] - enabled_plugins = [] - for item in plugins['available']: - plugin = plugins['available'][item] - if plugin.is_enabled: - enabled_plugins.append(item) - return self._template('admin/providers.html', title=self.title, - baseurl=self.url, - message=message, - message_type=message_type, - available=plugins['available'], - enabled=enabled_plugins, - menu=self._master.menu) - - def root(self, *args, **kwargs): - return self.root_with_msg() - - @admin_protect - def enable(self, plugin): - msg = None - plugins = self._site[FACILITY] - if plugin not in plugins['available']: - msg = "Unknown plugin %s" % plugin - return self.root_with_msg(msg, "error") - obj = plugins['available'][plugin] - if not obj.is_enabled: - obj.enable(self._site) - msg = "Plugin %s enabled" % obj.name - return self.root_with_msg(msg, "success") - enable.public_function = True - - @admin_protect - def disable(self, plugin): - msg = None - plugins = self._site[FACILITY] - if plugin not in plugins['available']: - msg = "Unknown plugin %s" % plugin - return self.root_with_msg(msg, "error") - obj = plugins['available'][plugin] - if obj.is_enabled: - obj.disable(self._site) - msg = "Plugin %s disabled" % obj.name - return self.root_with_msg(msg, "success") - disable.public_function = True + self.template = 'admin/providers.html' diff --git a/ipsilon/info/common.py b/ipsilon/info/common.py index 92a3ba2..62f80ef 100755 --- a/ipsilon/info/common.py +++ b/ipsilon/info/common.py @@ -13,18 +13,19 @@ class InfoProviderBase(PluginObject, Log): def __init__(self): super(InfoProviderBase, self).__init__() - self.enabled = False + self._site = None def get_user_attrs(self, user): raise NotImplementedError @property def is_enabled(self): - return self.enabled + if self._site: + return self in self._site[FACILITY]['enabled'] + return False def enable(self, site): - self.enabled = True - + self._site = site plugins = site[FACILITY] if self in plugins['enabled']: return @@ -37,8 +38,7 @@ class InfoProviderBase(PluginObject, Log): self.debug('Info plugin enabled: %s' % self.name) def disable(self, site): - self.enabled = False - + self._site = site plugins = site[FACILITY] if self not in plugins['enabled']: return diff --git a/ipsilon/login/common.py b/ipsilon/login/common.py index 6cd1ca8..73422ae 100755 --- a/ipsilon/login/common.py +++ b/ipsilon/login/common.py @@ -34,6 +34,7 @@ class LoginManagerBase(PluginObject, Log): def __init__(self): super(LoginManagerBase, self).__init__() + self._site = None self.path = '/' self.next_login = None self.info = None @@ -115,7 +116,14 @@ class LoginManagerBase(PluginObject, Log): def get_tree(self, site): raise NotImplementedError + @property + def is_enabled(self): + if self._site: + return self in self._site[FACILITY]['enabled'] + return False + def enable(self, site): + self._site = site plugins = site[FACILITY] if self in plugins['enabled']: return @@ -147,6 +155,7 @@ class LoginManagerBase(PluginObject, Log): self.info = root.info def disable(self, site): + self._site = site plugins = site[FACILITY] if self not in plugins['enabled']: return diff --git a/templates/admin/providers.html b/templates/admin/providers.html index 66230d7..c0147d8 100644 --- a/templates/admin/providers.html +++ b/templates/admin/providers.html @@ -1,23 +1,73 @@ {% extends "master-admin.html" %} {% block main %} {% if user.is_admin %} - <h2>Provider plugins</h2> - {% for p in available %} - <div class="row"> - <div class="col-md-3 col-sm-3 col-xs-6">{{ p }}</div> + <div class = "row"> + <div class="col-md-6 col-sm-6 col-xs-6"> + <h2>{{ title }}</h2> + </div> + <div class="col-md-6 col-sm-6 col-xs-6" role="alert"> + {% if message %} + <div class="alert alert-{{message_type}}"> + <p>{{ message }}</p> + </div> + {% endif %} + </div> + </div> + + <hr> + + {% for p in enabled %} + <div class="row"> <div class="col-md-3 col-sm-3 col-xs-6"> - {% if p in enabled %} - <a class="btn btn-default" href="{{ baseurl }}/disable/{{ p }}">Disable</a> - <a class="btn btn-default" href="{{ baseurl }}/{{ p }}">Configure</a> - {% if available[p].admin %} - <a class="btn btn-default" href="{{ baseurl }}/{{ p }}/admin">Administer</a> + <p><strong>{{ p }}</strong></p> + </div> + <div class="col-md-9 col-sm-9 col-xs-6"> + <div class="row"> + <div class="col-md-4 col-sm-4 col-xs-12"> + <p class="text-info"><a href="{{ baseurl }}/disable/{{ p }}">Disable</a></p> + </div> + <div class="col-md-4 col-sm-4 col-xs-12"> + {%- if available[p].get_config_desc() %} + <p class="text-primary"><a href="{{ baseurl }}/{{ p }}">Configure</a></p> + {% endif %} + </div> + <div class="col-md-4 col-sm-4 col-xs-12"> + {%- if available[p].admin %} + <p class="text-primary"><a href="{{ baseurl }}/{{ p }}/admin">Manage</a></p> {% endif %} - {% else %} - <a class="btn btn-default" href="{{ baseurl }}/enable/{{ p }}">Enable</a> - {% endif %} + </div> + </div> </div> + </div> + <hr> + {% endfor %} + + {% for p in available if not p in enabled %} + <div class="row"> + <div class="col-md-3 col-sm-3 col-xs-6"> + <p><strong>{{ p }}</strong></p> + </div> + <div class="col-md-9 col-sm-9 col-xs-6"> + <div class="row"> + <div class="col-md-4 col-sm-4 col-xs-12"> + <p class="text-info"><a href="{{ baseurl }}/enable/{{ p }}">Enable</a></p> + </div> + <div class="col-md-4 col-sm-4 col-xs-12"> + {%- if available[p].get_config_desc() %} + <p class="text-muted">Configure</p> + {% endif %} + </div> + <div class="col-md-4 col-sm-4 col-xs-12"> + {%- if available[p].admin %} + <p class="text-muted">Manage</p> + {% endif %} + </div> + </div> </div> + </div> + <hr> {% endfor %} + {% endif %} {% endblock %} |