From 862c5a8602fe1fc9b5916863d5e5c16286c5fa98 Mon Sep 17 00:00:00 2001 From: Ingo Schommer Date: Fri, 18 Jun 2010 02:59:43 +0000 Subject: [PATCH] MINOR Fixed hardcoded error message in PasswordValidator (fixes #5734) MINOR Added PasswordValidatorTest git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/branches/2.4@106687 467b73ca-7a2a-4603-9d3b-597d59a354a9 --- security/PasswordValidator.php | 7 +++- tests/security/PasswordValidatorTest.php | 44 ++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 tests/security/PasswordValidatorTest.php diff --git a/security/PasswordValidator.php b/security/PasswordValidator.php index 9c1e51652..bb846d5b7 100644 --- a/security/PasswordValidator.php +++ b/security/PasswordValidator.php @@ -52,11 +52,16 @@ class PasswordValidator extends Object { $this->historicalPasswordCount = $count; } + /** + * @param String $password + * @param Member $member + * @return ValidationResult + */ function validate($password, $member) { $valid = new ValidationResult(); if($this->minLength) { - if(strlen($password) < $this->minLength) $valid->error("Password is too short, it must be 7 or more characters long.", "TOO_SHORT"); + if(strlen($password) < $this->minLength) $valid->error(sprintf("Password is too short, it must be %s or more characters long.", $this->minLength), "TOO_SHORT"); } if($this->minScore) { diff --git a/tests/security/PasswordValidatorTest.php b/tests/security/PasswordValidatorTest.php new file mode 100644 index 000000000..7cd569d72 --- /dev/null +++ b/tests/security/PasswordValidatorTest.php @@ -0,0 +1,44 @@ +validate('', new Member()); + $this->assertTrue($r->valid(), 'Empty password is valid by default'); + + $r = $v->validate('mypassword', new Member()); + $this->assertTrue($r->valid(), 'Non-Empty password is valid by default'); + } + + function testValidateMinLength() { + $v = new PasswordValidator(); + + $v->minLength(4); + $r = $v->validate('123', new Member()); + $this->assertFalse($r->valid(), 'Password too short'); + + $v->minLength(4); + $r = $v->validate('1234', new Member()); + $this->assertTrue($r->valid(), 'Password long enough'); + } + + function testValidateMinScore() { + $v = new PasswordValidator(); + $v->characterStrength(3, array("lowercase", "uppercase", "digits", "punctuation")); + + $r = $v->validate('aA', new Member()); + $this->assertFalse($r->valid(), 'Passing too few tests'); + + $r = $v->validate('aA1', new Member()); + $this->assertTrue($r->valid(), 'Passing enough tests'); + } + + function testHistoricalPasswordCount() { + // TODO + } +} \ No newline at end of file