Skip to content

Commit

Permalink
Merge pull request #21 from 4teamwork/lk_fixes
Browse files Browse the repository at this point in the history
Fix password length and occasionally wrong urls in password reset mail
  • Loading branch information
maethu committed Sep 23, 2014
2 parents 2fbc38a + a466c0d commit d6165f7
Show file tree
Hide file tree
Showing 10 changed files with 75 additions and 33 deletions.
9 changes: 9 additions & 0 deletions docs/HISTORY.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,15 @@ Changelog
1.9.1 (unreleased)
------------------

- Handle case where homefolder generation is disabled.
[lknoepfel]

- Fixed wrong url generation in password reset mail.
[lknoepfel]

- Reduced generated password length to 8.
[lknoepfel]

- Add French translations.
[eschmutz, tschanzt]

Expand Down
31 changes: 18 additions & 13 deletions ftw/usermanagement/browser/mail_templates/notify_user_html.pt
Original file line number Diff line number Diff line change
Expand Up @@ -29,19 +29,24 @@
<span tal:content="options/pw"
i18n:name="pw" />
</p>
<p tal:condition="options/reset_pw">
<span i18n:translate="text_usermanagement_after_pw_reset">
You can change your password in your "My Account" section after logging in.
</span>
<br />
<span i18n:translate="text_usermanagement_after_pw_reset_url">
Or use this direct link
<a tal:define="homeid python:options['username'].replace('@', '-40');
url string:${here/portal_url}/Members/${homeid}"
tal:attributes="href url" tal:content="url" i18n:name="home_url" />
to your "My Account" section and click "Change password".
</span>

<p tal:condition="options/homefolder">
<span i18n:translate="text_usermanagement_after_pw_reset">
You can change your password in your "My Account" section after logging in.
</span>
<br />
<span i18n:translate="text_usermanagement_after_pw_reset_url">
Or use this direct link
<a tal:attributes="href options/homefolder"
tal:content="options/homefolder" i18n:name="home_url" />
to your "My Account" section and click "Change password".
</span>
</p>
<p tal:condition="not:options/homefolder">
<span i18n:translate="text_request_new_password">
You can request a new password using this direct link:
</span>
<a tal:attributes="href options/pw_reset_url"
tal:content="options/pw_reset_url" />
</p>

<p i18n:translate="text_usermanagement_mail_comment">
Expand Down
12 changes: 9 additions & 3 deletions ftw/usermanagement/browser/user/user_notify.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ def get_mail_object(self, options):

mail = MIMEMultipart('alternative')
mail['Subject'] = Header(
self._get_subject(title.decode('utf-8')), 'utf-8')
self._get_subject(title.decode('utf-8')), 'utf-8')
mail['From'] = '%s<%s>' % (
self._get_contact_name(), self._get_contact_email())
mail['To'] = options.get('email')
Expand All @@ -106,7 +106,7 @@ def reset_password(self, member):
acl_users.getUserById(member.id)))

# Generate new password
password = registration.generatePassword()
password = registration.getPassword(length=8)

# Update user properties
acl_users.userFolderEditUser(
Expand All @@ -122,8 +122,11 @@ def get_options(self, userid, reset_pw):
""" Return a map with all required infos for the mail template
"""
mtool = getToolByName(self, 'portal_membership')
pwresettool = getToolByName(self, 'portal_password_reset')
member = mtool.getMemberById(userid)

homefolder = mtool.getHomeFolder(userid)

if not member:
return False

Expand All @@ -132,6 +135,9 @@ def get_options(self, userid, reset_pw):
options['email'] = member.getProperty('email')
options['username'] = member.id
options['fullname'] = member.getProperty('fullname', member.id)
options['homefolder'] = \
homefolder.absolute_url() if homefolder else None
options['pw_reset_url'] = pwresettool.absolute_url()
options['site_title'] = self._get_site_title()
options['contact_email'] = self._get_contact_email()
options['pw'] = reset_pw and self.reset_password(member) or None
Expand All @@ -153,7 +159,7 @@ def _get_contact_email(self):
"""
properties = getUtility(IPropertiesTool)
contact_mail = self.request.get('contact.email',
properties.email_from_address)
properties.email_from_address)

return contact_mail

Expand Down
2 changes: 1 addition & 1 deletion ftw/usermanagement/browser/user/user_register.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ def _get_password(self):
registration = getToolByName(self.context, 'portal_registration')

return self.request.get('password', '') or \
registration.generatePassword()
registration.getPassword(length=8)

def _get_register_values(self):
""" Return the required values for a registration
Expand Down
12 changes: 9 additions & 3 deletions ftw/usermanagement/locales/de/LC_MESSAGES/ftw.usermanagement.po
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2013-07-31 14:33+0000\n"
"POT-Creation-Date: 2014-09-16 08:10+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
Expand All @@ -10,7 +10,6 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0\n"
"Preferred-Encodings: utf-8 latin1\n"
"Domain: DOMAIN\n"

#: ./ftw/usermanagement/browser/group/groups.pt:16
msgid "Add a new Group"
Expand Down Expand Up @@ -215,6 +214,11 @@ msgstr "Bitte geben Sie den Vornamen ein"
msgid "text_missing_lastname"
msgstr "Bitte geben Sie den Nachnamen ein."

#. Default: "You can request a new password using this direct link:"
#: ./ftw/usermanagement/browser/mail_templates/notify_user_html.pt:45
msgid "text_request_new_password"
msgstr "Das Passwort kann unter folgendem Link zurückgesetzt werden:"

#: ./ftw/usermanagement/browser/user/user_delete.py:28
msgid "text_user_deleted"
msgstr "Benutzer wurde(n) gelöscht"
Expand All @@ -235,7 +239,7 @@ msgid "text_usermanagement_after_pw_reset_url"
msgstr "Oder Sie benutzen den folgenden Link ${home_url}, um direkt in Ihren \"Mein Konto\" Bereich zu gelangen, dort finden Sie den Link \"Passwort ändern\"."

#. Default: "If you have any questions, please contact: ${contact_email}"
#: ./ftw/usermanagement/browser/mail_templates/notify_user_html.pt:49
#: ./ftw/usermanagement/browser/mail_templates/notify_user_html.pt:54
msgid "text_usermanagement_mail_comment"
msgstr "Ihr Kontakt bei Fragen lautet: ${contact_email}"

Expand Down Expand Up @@ -266,3 +270,5 @@ msgstr "Sie wurden auf der Plattform ${site_title} registriert"

msgid "usermanagement_mail_notification_subject"
msgstr "Wilkommen auf ${title}"


10 changes: 7 additions & 3 deletions ftw/usermanagement/locales/fr/LC_MESSAGES/ftw.usermanagement.po
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2013-08-20 08:19+0000\n"
"POT-Creation-Date: 2014-09-16 08:10+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
Expand All @@ -10,7 +10,6 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0\n"
"Preferred-Encodings: utf-8 latin1\n"
"Domain: DOMAIN\n"

#: ./ftw/usermanagement/browser/group/groups.pt:16
msgid "Add a new Group"
Expand Down Expand Up @@ -215,6 +214,11 @@ msgstr "S'il vous plaît, entrez un prénom"
msgid "text_missing_lastname"
msgstr "S'il vous plaît entrer un nom de famille."

#. Default: "You can request a new password using this direct link:"
#: ./ftw/usermanagement/browser/mail_templates/notify_user_html.pt:45
msgid "text_request_new_password"
msgstr "Le mot de passe peut être réinitialisé dans le lien suivant:"

#: ./ftw/usermanagement/browser/user/user_delete.py:28
msgid "text_user_deleted"
msgstr "Les utilisateurs ont été supprimés"
Expand All @@ -235,7 +239,7 @@ msgid "text_usermanagement_after_pw_reset_url"
msgstr "Ou utilisez ce lien direct ${home_url} à votre \"Mom compte\" et cliquez sur \"Modifier le mot de passe\""

#. Default: "If you have any questions, please contact: ${contact_email}"
#: ./ftw/usermanagement/browser/mail_templates/notify_user_html.pt:49
#: ./ftw/usermanagement/browser/mail_templates/notify_user_html.pt:54
msgid "text_usermanagement_mail_comment"
msgstr "Si vous avez des questions, s'il vous plaît contacter: ${contact_email}"

Expand Down
13 changes: 8 additions & 5 deletions ftw/usermanagement/locales/ftw.usermanagement.pot
Original file line number Diff line number Diff line change
@@ -1,18 +1,15 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2013-07-31 14:33+0000\n"
"POT-Creation-Date: 2014-09-16 08:10+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0\n"
"Language-Code: en\n"
"Language-Name: English\n"
"Preferred-Encodings: utf-8 latin1\n"
"Domain: DOMAIN\n"

#: ./ftw/usermanagement/browser/group/groups.pt:16
msgid "Add a new Group"
Expand Down Expand Up @@ -217,6 +214,11 @@ msgstr ""
msgid "text_missing_lastname"
msgstr ""

#. Default: "You can request a new password using this direct link:"
#: ./ftw/usermanagement/browser/mail_templates/notify_user_html.pt:45
msgid "text_request_new_password"
msgstr ""

#: ./ftw/usermanagement/browser/user/user_delete.py:28
msgid "text_user_deleted"
msgstr ""
Expand All @@ -237,7 +239,7 @@ msgid "text_usermanagement_after_pw_reset_url"
msgstr ""

#. Default: "If you have any questions, please contact: ${contact_email}"
#: ./ftw/usermanagement/browser/mail_templates/notify_user_html.pt:49
#: ./ftw/usermanagement/browser/mail_templates/notify_user_html.pt:54
msgid "text_usermanagement_mail_comment"
msgstr ""

Expand Down Expand Up @@ -269,3 +271,4 @@ msgstr ""
msgid "usermanagement_mail_notification_subject"
msgstr ""


7 changes: 6 additions & 1 deletion ftw/usermanagement/tests/test_integration.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,10 @@ def setUp(self):
for i in range(5):
groups_tool.addGroup('group_%s' % i)

def test_add_user(self):
def test_add_user_with_homefolder(self):
# Setup Members Folder
self.mtool.setMemberareaCreationFlag()
self.portal.invokeFactory('Folder',id='Members')

self.request['firstname'] = 'Jämes'
self.request['lastname'] = 'Bönd'
Expand All @@ -66,6 +69,8 @@ def test_add_user(self):

self.assertEquals(info.get('fullname'), 'Bönd Jämes')

self.assertTrue(self.mtool.getHomeFolder('james@bond.ch'))

def test_add_group(self):

self.request['group_id'] = 'test_group'
Expand Down
10 changes: 7 additions & 3 deletions ftw/usermanagement/tests/test_unit_user_notify.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@ def setUp(self):

self.mtool = self.mocker.mock(count=False)
self.mock_tool(self.mtool, 'portal_membership')
self.mock_tool(self.mtool, 'portal_password_reset')
self.expect(self.mtool.getHomeFolder(ANY)).result(self.context)
self.expect(self.context.absolute_url()).result('http://nowhere/')
self.expect(self.mtool.absolute_url()).result('http://nowhere/')

self.urltool = self.mocker.mock(count=False)
self.mock_tool(self.urltool, 'portal_url')
Expand Down Expand Up @@ -112,7 +116,7 @@ def setUp(self):

self.rtool = self.mocker.mock(count=False)
self.mock_tool(self.rtool, 'portal_registration')
self.expect(self.rtool.generatePassword()).result('12345')
self.expect(self.rtool.getPassword(length=8)).result('12345678')

self.member = self.mocker.mock(count=False)
self.expect(self.member.id).result('user_id_1')
Expand All @@ -124,10 +128,10 @@ def test_reset_pw(self):

result = self.notify.reset_password(self.member)

self.assertEquals(result, '12345')
self.assertEquals(result, '12345678')
self.assertEquals(len(self.acl_user_folder), 1)
self.assertEquals(self.acl_user_folder[0]['member'], 'user_id_1')
self.assertEquals(self.acl_user_folder[0]['password'], '12345')
self.assertEquals(self.acl_user_folder[0]['password'], '12345678')
self.assertEquals(self.acl_user_folder[0]['roles'], ['role'])


Expand Down
2 changes: 1 addition & 1 deletion ftw/usermanagement/tests/test_unit_user_register.py
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ def setUp(self):

self.rtool = self.mocker.mock(count=False)
self.mock_tool(self.rtool, 'portal_registration')
self.expect(self.rtool.generatePassword()).result('12345')
self.expect(self.rtool.getPassword(length=8)).result('12345678')
self.expect(self.rtool.addMember(
'attribute_error',
ANY,
Expand Down

0 comments on commit d6165f7

Please sign in to comment.