From b74018073df70b8c99ba24c7baa34631f384eaf2 Mon Sep 17 00:00:00 2001 From: Vincent Pelletier <vincent@nexedi.com> Date: Fri, 18 Sep 2015 11:32:20 +0200 Subject: [PATCH] PasswordTool: Redirect only when response is able to. We now check if RESPONSE.redirect() exists, because TimerResponse does not have redirect(). Currently TImerResponse is used only in dummyGroupMethod (or any grouping method ?) but ideally it should be used in any activity. --- product/ERP5/Tool/PasswordTool.py | 39 ++++++++++++------------------- 1 file changed, 15 insertions(+), 24 deletions(-) diff --git a/product/ERP5/Tool/PasswordTool.py b/product/ERP5/Tool/PasswordTool.py index 102f3528b1..fd7fd4194d 100644 --- a/product/ERP5/Tool/PasswordTool.py +++ b/product/ERP5/Tool/PasswordTool.py @@ -43,6 +43,15 @@ from Products.ERP5Type.Globals import PersistentMapping from BTrees.OOBTree import OOBTree from urllib import urlencode +redirect_path = '/login_form' +def redirect(REQUEST, site_url, message): + if REQUEST is not None and getattr(REQUEST.RESPONSE, 'redirect', None) is not None: + parameter = urlencode({'portal_status_message': message}) + ret_url = '%s%s?%s' % (site_url, redirect_path, parameter) + return REQUEST.RESPONSE.redirect( ret_url ) + else: + return message + class PasswordTool(BaseTool): """ PasswordTool is used to allow a user to change its password @@ -150,12 +159,7 @@ class PasswordTool(BaseTool): "User ${user} does not have an email address, please contact site " "administrator directly", mapping={'user':user_login}) if msg: - if REQUEST is not None: - parameter = urlencode(dict(portal_status_message=msg)) - ret_url = '%s/login_form?%s' % \ - (site_url, parameter) - return REQUEST.RESPONSE.redirect( ret_url ) - return msg + return redirect(REQUEST, site_url, msg) key = self.getResetPasswordKey(user_login=user_login, expiration_date=expiration_date) @@ -202,11 +206,8 @@ class PasswordTool(BaseTool): store_as_event=store_as_event, message_text_format=message_text_format, event_keyword_argument_dict=event_keyword_argument_dict) - if REQUEST is not None: - msg = translateString("An email has been sent to you.") - parameter = urlencode(dict(portal_status_message=msg)) - ret_url = '%s/login_form?%s' % (site_url, parameter) - return REQUEST.RESPONSE.redirect( ret_url ) + return redirect(REQUEST, site_url, + translateString("An email has been sent to you.")) def _generateUUID(self, args=""): """ @@ -274,13 +275,7 @@ class PasswordTool(BaseTool): # calling code and making mistakes more difficult # BBB: should probably not translate message when REQUEST is None message = translateString(message) - if REQUEST is None: - return message - return REQUEST.RESPONSE.redirect( - site_url + '/login_form?' + urlencode({ - 'portal_status_message': message, - }) - ) + return redirect(REQUEST, site_url, message) if REQUEST is None: REQUEST = get_request() @@ -308,11 +303,7 @@ class PasswordTool(BaseTool): person = persons[0] person._forceSetPassword(password) person.reindexObject() - if REQUEST is not None: - return REQUEST.RESPONSE.redirect( - site_url + '/login_form?' + urlencode({ - 'portal_status_message': translateString("Password changed."), - }) - ) + return redirect(REQUEST, site_url, + translateString("Password changed.")) InitializeClass(PasswordTool) -- 2.30.9