diff --git a/application/forms/Account/ChangePasswordForm.php b/application/forms/Account/ChangePasswordForm.php index 15986cf6f..be7fd98ba 100644 --- a/application/forms/Account/ChangePasswordForm.php +++ b/application/forms/Account/ChangePasswordForm.php @@ -4,8 +4,7 @@ namespace Icinga\Forms\Account; use Icinga\Application\Config; -use Icinga\Application\ProvidedHook\CommonPasswordPolicy; -use Icinga\Application\ProvidedHook\NoPasswordPolicy; +use Icinga\Application\ProvidedHook\AnyPasswordPolicy; use Icinga\Authentication\PasswordValidator; use Icinga\Authentication\User\DbUserBackend; use Icinga\Data\Filter\Filter; @@ -38,15 +37,15 @@ class ChangePasswordForm extends Form */ public function createElements(array $formData) { - $passwordPolicy = Config::app()->get( + $passwordPolicyClass = Config::app()->get( 'global', 'password_policy', - NoPasswordPolicy::class + AnyPasswordPolicy::class ); - $passwordPolicyObject = new $passwordPolicy(); - $passwordPolicyDescription = $passwordPolicyObject->getDescription(); - if ($passwordPolicyDescription != '') { + $passwordPolicy = new $passwordPolicyClass(); + $passwordPolicyDescription = $passwordPolicy->getDescription(); + if ($passwordPolicyDescription !== '') { $this->addDescription($passwordPolicyDescription); } @@ -61,11 +60,11 @@ class ChangePasswordForm extends Form $this->addElement( 'password', 'new_password', - array( - 'label' => $this->translate('New Password'), - 'required' => true, - 'validators' => [new PasswordValidator($passwordPolicyObject)] - ) + [ + 'label' => $this->translate('New Password'), + 'required' => true, + 'validators' => [new PasswordValidator($passwordPolicy)] + ] ); $this->addElement( 'password', diff --git a/application/forms/Config/General/PasswordPolicyConfigForm.php b/application/forms/Config/General/PasswordPolicyConfigForm.php index 4fb19f55a..4c94a4bb2 100644 --- a/application/forms/Config/General/PasswordPolicyConfigForm.php +++ b/application/forms/Config/General/PasswordPolicyConfigForm.php @@ -4,7 +4,7 @@ namespace Icinga\Forms\Config\General; use Icinga\Application\Hook; -use Icinga\Application\ProvidedHook\NoPasswordPolicy; +use Icinga\Application\ProvidedHook\AnyPasswordPolicy; use Icinga\Web\Form; /** @@ -22,26 +22,22 @@ class PasswordPolicyConfigForm extends Form public function createElements(array $formData): static { $passwordPolicies = []; - foreach (Hook::all('passwordpolicy') as $class => $policy) { $passwordPolicies[$class] = $policy->getName(); } - asort($passwordPolicies); + $this->addElement( 'select', 'global_password_policy', [ - 'description' => $this->translate( - 'Enforce strong password requirements for new passwords' - ), - 'label' => $this->translate('Password Policy'), - 'value' => NoPasswordPolicy::class, - 'multiOptions' =>$passwordPolicies + 'description' => $this->translate('Enforce password requirements for new passwords'), + 'label' => $this->translate('Password Policy'), + 'value' => AnyPasswordPolicy::class, + 'multiOptions' => $passwordPolicies ] ); - return $this; } } diff --git a/application/forms/Config/User/UserForm.php b/application/forms/Config/User/UserForm.php index 62707a9fc..dafa9257b 100644 --- a/application/forms/Config/User/UserForm.php +++ b/application/forms/Config/User/UserForm.php @@ -5,8 +5,7 @@ namespace Icinga\Forms\Config\User; use Icinga\Application\Config; use Icinga\Application\Hook\ConfigFormEventsHook; -use Icinga\Application\ProvidedHook\CommonPasswordPolicy; -use Icinga\Application\ProvidedHook\NoPasswordPolicy; +use Icinga\Application\ProvidedHook\AnyPasswordPolicy; use Icinga\Authentication\PasswordValidator; use Icinga\Data\Filter\Filter; use Icinga\Forms\RepositoryForm; @@ -21,14 +20,14 @@ class UserForm extends RepositoryForm */ protected function createInsertElements(array $formData) { - $passwordPolicy = Config::app()->get( + $passwordPolicyClass = Config::app()->get( 'global', 'password_policy', - NoPasswordPolicy::class + AnyPasswordPolicy::class ); - $passwordPolicyObject = new $passwordPolicy(); - $passwordPolicyDescription = $passwordPolicyObject->getDescription(); + $passwordPolicy = new $passwordPolicyClass(); + $passwordPolicyDescription = $passwordPolicy->getDescription(); if ($passwordPolicyDescription != '') { $this->addDescription($passwordPolicyDescription); } @@ -53,11 +52,11 @@ class UserForm extends RepositoryForm $this->addElement( 'password', 'password', - array( - 'required' => true, - 'label' => $this->translate('Password'), - 'validators' => [new PasswordValidator($passwordPolicyObject)] - ) + [ + 'required' => true, + 'label' => $this->translate('Password'), + 'validators' => [new PasswordValidator($passwordPolicy)] + ] ); $this->setTitle($this->translate('Add a new user')); diff --git a/doc/05-Authentication.md b/doc/05-Authentication.md index 0469a9634..312306483 100644 --- a/doc/05-Authentication.md +++ b/doc/05-Authentication.md @@ -162,7 +162,7 @@ in order to manually create users directly inside the database. Icinga Web 2 supports password policies when using database authentication. You can configure this under **Configuration > Application > General**. -By default, no password policy is enforced ('None'). +By default, no password policy is enforced ('Any'). Icinga Web 2 provides a built-in policy called 'Common' with the following requirements: * Minimum length of 12 characters diff --git a/library/Icinga/Application/ApplicationBootstrap.php b/library/Icinga/Application/ApplicationBootstrap.php index 34668c906..b14191736 100644 --- a/library/Icinga/Application/ApplicationBootstrap.php +++ b/library/Icinga/Application/ApplicationBootstrap.php @@ -8,7 +8,7 @@ use ErrorException; use Exception; use Icinga\Application\ProvidedHook\DbMigration; use Icinga\Application\ProvidedHook\CommonPasswordPolicy; -use Icinga\Application\ProvidedHook\NoPasswordPolicy; +use Icinga\Application\ProvidedHook\AnyPasswordPolicy; use ipl\I18n\GettextTranslator; use ipl\I18n\StaticTranslator; use LogicException; @@ -743,7 +743,7 @@ abstract class ApplicationBootstrap { Hook::register('DbMigration', DbMigration::class, DbMigration::class); Hook::register('passwordpolicy', CommonPasswordPolicy::class, CommonPasswordPolicy::class); - Hook::register('passwordpolicy', NoPasswordPolicy::class, NoPasswordPolicy::class); + Hook::register('passwordpolicy', AnyPasswordPolicy::class, AnyPasswordPolicy::class); return $this; } diff --git a/library/Icinga/Application/ProvidedHook/NoPasswordPolicy.php b/library/Icinga/Application/ProvidedHook/AnyPasswordPolicy.php similarity index 83% rename from library/Icinga/Application/ProvidedHook/NoPasswordPolicy.php rename to library/Icinga/Application/ProvidedHook/AnyPasswordPolicy.php index b4d109b5f..6ee285c2a 100644 --- a/library/Icinga/Application/ProvidedHook/NoPasswordPolicy.php +++ b/library/Icinga/Application/ProvidedHook/AnyPasswordPolicy.php @@ -9,13 +9,13 @@ use ipl\I18n\Translation; /** * None Password Policy to validate all passwords */ -class NoPasswordPolicy implements PasswordPolicyHook +class AnyPasswordPolicy implements PasswordPolicyHook { use Translation; public function getName(): string { - return $this->translate('None'); + return $this->translate('Any'); } public function getDescription(): string diff --git a/modules/password-policy b/modules/password-policy deleted file mode 100644 index e69de29bb..000000000 diff --git a/test/php/library/Icinga/Application/NoPasswordPolicyTest.php b/test/php/library/Icinga/Application/AnyPasswordPolicyTest.php similarity index 67% rename from test/php/library/Icinga/Application/NoPasswordPolicyTest.php rename to test/php/library/Icinga/Application/AnyPasswordPolicyTest.php index 9d59332df..fdf137e18 100644 --- a/test/php/library/Icinga/Application/NoPasswordPolicyTest.php +++ b/test/php/library/Icinga/Application/AnyPasswordPolicyTest.php @@ -4,20 +4,20 @@ namespace Tests\Icinga\Application; use Icinga\Application\Hook\PasswordPolicyHook; use PHPUnit\Framework\TestCase; -use Icinga\Application\ProvidedHook\NoPasswordPolicy; +use Icinga\Application\ProvidedHook\AnyPasswordPolicy; -class NoPasswordPolicyTest extends TestCase +class AnyPasswordPolicyTest extends TestCase { private PasswordPolicyHook $instance; public function setUp(): void { - $this->instance = new NoPasswordPolicy(); + $this->instance = new AnyPasswordPolicy(); } public function testMethodGetName(): void { - $this->assertSame('None', $this->instance->getName()); + $this->assertSame('Any', $this->instance->getName()); } public function testValidatePasswordValid(): void