From 5ca94030e8d25e105b8847db4600adaf2332fbdf Mon Sep 17 00:00:00 2001 From: Robin Chalas Date: Tue, 6 Jul 2021 14:14:47 +0200 Subject: [PATCH] Prepare PasswordUpgraderInterface implementations for 6.0 signatures --- .../Bridge/Doctrine/Security/User/EntityUserProvider.php | 8 ++++++-- src/Symfony/Component/Ldap/Security/LdapUserProvider.php | 6 +++--- .../Provider/DaoAuthenticationProviderTest.php | 2 +- .../Component/Security/Core/User/ChainUserProvider.php | 8 ++++++-- .../Authenticator/Fixtures/PasswordUpgraderProvider.php | 2 +- 5 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/Symfony/Bridge/Doctrine/Security/User/EntityUserProvider.php b/src/Symfony/Bridge/Doctrine/Security/User/EntityUserProvider.php index f965b8173f1ac..e24b71367dc2f 100644 --- a/src/Symfony/Bridge/Doctrine/Security/User/EntityUserProvider.php +++ b/src/Symfony/Bridge/Doctrine/Security/User/EntityUserProvider.php @@ -133,10 +133,14 @@ public function supportsClass(string $class) * * @final */ - public function upgradePassword(UserInterface $user, string $newEncodedPassword): void + public function upgradePassword($user, string $newHashedPassword): void { if (!$user instanceof PasswordAuthenticatedUserInterface) { trigger_deprecation('symfony/doctrine-bridge', '5.3', 'The "%s::upgradePassword()" method expects an instance of "%s" as first argument, the "%s" class should implement it.', PasswordUpgraderInterface::class, PasswordAuthenticatedUserInterface::class, get_debug_type($user)); + + if (!$user instanceof UserInterface) { + throw new \TypeError(sprintf('The "%s::upgradePassword()" method expects an instance of "%s" as first argument, "%s" given.', PasswordAuthenticatedUserInterface::class, get_debug_type($user))); + } } $class = $this->getClass(); @@ -146,7 +150,7 @@ public function upgradePassword(UserInterface $user, string $newEncodedPassword) $repository = $this->getRepository(); if ($repository instanceof PasswordUpgraderInterface) { - $repository->upgradePassword($user, $newEncodedPassword); + $repository->upgradePassword($user, $newHashedPassword); } } diff --git a/src/Symfony/Component/Ldap/Security/LdapUserProvider.php b/src/Symfony/Component/Ldap/Security/LdapUserProvider.php index 319d6c605c43c..a4add0f4f9058 100644 --- a/src/Symfony/Component/Ldap/Security/LdapUserProvider.php +++ b/src/Symfony/Component/Ldap/Security/LdapUserProvider.php @@ -132,7 +132,7 @@ public function refreshUser(UserInterface $user) * * @final */ - public function upgradePassword(UserInterface $user, string $newEncodedPassword): void + public function upgradePassword($user, string $newHashedPassword): void { if (!$user instanceof LdapUser) { throw new UnsupportedUserException(sprintf('Instances of "%s" are not supported.', get_debug_type($user))); @@ -143,9 +143,9 @@ public function upgradePassword(UserInterface $user, string $newEncodedPassword) } try { - $user->getEntry()->setAttribute($this->passwordAttribute, [$newEncodedPassword]); + $user->getEntry()->setAttribute($this->passwordAttribute, [$newHashedPassword]); $this->ldap->getEntryManager()->update($user->getEntry()); - $user->setPassword($newEncodedPassword); + $user->setPassword($newHashedPassword); } catch (ExceptionInterface $e) { // ignore failed password upgrades } diff --git a/src/Symfony/Component/Security/Core/Tests/Authentication/Provider/DaoAuthenticationProviderTest.php b/src/Symfony/Component/Security/Core/Tests/Authentication/Provider/DaoAuthenticationProviderTest.php index 93c15d97530e9..563c9db951962 100644 --- a/src/Symfony/Component/Security/Core/Tests/Authentication/Provider/DaoAuthenticationProviderTest.php +++ b/src/Symfony/Component/Security/Core/Tests/Authentication/Provider/DaoAuthenticationProviderTest.php @@ -384,7 +384,7 @@ public function eraseCredentials() } interface PasswordUpgraderProvider extends UserProviderInterface, PasswordUpgraderInterface { - public function upgradePassword(UserInterface $user, string $newHashedPassword): void; + public function upgradePassword($user, string $newHashedPassword): void; public function loadUserByIdentifier(string $identifier): UserInterface; } diff --git a/src/Symfony/Component/Security/Core/User/ChainUserProvider.php b/src/Symfony/Component/Security/Core/User/ChainUserProvider.php index a0931460fdc60..30dfeb9b2db1a 100644 --- a/src/Symfony/Component/Security/Core/User/ChainUserProvider.php +++ b/src/Symfony/Component/Security/Core/User/ChainUserProvider.php @@ -130,16 +130,20 @@ public function supportsClass(string $class) * * {@inheritdoc} */ - public function upgradePassword($user, string $newEncodedPassword): void + public function upgradePassword($user, string $newHashedPassword): void { if (!$user instanceof PasswordAuthenticatedUserInterface) { trigger_deprecation('symfony/security-core', '5.3', 'The "%s::upgradePassword()" method expects an instance of "%s" as first argument, the "%s" class should implement it.', PasswordUpgraderInterface::class, PasswordAuthenticatedUserInterface::class, get_debug_type($user)); + + if (!$user instanceof UserInterface) { + throw new \TypeError(sprintf('The "%s::upgradePassword()" method expects an instance of "%s" as first argument, "%s" given.', PasswordAuthenticatedUserInterface::class, get_debug_type($user))); + } } foreach ($this->providers as $provider) { if ($provider instanceof PasswordUpgraderInterface) { try { - $provider->upgradePassword($user, $newEncodedPassword); + $provider->upgradePassword($user, $newHashedPassword); } catch (UnsupportedUserException $e) { // ignore: password upgrades are opportunistic } diff --git a/src/Symfony/Component/Security/Http/Tests/Authenticator/Fixtures/PasswordUpgraderProvider.php b/src/Symfony/Component/Security/Http/Tests/Authenticator/Fixtures/PasswordUpgraderProvider.php index d50dbf1be28a9..768a6ab78d0ac 100644 --- a/src/Symfony/Component/Security/Http/Tests/Authenticator/Fixtures/PasswordUpgraderProvider.php +++ b/src/Symfony/Component/Security/Http/Tests/Authenticator/Fixtures/PasswordUpgraderProvider.php @@ -18,7 +18,7 @@ class PasswordUpgraderProvider extends InMemoryUserProvider implements PasswordUpgraderInterface { - public function upgradePassword(UserInterface $user, string $newEncodedPassword): void + public function upgradePassword($user, string $newHashedPassword): void { } }