X-Git-Url: http://git.cascardo.info/?p=cascardo%2Fipsilon.git;a=blobdiff_plain;f=ipsilon%2Flogin%2Fcommon.py;h=9beb74102985fcf4c85206c9907b80c595f5eb60;hp=b394fa0ce90cf8d604141811880cf019666ee6a4;hb=101022e3bf4dfe3f0c56ffb61abbf358a3b1ab26;hpb=b7b80c5c0fc1895e85aae3acbfcbbc593a42697f diff --git a/ipsilon/login/common.py b/ipsilon/login/common.py old mode 100755 new mode 100644 index b394fa0..9beb741 --- a/ipsilon/login/common.py +++ b/ipsilon/login/common.py @@ -1,5 +1,3 @@ -#!/usr/bin/python -# # Copyright (C) 2013 Simo Sorce # # see file 'COPYING' for use and warranty information @@ -39,34 +37,44 @@ class LoginManagerBase(PluginConfig, PluginObject): self.path = '/' self.info = None - def redirect_to_path(self, path): + def redirect_to_path(self, path, trans=None): base = cherrypy.config.get('base.mount', "") - raise cherrypy.HTTPRedirect('%s/login/%s' % (base, path)) + url = '%s/login/%s' % (base, path) + if trans: + url += '?%s' % trans.get_GET_arg() + raise cherrypy.HTTPRedirect(url) def auth_successful(self, trans, username, auth_type=None, userdata=None): session = UserSession() + # merge attributes from login plugin and info plugin if self.info: - userattrs = self.info.get_user_attrs(username) - if userdata: - userdata.update(userattrs.get('userdata', {})) - else: - userdata = userattrs.get('userdata', {}) + infoattrs = self.info.get_user_attrs(username) + else: + infoattrs = dict() + + if userdata is None: + userdata = dict() + + if '_groups' in infoattrs: + userdata['_groups'] = list(set(userdata.get('_groups', []) + + infoattrs['_groups'])) + del infoattrs['_groups'] - # merge groups and extras from login plugin and info plugin - userdata['groups'] = list(set(userdata.get('groups', []) + - userattrs.get('groups', []))) + if '_extras' in infoattrs: + userdata['_extras'] = userdata.get('_extras', {}) + userdata['_extras'].update(infoattrs['_extras']) + del infoattrs['_extras'] - userdata['extras'] = userdata.get('extras', {}) - userdata['extras'].update(userattrs.get('extras', {})) + userdata.update(infoattrs) - self.debug("User %s attributes: %s" % (username, repr(userdata))) + self.debug("User %s attributes: %s" % (username, repr(userdata))) if auth_type: if userdata: - userdata.update({'auth_type': auth_type}) + userdata.update({'_auth_type': auth_type}) else: - userdata = {'auth_type': auth_type} + userdata = {'_auth_type': auth_type} # create session login including all the userdata just gathered session.login(username, userdata) @@ -95,7 +103,7 @@ class LoginManagerBase(PluginConfig, PluginObject): # try with next module next_login = self.next_login() if next_login: - return self.redirect_to_path(next_login.path) + return self.redirect_to_path(next_login.path, trans) # return to the caller if any session = UserSession() @@ -114,6 +122,9 @@ class LoginManagerBase(PluginConfig, PluginObject): raise cherrypy.HTTPRedirect(transdata['login_return']) + def set_auth_error(self): + cherrypy.response.status = 401 + def get_tree(self, site): raise NotImplementedError @@ -179,16 +190,18 @@ class LoginFormBase(LoginPageBase): cookie = SecureCookie(USERNAME_COOKIE) cookie.receive() username = cookie.value - if username is None: - username = '' target = None if self.trans is not None: tid = self.trans.transaction_id target = self.trans.retrieve().get('login_target') + username = self.trans.retrieve().get('login_username') if tid is None: tid = '' + if username is None: + username = '' + context = { "title": 'Login', "action": '%s/%s' % (self.basepath, self.formpage), @@ -285,6 +298,25 @@ class Cancel(Page): return op(*args, **kwargs) +class LoginManagerInstaller(object): + def __init__(self): + self.facility = FACILITY + self.ptype = 'login' + self.name = None + + def unconfigure(self, opts): + return + + def install_args(self, group): + raise NotImplementedError + + def validate_args(self, args): + return + + def configure(self, opts): + raise NotImplementedError + + class LoginMgrsInstall(object): def __init__(self):