قرینه از
https://github.com/matomo-org/matomo.git
synced 2025-08-25 00:17:37 +00:00

* Add new System setting for enabling password strength check (#23362) * Add new System setting for enabling password strength check * Update broken UI tests * Update default value to off, update some text * Update broken UI test by description change * Add PasswordStrength component (#23371) * Add PasswordStrength component * Wire up form submit button to strength check * Allow the strength validator to work with external input * Update UI test screenshots * Add password strength field to UI demo page * Add backend password strength checks to password set forms (#23378) * Add backend password strength checks to password set forms * Add UI test for user manager page * Update UI fixture to enable strong passwords * Update valid special characters * Update text used in Login system settings notification email (#23404) * Update special character checks to be more inclusive * Remove readonly filter from event emit to keep the object further updatable (#23406) * Remove readonly filter from event emit to keep the object further updatable * Clone the parent user object when edit form is created to prevent silent nested prop manipulation --------- Co-authored-by: Nathan Gavin <nathangavin987@gmail.com>
120 خطوط
4.0 KiB
PHP
120 خطوط
4.0 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Matomo - free/libre analytics platform
|
|
*
|
|
* @link https://matomo.org
|
|
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
|
*/
|
|
|
|
namespace Piwik\Tests\Unit\Auth;
|
|
|
|
use Piwik\Auth\PasswordStrength;
|
|
|
|
/**
|
|
* @group Core
|
|
*/
|
|
class PasswordStrengthTest extends \PHPUnit\Framework\TestCase
|
|
{
|
|
public function testGetRulesFeatureDisabled()
|
|
{
|
|
$passwordStrength = new PasswordStrength($featureEnabled = false);
|
|
$rules = $passwordStrength->getRules();
|
|
|
|
$this->assertEmpty($rules);
|
|
}
|
|
|
|
public function testGetRulesFeatureEnabled()
|
|
{
|
|
$passwordStrength = new PasswordStrength($featureEnabled = true);
|
|
$rules = $passwordStrength->getRules();
|
|
|
|
$this->assertNotEmpty($rules);
|
|
foreach ($rules as $rule) {
|
|
$this->assertArrayHasKey('validationRegex', $rule);
|
|
$this->assertNotEmpty($rule['validationRegex']);
|
|
$this->assertArrayHasKey('ruleText', $rule);
|
|
$this->assertNotEmpty($rule['ruleText']);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @dataProvider passwordProvider
|
|
*/
|
|
public function testPasswordStrengthFeatureDisabled($password, $expected)
|
|
{
|
|
$passwordStrength = new PasswordStrength($featureEnabled = false);
|
|
$brokenRules = $passwordStrength->validatePasswordStrength($password);
|
|
|
|
$this->assertEmpty($brokenRules);
|
|
}
|
|
|
|
/**
|
|
* @dataProvider passwordProvider
|
|
*/
|
|
public function testPasswordStrengthRulesFeatureEnabled($password, $expected)
|
|
{
|
|
$passwordStrength = new PasswordStrength($featureEnabled = true);
|
|
$brokenRules = $passwordStrength->validatePasswordStrength($password);
|
|
|
|
$this->assertSame($expected, $brokenRules);
|
|
}
|
|
|
|
public function passwordProvider()
|
|
{
|
|
yield ['Testpassword1!', []];
|
|
yield ['Testpassword1"', []];
|
|
yield ['Testpassword1#', []];
|
|
yield ['Testpassword1$', []];
|
|
yield ['Testpassword1%', []];
|
|
yield ['Testpassword1&', []];
|
|
yield ["Testpassword1'", []];
|
|
yield ['Testpassword1(', []];
|
|
yield ['Testpassword1)', []];
|
|
yield ['Testpassword1*', []];
|
|
yield ['Testpassword1+', []];
|
|
yield ['Testpassword1,', []];
|
|
yield ['Testpassword1-', []];
|
|
yield ['Testpassword1.', []];
|
|
yield ['Testpassword1/', []];
|
|
yield ['Testpassword1:', []];
|
|
yield ['Testpassword1;', []];
|
|
yield ['Testpassword1<', []];
|
|
yield ['Testpassword1=', []];
|
|
yield ['Testpassword1>', []];
|
|
yield ['Testpassword1?', []];
|
|
yield ['Testpassword1@', []];
|
|
yield ['Testpassword1[', []];
|
|
yield ['Testpassword1\\', []];
|
|
yield ['Testpassword1]', []];
|
|
yield ['Testpassword1^', []];
|
|
yield ['Testpassword1_', []];
|
|
yield ['Testpassword1`', []];
|
|
yield ['Testpassword1{', []];
|
|
yield ['Testpassword1|', []];
|
|
yield ['Testpassword1}', []];
|
|
yield ['Testpassword1~', []];
|
|
yield ['Testword1!', ['General_PasswordStrengthValidationLength']];
|
|
yield ['TESTPASSWORD1!', ['General_PasswordStrengthValidationLowercase']];
|
|
yield ['testpassword1!', ['General_PasswordStrengthValidationUppercase']];
|
|
yield ['Testpassword!', ['General_PasswordStrengthValidationNumber']];
|
|
yield ['Testpassword1', ['General_PasswordStrengthValidationSpecialChar']];
|
|
yield ['testpassword1', [
|
|
'General_PasswordStrengthValidationUppercase',
|
|
'General_PasswordStrengthValidationSpecialChar'
|
|
]];
|
|
yield ['TESTWORD!', [
|
|
'General_PasswordStrengthValidationLength',
|
|
'General_PasswordStrengthValidationLowercase',
|
|
'General_PasswordStrengthValidationNumber'
|
|
]];
|
|
yield ['', [
|
|
'General_PasswordStrengthValidationLength',
|
|
'General_PasswordStrengthValidationLowercase',
|
|
'General_PasswordStrengthValidationUppercase',
|
|
'General_PasswordStrengthValidationNumber',
|
|
'General_PasswordStrengthValidationSpecialChar'
|
|
]];
|
|
}
|
|
}
|