diff --git a/bt5/erp5_authentication_policy/SkinTemplateItem/portal_skins/erp5_authentication_policy/Login_notifyPasswordExpire.py b/bt5/erp5_authentication_policy/SkinTemplateItem/portal_skins/erp5_authentication_policy/Login_notifyPasswordExpire.py index baff66ada86295c71bbc3a505ec759ed72d35e41..678d9da4584b01331044e21daf5ce470bb296752 100644 --- a/bt5/erp5_authentication_policy/SkinTemplateItem/portal_skins/erp5_authentication_policy/Login_notifyPasswordExpire.py +++ b/bt5/erp5_authentication_policy/SkinTemplateItem/portal_skins/erp5_authentication_policy/Login_notifyPasswordExpire.py @@ -9,25 +9,28 @@ portal = context.getPortalObject() portal_preferences = portal.portal_preferences if not portal_preferences.isAuthenticationPolicyEnabled() or \ - not portal.portal_preferences.isPreferredSystemRecoverExpiredPassword(): + not portal_preferences.isPreferredSystemRecoverExpiredPassword(): # no policy, no sense to file expire at all or symply system do not configured to - return 0 + return + +user = context.getParentValue() +username = context.getReference() # Prevent creating new recovery if one was recently created recovery_list = portal.portal_catalog( portal_type="Credential Recovery", - reference=context.getReference(), - default_destination_decision_uid=context.getUid(), + reference=username, + default_destination_decision_uid=user.getUid(), creation_date=Query(range="min", creation_date=addToDate(DateTime(), {'day': -1})), limit=1) -if (len(recovery_list) > 0): - return 0 +if recovery_list: + return module = portal.getDefaultModule(portal_type='Credential Recovery') credential_recovery = module.newContent( - portal_type="Credential Recovery", - reference=context.getReference(), - destination_decision_value=context, - language=portal.Localizer.get_selected_language()) + portal_type="Credential Recovery", + reference=username, + destination_decision_value=user, + language=portal.Localizer.get_selected_language()) context.serialize() credential_recovery.submit() diff --git a/product/ERP5/tests/testAuthenticationPolicy.py b/product/ERP5/tests/testAuthenticationPolicy.py index 224946dc2019dd639bca05c7da657d6f5de28463..0cb4664f2f04432f99ec7622474aaf5528c6d11e 100644 --- a/product/ERP5/tests/testAuthenticationPolicy.py +++ b/product/ERP5/tests/testAuthenticationPolicy.py @@ -598,7 +598,8 @@ class TestAuthenticationPolicy(ERP5TypeTestCase): self.tic() person = self.createUser(self.id(), password='password') - assignment = person.newContent(portal_type = 'Assignment') + person.setDefaultEmailCoordinateText('user@example.com') + assignment = person.newContent(portal_type='Assignment') assignment.open() login = person.objectValues(portal_type='ERP5 Login')[0] @@ -618,15 +619,22 @@ class TestAuthenticationPolicy(ERP5TypeTestCase): self.tic() # and a credential recovery is created automatically - credential_recovery, = login.getDestinationDecisionRelatedValueList( + credential_recovery, = person.getDestinationDecisionRelatedValueList( portal_type='Credential Recovery') # trying to login again does not create a new credential recovery response = publish() + self.assertTrue(response.getHeader("Location").endswith("login_form")) self.tic() - credential_recovery, = login.getDestinationDecisionRelatedValueList( + credential_recovery, = person.getDestinationDecisionRelatedValueList( portal_type='Credential Recovery') + credential_recovery.accept() + self.tic() + _, (to,), message = self.portal.MailHost._last_message + self.assertEqual(to, 'user@example.com') + self.assertIn('Password Recovery', message) + def test_HttpRequest(self): """ Check HTTP responses