Improved password strength meter

This commit is contained in:
djmaze 2021-03-05 09:43:46 +01:00
parent c538ebe174
commit addaede0df
2 changed files with 10 additions and 18 deletions

View file

@ -89,7 +89,7 @@ class ChangePasswordPlugin extends \RainLoop\Plugins\AbstractPlugin
->SetLabel('Password minimum strength')
->SetType(\RainLoop\Enumerations\PluginPropertyType::INT)
->SetDescription('Minimum strength of the password in %')
->SetDefaultValue(60),
->SetDefaultValue(70),
];
foreach ($this->getSupportedDrivers(true) as $name => $class) {
$result[] = \RainLoop\Plugins\Property::NewInstance("driver_{$name}_enabled")
@ -125,7 +125,7 @@ class ChangePasswordPlugin extends \RainLoop\Plugins\AbstractPlugin
throw new ClientException(static::NewPasswordShort, null, $oActions->StaticI18N('NOTIFICATIONS/NEW_PASSWORD_SHORT'));
}
if ($this->Config()->Get('plugin', 'pass_min_strength', 60) > static::PasswordStrength($sNewPassword)) {
if ($this->Config()->Get('plugin', 'pass_min_strength', 70) > static::PasswordStrength($sNewPassword)) {
throw new ClientException(static::NewPasswordWeak, null, $oActions->StaticI18N('NOTIFICATIONS/NEW_PASSWORD_WEAK'));
}
@ -201,13 +201,10 @@ class ChangePasswordPlugin extends \RainLoop\Plugins\AbstractPlugin
private static function PasswordStrength(string $sPassword) : int
{
$i = \strlen($sPassword);
$s = $i ? 1 : 0;
$max = min(100, $i * 8);
$s = 0;
while (--$i) {
if ($sPassword[$i] != $sPassword[$i-1]) {
++$s;
} else {
$s -= 0.5;
}
$s += ($sPassword[$i] != $sPassword[$i-1] ? 1 : -0.5);
}
$c = 0;
$re = [ '/[^0-9A-Za-z]+/', '/[0-9]+/', '/[A-Z]+/', '/[a-z]+/' ];
@ -221,9 +218,8 @@ class ChangePasswordPlugin extends \RainLoop\Plugins\AbstractPlugin
}
}
}
$s = ($s / 3 * $c);
return \max(0, \min(100, $s * 5));
return \intval(\max(0, \min($max, $s * $c * 1.5)));
}
}

View file

@ -10,15 +10,12 @@
getPassStrength = v => {
let m,
i = v.length,
s = i?1:0,
max = Math.min(100, i * 8),
s = 0,
c = 0,
ii;
while (i--) {
if (v[i] != v[i+1]) {
++s;
} else {
s -= 0.5;
}
s += (v[i] != v[i+1] ? 1 : -0.5);
}
for (i = 0; i < 4; ++i) {
m = v.match(pw_re[i]);
@ -31,8 +28,7 @@
}
}
}
s = (s / 3 * c);
return Math.max(0, Math.min(100, s * 5));
return Math.max(0, Math.min(max, s * c * 1.5));
};
class ChangePasswordUserSettings