X-Git-Url: http://git.cascardo.info/?p=cascardo%2Fipsilon.git;a=blobdiff_plain;f=ipsilon%2Fadmin%2Flogin.py;h=0f971ac9829ac5b1e83524e7f40c6219a41a7f4f;hp=4645917902b2703cf486cae01deac34423216663;hb=HEAD;hpb=6c60a2e0c335ecc907cfcd576165be45021086a9 diff --git a/ipsilon/admin/login.py b/ipsilon/admin/login.py old mode 100755 new mode 100644 index 4645917..0f971ac --- a/ipsilon/admin/login.py +++ b/ipsilon/admin/login.py @@ -1,178 +1,10 @@ -#!/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 . +# Copyright (C) 2014 Ipsilon project Contributors, for license see COPYING -import cherrypy -from ipsilon.util.page import admin_protect -from ipsilon.util.plugin import PluginObject -from ipsilon.admin.common import AdminPluginPage -from ipsilon.admin.common import AdminPage +from ipsilon.admin.loginstack import LoginStackPlugins from ipsilon.login.common import FACILITY -def save_enabled_plugins(names): - po = PluginObject() - po.name = "global" - globalconf = dict() - globalconf['order'] = ','.join(names) - po.set_config(globalconf) - po.save_plugin_config(FACILITY) - - -class LoginPluginsOrder(AdminPage): - - def __init__(self, site, parent): - super(LoginPluginsOrder, self).__init__(site, form=True) - self.url = '%s/order' % parent.url - self.menu = [parent] - - def _reorder_plugins(self, order): - plugins = self._site[FACILITY]['available'] - root = self._site[FACILITY]['root'] - prev_obj = None - for name in order: - if prev_obj is None: - root.first_login = plugins[name] - else: - prev_obj.next_login = plugins[name] - prev_obj = plugins[name] - prev_obj.next_login = None - - @admin_protect - def GET(self, *args, **kwargs): - opts = [p.name for p in self._site[FACILITY]['enabled']] - return self._template('admin/login_order.html', - title='login plugins order', - name='admin_login_order_form', - menu=self.menu, action=self.url, - options=opts) - - @admin_protect - def POST(self, *args, **kwargs): - message = "Nothing was modified." - message_type = "info" - plugins_by_name = {p.name: p for p in self._site[FACILITY]['enabled']} - - if 'order' in kwargs: - order = kwargs['order'].split(',') - if len(order) != 0: - new_names = [] - new_plugins = [] - try: - for v in order: - val = v.strip() - if val not in plugins_by_name: - error = "Invalid plugin name: %s" % val - raise ValueError(error) - new_names.append(val) - new_plugins.append(plugins_by_name[val]) - if len(new_names) < len(plugins_by_name): - for val in plugins_by_name: - if val not in new_names: - new_names.append(val) - new_plugins.append(plugins_by_name[val]) - - save_enabled_plugins(new_names) - self._reorder_plugins(new_names) - - # When all is saved update also live config. The - # live config is a list of the actual plugin - # objects. - self._site[FACILITY]['enabled'] = new_plugins - - message = "New configuration saved." - message_type = "success" - - except ValueError, e: - message = str(e) - message_type = "error" - - except Exception, e: # pylint: disable=broad-except - message = "Failed to save data!" - message_type = "error" - - opts = [p.name for p in self._site[FACILITY]['enabled']] - return self._template('admin/login_order.html', - message=message, - message_type=message_type, - title='login plugins order', - name='admin_login_order_form', - menu=self.menu, action=self.url, - options=opts) - - -class LoginPlugins(AdminPage): +class LoginPlugins(LoginStackPlugins): def __init__(self, site, parent): - super(LoginPlugins, self).__init__(site) - self._master = parent + super(LoginPlugins, self).__init__('login', site, parent, FACILITY) self.title = 'Login Plugins' - self.url = '%s/login' % parent.url - self.facility = FACILITY - parent.add_subtree('login', self) - - for plugin in self._site[FACILITY]['available']: - cherrypy.log.error('Admin login plugin: %s' % plugin) - obj = self._site[FACILITY]['available'][plugin] - self.__dict__[plugin] = AdminPluginPage(obj, self._site, self) - - self.order = LoginPluginsOrder(self._site, self) - - def root_with_msg(self, message=None, message_type=None): - login_plugins = self._site[FACILITY] - ordered = [] - for p in login_plugins['enabled']: - ordered.append(p.name) - return self._template('admin/login.html', title=self.title, - message=message, - message_type=message_type, - available=login_plugins['available'], - enabled=ordered, - 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 obj not in plugins['enabled']: - obj.enable(self._site) - save_enabled_plugins(list(x.name for x in plugins['enabled'])) - 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 in plugins['enabled']: - obj.disable(self._site) - save_enabled_plugins(list(x.name for x in plugins['enabled'])) - msg = "Plugin %s disabled" % obj.name - return self.root_with_msg(msg, "success") - disable.public_function = True