[Checkins] SVN: zope.password/trunk/ Keep things backwards compatible by creating an extended interface.
Martijn Pieters
mj at zopatista.com
Sun Feb 20 09:30:59 EST 2011
Log message for revision 120463:
Keep things backwards compatible by creating an extended interface.
By moving the match method to a IMatchingPasswordManager, we keep the original interface unchanged and thus backwards compatible. Users of zope.password that require the new functionality can test for the new interface.
Changed:
U zope.password/trunk/CHANGES.txt
U zope.password/trunk/README.txt
U zope.password/trunk/setup.py
U zope.password/trunk/src/zope/password/configure.zcml
U zope.password/trunk/src/zope/password/interfaces.py
U zope.password/trunk/src/zope/password/legacy.py
U zope.password/trunk/src/zope/password/password.py
U zope.password/trunk/src/zope/password/testing.py
-=-
Modified: zope.password/trunk/CHANGES.txt
===================================================================
--- zope.password/trunk/CHANGES.txt 2011-02-20 13:59:02 UTC (rev 120462)
+++ zope.password/trunk/CHANGES.txt 2011-02-20 14:30:59 UTC (rev 120463)
@@ -2,12 +2,13 @@
CHANGES
=======
-4.0.0 (unreleased)
+3.7.0 (unreleased)
------------------
-- Add a 'match' method to the IPasswordManager interface, which returns True
- if a given password hash was encdoded with the scheme implemented by the
- specific manager.
+- Add a new IMatchingPasswordManager interface with a 'match' method, which
+ returns True if a given password hash was encdoded with the scheme
+ implemented by the specific manager. All managers in this package implement
+ this interface.
- Use {SHA} as the prefix for SHA1-encoded passwords to be compatible with
RFC 2307, but support matching against {SHA1} for backwards compatibility.
Modified: zope.password/trunk/README.txt
===================================================================
--- zope.password/trunk/README.txt 2011-02-20 13:59:02 UTC (rev 120462)
+++ zope.password/trunk/README.txt 2011-02-20 14:30:59 UTC (rev 120463)
@@ -39,7 +39,7 @@
It's very easy to use password managers. The
``zope.password.interfaces.IPasswordManager`` interface defines only
-three methods::
+two methods::
def encodePassword(password):
"""Return encoded data for the given password"""
@@ -47,6 +47,9 @@
def checkPassword(encoded_password, password):
"""Return whether the given encoded data coincide with the given password"""
+An extended interface, ``zope.password.interfaces.IMatchingPasswordManager``,
+adds one additional method::
+
def match(encoded_password):
"""
Returns True when the given data was encoded with the scheme
Modified: zope.password/trunk/setup.py
===================================================================
--- zope.password/trunk/setup.py 2011-02-20 13:59:02 UTC (rev 120462)
+++ zope.password/trunk/setup.py 2011-02-20 14:30:59 UTC (rev 120463)
@@ -17,7 +17,7 @@
setup(name='zope.password',
- version='4.0.0dev',
+ version='3.7.0dev',
author='Zope Foundation and Contributors',
author_email='zope-dev at zope.org',
description='Password encoding and checking utilities',
Modified: zope.password/trunk/src/zope/password/configure.zcml
===================================================================
--- zope.password/trunk/src/zope/password/configure.zcml 2011-02-20 13:59:02 UTC (rev 120462)
+++ zope.password/trunk/src/zope/password/configure.zcml 2011-02-20 14:30:59 UTC (rev 120463)
@@ -5,38 +5,38 @@
<utility
name="Plain Text"
- provides=".interfaces.IPasswordManager"
+ provides=".interfaces.IMatchingPasswordManager"
factory=".password.PlainTextPasswordManager"
/>
<utility
name="MD5"
- provides=".interfaces.IPasswordManager"
+ provides=".interfaces.IMatchingPasswordManager"
factory=".password.MD5PasswordManager"
/>
<utility
name="SHA1"
- provides=".interfaces.IPasswordManager"
+ provides=".interfaces.IMatchingPasswordManager"
factory=".password.SHA1PasswordManager"
/>
<utility
name="SSHA"
- provides=".interfaces.IPasswordManager"
+ provides=".interfaces.IMatchingPasswordManager"
factory=".password.SSHAPasswordManager"
/>
<utility
name="MYSQL"
- provides=".interfaces.IPasswordManager"
+ provides=".interfaces.IMatchingPasswordManager"
factory=".legacy.MySQLPasswordManager"
/>
<configure zcml:condition="installed crypt">
<utility
name="Crypt"
- provides=".interfaces.IPasswordManager"
+ provides=".interfaces.IMatchingPasswordManager"
factory=".legacy.CryptPasswordManager"
/>
</configure>
@@ -50,23 +50,23 @@
<configure zcml:condition="installed zope.security">
<class class=".password.PlainTextPasswordManager">
- <allow interface=".interfaces.IPasswordManager" />
+ <allow interface=".interfaces.IMatchingPasswordManager" />
</class>
<class class=".password.MD5PasswordManager">
- <allow interface=".interfaces.IPasswordManager" />
+ <allow interface=".interfaces.IMatchingPasswordManager" />
</class>
<class class=".password.SHA1PasswordManager">
- <allow interface=".interfaces.IPasswordManager" />
+ <allow interface=".interfaces.IMatchingPasswordManager" />
</class>
<class class=".password.SSHAPasswordManager">
- <allow interface=".interfaces.IPasswordManager" />
+ <allow interface=".interfaces.IMatchingPasswordManager" />
</class>
<class class=".password.SSHAPasswordManager">
- <allow interface=".interfaces.IPasswordManager" />
+ <allow interface=".interfaces.IMatchingPasswordManager" />
</class>
</configure>
Modified: zope.password/trunk/src/zope/password/interfaces.py
===================================================================
--- zope.password/trunk/src/zope/password/interfaces.py 2011-02-20 13:59:02 UTC (rev 120462)
+++ zope.password/trunk/src/zope/password/interfaces.py 2011-02-20 14:30:59 UTC (rev 120463)
@@ -24,6 +24,9 @@
def checkPassword(encoded_password, password):
"""Does the given encoded data coincide with the given password"""
+class IMatchingPasswordManager(IPasswordManager):
+ """Password manager with hash matching support"""
+
def match(encoded_password):
"""
Returns True when the given data was encoded with the scheme
Modified: zope.password/trunk/src/zope/password/legacy.py
===================================================================
--- zope.password/trunk/src/zope/password/legacy.py 2011-02-20 13:59:02 UTC (rev 120462)
+++ zope.password/trunk/src/zope/password/legacy.py 2011-02-20 14:30:59 UTC (rev 120463)
@@ -25,7 +25,7 @@
crypt = None
from zope.interface import implements
-from zope.password.interfaces import IPasswordManager
+from zope.password.interfaces import IMatchingPasswordManager
_encoder = getencoder("utf-8")
@@ -41,7 +41,7 @@
>>> from zope.interface.verify import verifyObject
>>> manager = CryptPasswordManager()
- >>> verifyObject(IPasswordManager, manager)
+ >>> verifyObject(IMatchingPasswordManager, manager)
True
>>> password = u"right \N{CYRILLIC CAPITAL LETTER A}"
@@ -95,7 +95,7 @@
"""
- implements(IPasswordManager)
+ implements(IMatchingPasswordManager)
def encodePassword(self, password, salt=None):
if salt is None:
@@ -122,7 +122,7 @@
>>> from zope.interface.verify import verifyObject
>>> manager = MySQLPasswordManager()
- >>> verifyObject(IPasswordManager, manager)
+ >>> verifyObject(IMatchingPasswordManager, manager)
True
>>> password = u"right \N{CYRILLIC CAPITAL LETTER A}"
@@ -161,7 +161,7 @@
"""
- implements(IPasswordManager)
+ implements(IMatchingPasswordManager)
def encodePassword(self, password):
nr = 1345345333L
Modified: zope.password/trunk/src/zope/password/password.py
===================================================================
--- zope.password/trunk/src/zope/password/password.py 2011-02-20 13:59:02 UTC (rev 120462)
+++ zope.password/trunk/src/zope/password/password.py 2011-02-20 14:30:59 UTC (rev 120463)
@@ -28,7 +28,7 @@
from sha import new as sha1
from zope.interface import implements
-from zope.password.interfaces import IPasswordManager
+from zope.password.interfaces import IMatchingPasswordManager
_encoder = getencoder("utf-8")
@@ -39,7 +39,7 @@
>>> from zope.interface.verify import verifyObject
>>> manager = PlainTextPasswordManager()
- >>> verifyObject(IPasswordManager, manager)
+ >>> verifyObject(IMatchingPasswordManager, manager)
True
>>> password = u"right \N{CYRILLIC CAPITAL LETTER A}"
@@ -61,7 +61,7 @@
False
"""
- implements(IPasswordManager)
+ implements(IMatchingPasswordManager)
def encodePassword(self, password):
return password
@@ -92,7 +92,7 @@
>>> from zope.interface.verify import verifyObject
>>> manager = SSHAPasswordManager()
- >>> verifyObject(IPasswordManager, manager)
+ >>> verifyObject(IMatchingPasswordManager, manager)
True
>>> password = u"right \N{CYRILLIC CAPITAL LETTER A}"
@@ -145,8 +145,6 @@
"""
- implements(IPasswordManager)
-
def encodePassword(self, password, salt=None):
if salt is None:
salt = urandom(4)
@@ -176,7 +174,7 @@
>>> from zope.interface.verify import verifyObject
>>> manager = MD5PasswordManager()
- >>> verifyObject(IPasswordManager, manager)
+ >>> verifyObject(IMatchingPasswordManager, manager)
True
>>> password = u"right \N{CYRILLIC CAPITAL LETTER A}"
@@ -222,8 +220,6 @@
"""
- implements(IPasswordManager)
-
def encodePassword(self, password, salt=None):
if salt is None:
salt = "%08x" % randint(0, 0xffffffff)
@@ -249,7 +245,7 @@
>>> from zope.interface.verify import verifyObject
>>> manager = SHA1PasswordManager()
- >>> verifyObject(IPasswordManager, manager)
+ >>> verifyObject(IMatchingPasswordManager, manager)
True
>>> password = u"right \N{CYRILLIC CAPITAL LETTER A}"
@@ -308,8 +304,6 @@
"""
- implements(IPasswordManager)
-
def encodePassword(self, password, salt=None):
if salt is None:
salt = "%08x" % randint(0, 0xffffffff)
Modified: zope.password/trunk/src/zope/password/testing.py
===================================================================
--- zope.password/trunk/src/zope/password/testing.py 2011-02-20 13:59:02 UTC (rev 120462)
+++ zope.password/trunk/src/zope/password/testing.py 2011-02-20 14:30:59 UTC (rev 120463)
@@ -18,7 +18,7 @@
from zope.component import provideUtility
from zope.schema.interfaces import IVocabularyFactory
-from zope.password.interfaces import IPasswordManager
+from zope.password.interfaces import IMatchingPasswordManager
from zope.password.password import PlainTextPasswordManager
from zope.password.password import MD5PasswordManager
from zope.password.password import SHA1PasswordManager
@@ -38,15 +38,15 @@
>>> from zope.component import getUtility
>>> setUpPasswordManagers()
- >>> getUtility(IPasswordManager, 'Plain Text')
+ >>> getUtility(IMatchingPasswordManager, 'Plain Text')
<zope.password.password.PlainTextPasswordManager object at 0x...>
- >>> getUtility(IPasswordManager, 'SSHA')
+ >>> getUtility(IMatchingPasswordManager, 'SSHA')
<zope.password.password.SSHAPasswordManager object at 0x...>
- >>> getUtility(IPasswordManager, 'MD5')
+ >>> getUtility(IMatchingPasswordManager, 'MD5')
<zope.password.password.MD5PasswordManager object at 0x...>
- >>> getUtility(IPasswordManager, 'SHA1')
+ >>> getUtility(IMatchingPasswordManager, 'SHA1')
<zope.password.password.SHA1PasswordManager object at 0x...>
- >>> getUtility(IPasswordManager, 'MYSQL')
+ >>> getUtility(IMatchingPasswordManager, 'MYSQL')
<zope.password.legacy.MySQLPasswordManager object at 0x...>
>>> try:
@@ -55,8 +55,8 @@
... CryptPasswordManager = None
... True
... else:
- ... from zope.password.legacy import CryptPasswordManager
- ... getUtility(IPasswordManager, 'Crypt') is CryptPasswordManager
+ ... from zope.password.legacy import CryptPasswordManager as cpm
+ ... getUtility(IMatchingPasswordManager, 'Crypt') is cpm
True
>>> voc = getUtility(IVocabularyFactory, 'Password Manager Names')
@@ -78,14 +78,15 @@
True
"""
- provideUtility(PlainTextPasswordManager(), IPasswordManager, 'Plain Text')
- provideUtility(SSHAPasswordManager(), IPasswordManager, 'SSHA')
- provideUtility(MD5PasswordManager(), IPasswordManager, 'MD5')
- provideUtility(SHA1PasswordManager(), IPasswordManager, 'SHA1')
- provideUtility(MySQLPasswordManager(), IPasswordManager, 'MYSQL')
+ provideUtility(PlainTextPasswordManager(), IMatchingPasswordManager,
+ 'Plain Text')
+ provideUtility(SSHAPasswordManager(), IMatchingPasswordManager, 'SSHA')
+ provideUtility(MD5PasswordManager(), IMatchingPasswordManager, 'MD5')
+ provideUtility(SHA1PasswordManager(), IMatchingPasswordManager, 'SHA1')
+ provideUtility(MySQLPasswordManager(), IMatchingPasswordManager, 'MYSQL')
if CryptPasswordManager is not None:
- provideUtility(CryptPasswordManager, IPasswordManager, 'Crypt')
+ provideUtility(CryptPasswordManager, IMatchingPasswordManager, 'Crypt')
provideUtility(PasswordManagerNamesVocabulary,
IVocabularyFactory, 'Password Manager Names')
More information about the checkins
mailing list