[Checkins] SVN: Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/ - fix for non-ASCII passwords

Yvo Schubbe y.2011 at wcm-solutions.de
Fri Aug 12 05:22:58 EDT 2011


Log message for revision 122560:
  - fix for non-ASCII passwords

Changed:
  U   Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/password.py
  U   Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/tests/password.txt

-=-
Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/password.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/password.py	2011-08-12 03:02:34 UTC (rev 122559)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/password.py	2011-08-12 09:22:57 UTC (rev 122560)
@@ -24,9 +24,10 @@
 from zope.schema import Password
 
 from Products.CMFCore.interfaces import IMember
+from Products.CMFCore.interfaces import IPropertiesTool
 from Products.CMFCore.interfaces import ISiteRoot
+from Products.CMFDefault.browser.utils import decode
 from Products.CMFDefault.browser.utils import memoize
-from Products.CMFDefault.browser.utils import decode
 from Products.CMFDefault.formlib.form import SettingsEditFormBase
 from Products.CMFDefault.utils import Message as _
 
@@ -63,7 +64,9 @@
         return u''
 
     def _setPassword(self, val):
-        self.context.setSecurityProfile(val)
+        ptool = getUtility(IPropertiesTool)
+        default_charset = ptool.getProperty('default_charset', None)
+        self.context.setSecurityProfile(val.encode(default_charset))
 
     def _getLastLoginTime(self):
         return self.context.getProperty('last_login_time')
@@ -120,7 +123,8 @@
         if self.getContent().last_login_time == DateTime('1999/01/01'):
             self.getContent().last_login_time = DateTime('2000/01/01')
         mtool = self._getTool('portal_membership')
-        mtool.credentialsChanged(data['password'], self.request)
+        mtool.credentialsChanged(self.getContent().context.getPassword(),
+                                 self.request)
         return changes
 
     def handle_change_success(self, action, data):

Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/tests/password.txt
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/tests/password.txt	2011-08-12 03:02:34 UTC (rev 122559)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/tests/password.txt	2011-08-12 09:22:57 UTC (rev 122560)
@@ -36,3 +36,26 @@
     >>> browser.getControl(name='form.actions.change').click()
     >>> '[[[cmf_default][Your password has been changed.]]' in browser.contents
     True
+    >>> uf.getUserById('mbr')._getPassword() == 'new password'
+    True
+
+Same with a non-ASCII password:
+
+    >>> from ZPublisher.HTTPRequest import default_encoding
+    >>> _NON_ASCII = u'\xc4\xd6\xdc password'
+    >>> password = _NON_ASCII.encode(default_encoding)
+
+    >>> browser = Browser() # XXX: how does this work with the old browser?
+    >>> browser.handleErrors = False
+    >>> browser.addHeader('Authorization', 'Basic mbr:new password')
+    >>> browser.open("http://localhost/site/@@password.html")
+    >>> browser.getControl(name='form.password').value = password
+    >>> browser.getControl(name='form.confirmation').value = password
+    >>> browser.getControl(name='form.actions.change').click()
+    >>> '[[[cmf_default][Your password has been changed.]]' in browser.contents
+    True
+
+    >>> ptool = app.site.portal_properties
+    >>> default_charset = ptool.getProperty('default_charset', None)
+    >>> uf.getUserById('mbr')._getPassword() == _NON_ASCII.encode(default_charset)
+    True



More information about the checkins mailing list