summaryrefslogtreecommitdiffstats
path: root/ipsilon/admin
diff options
context:
space:
mode:
authorSimo Sorce <simo@redhat.com>2014-03-24 16:37:15 -0400
committerSimo Sorce <simo@redhat.com>2014-03-24 16:53:28 -0400
commit1e137be617dba1d0f3f85d594f5625926d3f46e9 (patch)
tree68abfb35e6490dc727b6f100f04cd169bccc37a3 /ipsilon/admin
parent8fe18393e0a3ff27e999a069207d48f782cca9f8 (diff)
downloadipsilon.git-1e137be617dba1d0f3f85d594f5625926d3f46e9.tar.gz
ipsilon.git-1e137be617dba1d0f3f85d594f5625926d3f46e9.tar.xz
ipsilon.git-1e137be617dba1d0f3f85d594f5625926d3f46e9.zip
Implement plugin ordering configuration
Allows to change the login plugins order from the admin configuration page. Signed-off-by: Simo Sorce <simo@redhat.com>
Diffstat (limited to 'ipsilon/admin')
-rwxr-xr-xipsilon/admin/common.py75
1 files changed, 75 insertions, 0 deletions
diff --git a/ipsilon/admin/common.py b/ipsilon/admin/common.py
index 6e36669..10171dc 100755
--- a/ipsilon/admin/common.py
+++ b/ipsilon/admin/common.py
@@ -20,6 +20,7 @@
from ipsilon.util.data import Store
from ipsilon.util.page import Page
from ipsilon.util.user import UserSession
+from ipsilon.util.plugin import PluginObject
import cherrypy
from ipsilon.login.common import FACILITY as LOGIN_FACILITY
@@ -105,6 +106,78 @@ class LoginPluginPage(Page):
return op(*args, **kwargs)
+class LoginPluginsOrder(Page):
+
+ def __init__(self, site, baseurl):
+ super(LoginPluginsOrder, self).__init__(site)
+ self.url = '%s/order' % baseurl
+
+ @admin_protect
+ def GET(self, *args, **kwargs):
+ return self._template('admin/login_order.html',
+ title='login plugins order',
+ name='admin_login_order_form',
+ action=self.url,
+ options=self._site[LOGIN_FACILITY]['enabled'])
+
+ @admin_protect
+ def POST(self, *args, **kwargs):
+ message = "Nothing was modified."
+ message_type = "info"
+ valid = self._site[LOGIN_FACILITY]['enabled']
+
+ if 'order' in kwargs:
+ order = kwargs['order'].split(',')
+ if len(order) != 0:
+ new_values = []
+ try:
+ for v in order:
+ val = v.strip()
+ if val not in valid:
+ error = "Invalid plugin name: %s" % val
+ raise ValueError(error)
+ new_values.append(val)
+ if len(new_values) < len(valid):
+ for val in valid:
+ if val not in new_values:
+ new_values.append(val)
+
+ po = PluginObject()
+ po.name = "global"
+ globalconf = dict()
+ globalconf['order'] = ','.join(new_values)
+ po.set_config(globalconf)
+ po.save_plugin_config(LOGIN_FACILITY)
+
+ # When all is saved update also live config
+ self._site[LOGIN_FACILITY]['enabled'] = new_values
+
+ 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"
+
+ return self._template('admin/login_order.html',
+ message=message,
+ message_type=message_type,
+ title='login plugins order',
+ name='admin_login_order_form',
+ action=self.url,
+ options=self._site[LOGIN_FACILITY]['enabled'])
+
+ def root(self, *args, **kwargs):
+ cherrypy.log.error("method: %s" % cherrypy.request.method)
+ op = getattr(self, cherrypy.request.method, self.GET)
+ if callable(op):
+ return op(*args, **kwargs)
+
+
class LoginPlugins(Page):
def __init__(self, site, baseurl):
super(LoginPlugins, self).__init__(site)
@@ -115,6 +188,8 @@ class LoginPlugins(Page):
obj = self._site[LOGIN_FACILITY]['available'][plugin]
self.__dict__[plugin] = LoginPluginPage(obj, self._site, self.url)
+ self.order = LoginPluginsOrder(self._site, self.url)
+
class Admin(Page):