diff options
author | Jason Gerard DeRose <jderose@redhat.com> | 2009-10-16 02:22:39 -0600 |
---|---|---|
committer | Jason Gerard DeRose <jderose@redhat.com> | 2009-10-18 00:35:05 -0600 |
commit | b35849b47d1018fef339ea63e364b29c848bd26d (patch) | |
tree | 650c6200d0b3847dec68ef233241f36a13a36199 | |
parent | a3a0c0ae339d2f963287fc88847aac7e2249e30f (diff) | |
download | freeipa-b35849b47d1018fef339ea63e364b29c848bd26d.tar.gz freeipa-b35849b47d1018fef339ea63e364b29c848bd26d.tar.xz freeipa-b35849b47d1018fef339ea63e364b29c848bd26d.zip |
Change Password param so (password, confirm_password) can be passed to _convert_scalar()
-rw-r--r-- | ipalib/errors.py | 9 | ||||
-rw-r--r-- | ipalib/parameters.py | 9 | ||||
-rw-r--r-- | tests/test_ipalib/test_parameters.py | 11 |
3 files changed, 29 insertions, 0 deletions
diff --git a/ipalib/errors.py b/ipalib/errors.py index fb82062a..1c358cd6 100644 --- a/ipalib/errors.py +++ b/ipalib/errors.py @@ -736,6 +736,15 @@ class NoSuchNamespaceError(InvocationError): format = _('api has no such namespace: %(name)r') +class PasswordMismatch(InvocationError): + """ + **3011** Raise when password and password confirmation don't match. + """ + + errno = 3011 + format = _('Passwords do not match') + + ############################################################################## # 4000 - 4999: Execution errors diff --git a/ipalib/parameters.py b/ipalib/parameters.py index bf6588ba..819a158f 100644 --- a/ipalib/parameters.py +++ b/ipalib/parameters.py @@ -35,6 +35,7 @@ from util import make_repr from request import ugettext from plugable import ReadOnly, lock, check_name from errors import ConversionError, RequirementError, ValidationError +from errors import PasswordMismatch from constants import NULLS, TYPE_ERROR, CALLABLE_ERROR import csv @@ -1145,6 +1146,14 @@ class Password(Str): A parameter for passwords (stored in the ``unicode`` type). """ + def _convert_scalar(self, value, index=None): + if isinstance(value, (tuple, list)) and len(value) == 2: + (p1, p2) = value + if p1 != p2: + raise PasswordMismatch(name=self.name, index=index) + value = p1 + return super(Password, self)._convert_scalar(value, index) + class Enum(Param): """ diff --git a/tests/test_ipalib/test_parameters.py b/tests/test_ipalib/test_parameters.py index f43fa322..44286ac0 100644 --- a/tests/test_ipalib/test_parameters.py +++ b/tests/test_ipalib/test_parameters.py @@ -1065,6 +1065,17 @@ class test_Password(ClassChecker): assert o.pattern is None assert o.password is True + def test_convert_scalar(self): + """ + Test the `ipalib.parameters.Password._convert_scalar` method. + """ + o = self.cls('my_password') + e = raises(errors.PasswordMismatch, o._convert_scalar, [u'one', u'two']) + assert e.name == 'my_password' + assert e.index is None + assert o._convert_scalar([u'one', u'one']) == u'one' + assert o._convert_scalar(u'one') == u'one' + class test_StrEnum(ClassChecker): """ |