Prise en charge de la redirection vers « came_from » lors de la ré-initialisation...
authorBenoît Pin <pin@cri.ensmp.fr>
Tue, 28 Apr 2015 16:14:19 +0000 (18:14 +0200)
committerBenoît Pin <pin@cri.ensmp.fr>
Tue, 28 Apr 2015 16:14:19 +0000 (18:14 +0200)
Products/Plinn/RegistrationTool.py
Products/Plinn/skins/custom_generic/join_form.py
Products/Plinn/skins/generic/password_reset_form.py

index 3e04db1..738d2ee 100644 (file)
@@ -254,7 +254,7 @@ class RegistrationTool(BaseRegistrationTool) :
         return str(uuid4())
 
     security.declarePublic('requestPasswordReset')
         return str(uuid4())
 
     security.declarePublic('requestPasswordReset')
-    def requestPasswordReset(self, userid, initial=False):
+    def requestPasswordReset(self, userid, initial=False, came_from=''):
         """ add uuid / (userid, expiration) pair
             if ok: send an email to member. returns error message otherwise.
         """
         """ add uuid / (userid, expiration) pair
             if ok: send an email to member. returns error message otherwise.
         """
@@ -274,7 +274,7 @@ class RegistrationTool(BaseRegistrationTool) :
             uuid = str(uuid4())
             while self._passwordResetRequests.has_key(uuid) :
                 uuid = str(uuid4())
             uuid = str(uuid4())
             while self._passwordResetRequests.has_key(uuid) :
                 uuid = str(uuid4())
-            self._passwordResetRequests[uuid] = (userid, DateTime() + 1)
+            self._passwordResetRequests[uuid] = (userid, DateTime() + 1, came_from)
             utool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IURLTool')
             ptool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IPropertiesTool')
             # fuck : mailhost récupéré avec getUtilityByInterfaceName n'est pas correctement
             utool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IURLTool')
             ptool = getUtilityByInterfaceName('Products.CMFCore.interfaces.IPropertiesTool')
             # fuck : mailhost récupéré avec getUtilityByInterfaceName n'est pas correctement
@@ -311,7 +311,7 @@ class RegistrationTool(BaseRegistrationTool) :
     def clearExpiredPasswordResetRequests(self):
         now = DateTime()
         for uuid, record in self._passwordResetRequests.items() :
     def clearExpiredPasswordResetRequests(self):
         now = DateTime()
         for uuid, record in self._passwordResetRequests.items() :
-            userid, date = record
+            date = record[1]
             if date < now :
                 del self._passwordResetRequests[uuid]
 
             if date < now :
                 del self._passwordResetRequests[uuid]
 
@@ -322,7 +322,7 @@ class RegistrationTool(BaseRegistrationTool) :
         if not record :
             return None, _('Invalid reset password request.')
 
         if not record :
             return None, _('Invalid reset password request.')
 
-        userid, expiration = record
+        userid, expiration, came_from = record
         now = DateTime()
         if expiration < now :
             self.clearExpiredPasswordResetRequests()
         now = DateTime()
         if expiration < now :
             self.clearExpiredPasswordResetRequests()
@@ -335,7 +335,7 @@ class RegistrationTool(BaseRegistrationTool) :
             if member :
                 member.setSecurityProfile(password=password)
                 del self._passwordResetRequests[uuid]
             if member :
                 member.setSecurityProfile(password=password)
                 del self._passwordResetRequests[uuid]
-                return  userid, _('Password successfully updated.')
+                return  {'userid': userid, 'came_from' : came_from}, _('Password successfully updated.')
             else :
                 return None, _('"${userid}" username not found.', mapping={'userid': userid})
         else :
             else :
                 return None, _('"${userid}" username not found.', mapping={'userid': userid})
         else :
index f7cdead..3badc16 100644 (file)
@@ -37,11 +37,12 @@ if add :
                                         'name' : name,
                                         'email': member_email})
             if validate_email :
                                         'name' : name,
                                         'email': member_email})
             if validate_email :
-                rtool.requestPasswordReset(member_id, initial=True)
+                rtool.requestPasswordReset(member_id, initial=True, came_from=came_from)
             context.setStatus(True, _('Success!'))
             is_newmember = True
             is_anon = False
         except ValueError, errmsg:
             context.setStatus(True, _('Success!'))
             is_newmember = True
             is_anon = False
         except ValueError, errmsg:
+            raise
             context.setStatus(False, errmsg)
     
 options = {}
             context.setStatus(False, errmsg)
     
 options = {}
index 9cb4b1d..7bd487a 100644 (file)
@@ -10,18 +10,19 @@ uuid = traverse_subpath[0]
 passwordChanged = False
 
 if validate :
 passwordChanged = False
 
 if validate :
-    userid = context.reset_password_control(uuid=uuid, **form)
-    if userid :
+    infos = context.reset_password_control(uuid=uuid, **form)
+    if infos :
         passwordChanged = True
 
 options = {}
 options['uuid'] = uuid
 options['passwordChanged'] = passwordChanged
 if passwordChanged :
         passwordChanged = True
 
 options = {}
 options['uuid'] = uuid
 options['passwordChanged'] = passwordChanged
 if passwordChanged :
-    hidden_vars = ({'name' : '__ac_name',       'value' : userid},
+    hidden_vars = ({'name' : '__ac_name',       'value' : infos['userid']},
                    {'name' : '__ac_password',   'value' : form['password']},
                    {'name' : '__ac_password',   'value' : form['password']},
+                   {'name' : 'came_from',       'value' : infos['came_from']},
                    {'name' : 'noAjax',          'value' : '1'})
                    {'name' : 'noAjax',          'value' : '1'})
-    target = utool()
+    target = atool.getActionInfo('user/logged_in')['url']
     buttons = ({'name': 'login', 'value': _(' Login ')},)
 else :
     hidden_vars = []
     buttons = ({'name': 'login', 'value': _(' Login ')},)
 else :
     hidden_vars = []