[Checkins] SVN: zope.password/trunk/ Test whether password managers work with old stored passwords.

Dan Korostelev nadako at gmail.com
Fri Mar 6 07:23:42 EST 2009


Log message for revision 97566:
  Test whether password managers work with old stored passwords.
  Add coverage tests. Test the "testing" module.
  Improve documentation a bit.

Changed:
  _U  zope.password/trunk/
  U   zope.password/trunk/README.txt
  U   zope.password/trunk/buildout.cfg
  U   zope.password/trunk/setup.py
  U   zope.password/trunk/src/zope/password/password.py
  U   zope.password/trunk/src/zope/password/testing.py
  U   zope.password/trunk/src/zope/password/tests.py

-=-

Property changes on: zope.password/trunk
___________________________________________________________________
Modified: svn:ignore
   - bin
build
dist
lib
develop-eggs
eggs
parts
.installed.cfg

   + bin
build
dist
lib
develop-eggs
eggs
parts
.installed.cfg
coverage


Modified: zope.password/trunk/README.txt
===================================================================
--- zope.password/trunk/README.txt	2009-03-06 12:18:11 UTC (rev 97565)
+++ zope.password/trunk/README.txt	2009-03-06 12:23:42 UTC (rev 97566)
@@ -23,8 +23,7 @@
    incorporates a salt into the password when encoding it. This password manager
    is compatible with passwords used in LDAP databases.
 
-It is strongly recommended to use SSHAPasswordManager, as it's the most secure
-one.
+It is strongly recommended to use SSHAPasswordManager, as it's the most secure.
 
 Usage
 -----
@@ -33,7 +32,9 @@
 interface defines only two methods::
 
   def encodePassword(password):
-      """Return encoded data for the password."""
-  
+      """Return encoded data for the given password"""
+
   def checkPassword(encoded_password, password):
-      """Return whether the password coincide with the encoded data."""
+      """Return whether the given encoded data coincide with the given password"""
+
+The implementations mentioned above are in the ``zope.password.password`` module.

Modified: zope.password/trunk/buildout.cfg
===================================================================
--- zope.password/trunk/buildout.cfg	2009-03-06 12:18:11 UTC (rev 97565)
+++ zope.password/trunk/buildout.cfg	2009-03-06 12:23:42 UTC (rev 97566)
@@ -1,7 +1,18 @@
 [buildout]
 develop = .
-parts = test
+parts = test coverage-test coverage-report
 
 [test]
 recipe = zc.recipe.testrunner
 eggs = zope.password [test]
+
+[coverage-test]
+recipe = zc.recipe.testrunner
+eggs = zope.password [test]
+defaults = ['--coverage', '../../coverage']
+
+[coverage-report]
+recipe = zc.recipe.egg
+eggs = z3c.coverage
+scripts = coverage=coverage-report
+arguments = ('coverage', 'coverage/report')

Modified: zope.password/trunk/setup.py
===================================================================
--- zope.password/trunk/setup.py	2009-03-06 12:18:11 UTC (rev 97565)
+++ zope.password/trunk/setup.py	2009-03-06 12:23:42 UTC (rev 97566)
@@ -43,7 +43,7 @@
       keywords='zope3 zope authentication password',
       packages=find_packages('src'),
       package_dir = {'': 'src'},
-      extras_require=dict(test=['zope.testing']),
+      extras_require=dict(test=['zope.testing', 'zope.component']),
       namespace_packages=['zope'],
       install_requires=['setuptools',
                         'zope.interface',

Modified: zope.password/trunk/src/zope/password/password.py
===================================================================
--- zope.password/trunk/src/zope/password/password.py	2009-03-06 12:18:11 UTC (rev 97565)
+++ zope.password/trunk/src/zope/password/password.py	2009-03-06 12:23:42 UTC (rev 97566)
@@ -160,6 +160,17 @@
 
     >>> manager.encodePassword(password) != manager.encodePassword(password)
     True
+    
+    The old version of this password manager didn't add the {MD5} to
+    passwords. Let's check if it can work with old stored passwords.
+
+    >>> encoded = manager.encodePassword(password, salt="")
+    >>> encoded = encoded[5:]
+    >>> encoded
+    '86dddccec45db4599f1ac00018e54139'
+
+    >>> manager.checkPassword(encoded, password)
+    True
     """
 
     implements(IPasswordManager)
@@ -208,6 +219,18 @@
 
     >>> manager.encodePassword(password) != manager.encodePassword(password)
     True
+
+    The old version of this password manager didn't add the {SHA1} to
+    passwords. Let's check if it can work with old stored passwords.
+
+    >>> encoded = manager.encodePassword(password, salt="")
+    >>> encoded = encoded[6:]
+    >>> encoded
+    '04b4eec7154c5f3a2ec6d2956fb80b80dc737402'
+
+    >>> manager.checkPassword(encoded, password)
+    True
+
     """
 
     implements(IPasswordManager)

Modified: zope.password/trunk/src/zope/password/testing.py
===================================================================
--- zope.password/trunk/src/zope/password/testing.py	2009-03-06 12:18:11 UTC (rev 97565)
+++ zope.password/trunk/src/zope/password/testing.py	2009-03-06 12:23:42 UTC (rev 97566)
@@ -25,6 +25,20 @@
 
 
 def setUpPasswordManagers():
+    """Helper function for setting up password manager utilities for tests
+    
+    >>> from zope.component import getUtility
+    >>> setUpPasswordManagers()
+    >>> getUtility(IPasswordManager, 'Plain Text')
+    <zope.password.password.PlainTextPasswordManager object at 0x...>
+    >>> getUtility(IPasswordManager, 'SSHA')
+    <zope.password.password.SSHAPasswordManager object at 0x...>
+    >>> getUtility(IPasswordManager, 'MD5')
+    <zope.password.password.MD5PasswordManager object at 0x...>
+    >>> getUtility(IPasswordManager, 'SHA1')
+    <zope.password.password.SHA1PasswordManager object at 0x...>
+    
+    """
     provideUtility(PlainTextPasswordManager(), IPasswordManager, 'Plain Text')
     provideUtility(SSHAPasswordManager(), IPasswordManager, 'SSHA')
     provideUtility(MD5PasswordManager(), IPasswordManager, 'MD5')

Modified: zope.password/trunk/src/zope/password/tests.py
===================================================================
--- zope.password/trunk/src/zope/password/tests.py	2009-03-06 12:18:11 UTC (rev 97565)
+++ zope.password/trunk/src/zope/password/tests.py	2009-03-06 12:23:42 UTC (rev 97566)
@@ -22,4 +22,7 @@
 def test_suite():
     return unittest.TestSuite((
         doctest.DocTestSuite('zope.password.password'),
+        doctest.DocTestSuite(
+            'zope.password.testing',
+            optionflags=doctest.ELLIPSIS),
         ))



More information about the Checkins mailing list