From 0338db2eb3197ce0024d0192bd981120a58de573 Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Wed, 26 Mar 2014 15:20:16 -0400 Subject: [PATCH] Basic Identity providers plugin configuration Signed-off-by: Simo Sorce --- ipsilon/admin/providers.py | 78 ++++++++++++++++++++++++++++++++++ ipsilon/root.py | 2 + templates/admin/providers.html | 20 +++++++++ 3 files changed, 100 insertions(+) create mode 100755 ipsilon/admin/providers.py create mode 100644 templates/admin/providers.html diff --git a/ipsilon/admin/providers.py b/ipsilon/admin/providers.py new file mode 100755 index 0000000..26e96a7 --- /dev/null +++ b/ipsilon/admin/providers.py @@ -0,0 +1,78 @@ +#!/usr/bin/python +# +# Copyright (C) 2014 Simo Sorce +# +# 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 . + + +import cherrypy +from ipsilon.util.page import Page +from ipsilon.providers.common import FACILITY +from ipsilon.admin.common import AdminPluginPage + + +class ProviderPlugins(Page): + def __init__(self, site, parent): + super(ProviderPlugins, self).__init__(site) + self._master = parent + 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] + self.__dict__[plugin] = AdminPluginPage(obj, self) + + def root_with_msg(self, message=None, message_type=None): + plugins = self._site[FACILITY] + return self._template('admin/providers.html', title=self.title, + baseurl=self.url, + message=message, + message_type=message_type, + available=plugins['available'], + enabled=plugins['enabled'], + menu=self._master.menu) + + def root(self, *args, **kwargs): + return self.root_with_msg() + + 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 obj not in plugins['enabled']: + obj.enable(self._site) + msg = "Plugin %s enabled" % obj.name + return self.root_with_msg(msg, "success") + enable.exposed = True + + 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 in plugins['enabled']: + obj.disable(self._site) + msg = "Plugin %s disabled" % obj.name + return self.root_with_msg(msg, "success") + disable.exposed = True diff --git a/ipsilon/root.py b/ipsilon/root.py index c308c95..9451d22 100755 --- a/ipsilon/root.py +++ b/ipsilon/root.py @@ -24,6 +24,7 @@ from ipsilon.login.common import Logout from ipsilon.admin.common import Admin from ipsilon.providers.common import LoadProviders from ipsilon.admin.login import LoginPlugins +from ipsilon.admin.providers import ProviderPlugins import cherrypy sites = dict() @@ -53,6 +54,7 @@ class Root(Page): # after all plugins are setup we can instantiate the admin pages self.admin = Admin(self._site, 'admin') LoginPlugins(self._site, self.admin) + ProviderPlugins(self._site, self.admin) def root(self): return self._template('index.html', title='Ipsilon') diff --git a/templates/admin/providers.html b/templates/admin/providers.html new file mode 100644 index 0000000..18445b6 --- /dev/null +++ b/templates/admin/providers.html @@ -0,0 +1,20 @@ +{% extends "master-admin.html" %} +{% block main %} +{% if user.is_admin %} +

Provider plugins

+ + {% for p in available %} +
+
{{ p }}
+
+ {% if available[p] in enabled %} + Disable + Configure + {% else %} + Enable + {% endif %} +
+
+ {% endfor %} +{% endif %} +{% endblock %} -- 2.20.1