login consent app sql
This commit is contained in:
69
vendor/symfony/security-core/Authentication/Provider/AnonymousAuthenticationProvider.php
vendored
Normal file
69
vendor/symfony/security-core/Authentication/Provider/AnonymousAuthenticationProvider.php
vendored
Normal file
@ -0,0 +1,69 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Security\Core\Authentication\Provider;
|
||||
|
||||
use Symfony\Component\Security\Core\Authentication\Token\AnonymousToken;
|
||||
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
|
||||
use Symfony\Component\Security\Core\Exception\AuthenticationException;
|
||||
use Symfony\Component\Security\Core\Exception\BadCredentialsException;
|
||||
|
||||
trigger_deprecation('symfony/security-core', '5.3', 'The "%s" class is deprecated, use the new authenticator system instead.', AnonymousAuthenticationProvider::class);
|
||||
|
||||
/**
|
||||
* AnonymousAuthenticationProvider validates AnonymousToken instances.
|
||||
*
|
||||
* @author Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* @deprecated since Symfony 5.3, use the new authenticator system instead
|
||||
*/
|
||||
class AnonymousAuthenticationProvider implements AuthenticationProviderInterface
|
||||
{
|
||||
/**
|
||||
* Used to determine if the token is created by the application
|
||||
* instead of a malicious client.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private $secret;
|
||||
|
||||
/**
|
||||
* @param string $secret The secret shared with the AnonymousToken
|
||||
*/
|
||||
public function __construct(string $secret)
|
||||
{
|
||||
$this->secret = $secret;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function authenticate(TokenInterface $token)
|
||||
{
|
||||
if (!$this->supports($token)) {
|
||||
throw new AuthenticationException('The token is not supported by this authentication provider.');
|
||||
}
|
||||
|
||||
if ($this->secret !== $token->getSecret()) {
|
||||
throw new BadCredentialsException('The Token does not contain the expected key.');
|
||||
}
|
||||
|
||||
return $token;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function supports(TokenInterface $token)
|
||||
{
|
||||
return $token instanceof AnonymousToken;
|
||||
}
|
||||
}
|
44
vendor/symfony/security-core/Authentication/Provider/AuthenticationProviderInterface.php
vendored
Normal file
44
vendor/symfony/security-core/Authentication/Provider/AuthenticationProviderInterface.php
vendored
Normal file
@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Security\Core\Authentication\Provider;
|
||||
|
||||
use Symfony\Component\Security\Core\Authentication\AuthenticationManagerInterface;
|
||||
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
|
||||
|
||||
trigger_deprecation('symfony/security-core', '5.3', 'The "%s" interface is deprecated, use the new authenticator system instead.', AuthenticationProviderInterface::class);
|
||||
|
||||
/**
|
||||
* AuthenticationProviderInterface is the interface for all authentication
|
||||
* providers.
|
||||
*
|
||||
* Concrete implementations processes specific Token instances.
|
||||
*
|
||||
* @author Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* @deprecated since Symfony 5.3, use the new authenticator system instead
|
||||
*/
|
||||
interface AuthenticationProviderInterface extends AuthenticationManagerInterface
|
||||
{
|
||||
/**
|
||||
* Use this constant for not provided username.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
public const USERNAME_NONE_PROVIDED = 'NONE_PROVIDED';
|
||||
|
||||
/**
|
||||
* Checks whether this provider supports the given token.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function supports(TokenInterface $token);
|
||||
}
|
146
vendor/symfony/security-core/Authentication/Provider/DaoAuthenticationProvider.php
vendored
Normal file
146
vendor/symfony/security-core/Authentication/Provider/DaoAuthenticationProvider.php
vendored
Normal file
@ -0,0 +1,146 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Security\Core\Authentication\Provider;
|
||||
|
||||
use Symfony\Component\PasswordHasher\Hasher\PasswordHasherFactoryInterface;
|
||||
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
|
||||
use Symfony\Component\Security\Core\Encoder\EncoderFactoryInterface;
|
||||
use Symfony\Component\Security\Core\Exception\AuthenticationServiceException;
|
||||
use Symfony\Component\Security\Core\Exception\BadCredentialsException;
|
||||
use Symfony\Component\Security\Core\Exception\UserNotFoundException;
|
||||
use Symfony\Component\Security\Core\User\LegacyPasswordAuthenticatedUserInterface;
|
||||
use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface;
|
||||
use Symfony\Component\Security\Core\User\PasswordUpgraderInterface;
|
||||
use Symfony\Component\Security\Core\User\UserCheckerInterface;
|
||||
use Symfony\Component\Security\Core\User\UserInterface;
|
||||
use Symfony\Component\Security\Core\User\UserProviderInterface;
|
||||
|
||||
trigger_deprecation('symfony/security-core', '5.3', 'The "%s" class is deprecated, use the new authenticator system instead.', DaoAuthenticationProvider::class);
|
||||
|
||||
/**
|
||||
* DaoAuthenticationProvider uses a UserProviderInterface to retrieve the user
|
||||
* for a UsernamePasswordToken.
|
||||
*
|
||||
* @author Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* @deprecated since Symfony 5.3, use the new authenticator system instead
|
||||
*/
|
||||
class DaoAuthenticationProvider extends UserAuthenticationProvider
|
||||
{
|
||||
private $hasherFactory;
|
||||
private $userProvider;
|
||||
|
||||
/**
|
||||
* @param PasswordHasherFactoryInterface $hasherFactory
|
||||
*/
|
||||
public function __construct(UserProviderInterface $userProvider, UserCheckerInterface $userChecker, string $providerKey, $hasherFactory, bool $hideUserNotFoundExceptions = true)
|
||||
{
|
||||
parent::__construct($userChecker, $providerKey, $hideUserNotFoundExceptions);
|
||||
|
||||
if ($hasherFactory instanceof EncoderFactoryInterface) {
|
||||
trigger_deprecation('symfony/security-core', '5.3', 'Passing a "%s" instance to the "%s" constructor is deprecated, use "%s" instead.', EncoderFactoryInterface::class, __CLASS__, PasswordHasherFactoryInterface::class);
|
||||
}
|
||||
|
||||
$this->hasherFactory = $hasherFactory;
|
||||
$this->userProvider = $userProvider;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function checkAuthentication(UserInterface $user, UsernamePasswordToken $token)
|
||||
{
|
||||
$currentUser = $token->getUser();
|
||||
if ($currentUser instanceof UserInterface) {
|
||||
if ($currentUser->getPassword() !== $user->getPassword()) {
|
||||
throw new BadCredentialsException('The credentials were changed from another session.');
|
||||
}
|
||||
} else {
|
||||
if ('' === ($presentedPassword = $token->getCredentials())) {
|
||||
throw new BadCredentialsException('The presented password cannot be empty.');
|
||||
}
|
||||
|
||||
if (null === $user->getPassword()) {
|
||||
throw new BadCredentialsException('The presented password is invalid.');
|
||||
}
|
||||
|
||||
if (!$user instanceof PasswordAuthenticatedUserInterface) {
|
||||
trigger_deprecation('symfony/security-core', '5.3', 'Using password-based authentication listeners while not implementing "%s" interface from class "%s" is deprecated.', PasswordAuthenticatedUserInterface::class, get_debug_type($user));
|
||||
}
|
||||
|
||||
$salt = $user->getSalt();
|
||||
if ($salt && !$user instanceof LegacyPasswordAuthenticatedUserInterface) {
|
||||
trigger_deprecation('symfony/security-core', '5.3', 'Returning a string from "getSalt()" without implementing the "%s" interface is deprecated, the "%s" class should implement it.', LegacyPasswordAuthenticatedUserInterface::class, get_debug_type($user));
|
||||
}
|
||||
|
||||
// deprecated since Symfony 5.3
|
||||
if ($this->hasherFactory instanceof EncoderFactoryInterface) {
|
||||
$encoder = $this->hasherFactory->getEncoder($user);
|
||||
|
||||
if (!$encoder->isPasswordValid($user->getPassword(), $presentedPassword, $salt)) {
|
||||
throw new BadCredentialsException('The presented password is invalid.');
|
||||
}
|
||||
|
||||
if ($this->userProvider instanceof PasswordUpgraderInterface && method_exists($encoder, 'needsRehash') && $encoder->needsRehash($user->getPassword())) {
|
||||
$this->userProvider->upgradePassword($user, $encoder->encodePassword($presentedPassword, $user->getSalt()));
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$hasher = $this->hasherFactory->getPasswordHasher($user);
|
||||
|
||||
if (!$hasher->verify($user->getPassword(), $presentedPassword, $salt)) {
|
||||
throw new BadCredentialsException('The presented password is invalid.');
|
||||
}
|
||||
|
||||
if ($this->userProvider instanceof PasswordUpgraderInterface && $hasher->needsRehash($user->getPassword())) {
|
||||
$this->userProvider->upgradePassword($user, $hasher->hash($presentedPassword, $salt));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function retrieveUser(string $userIdentifier, UsernamePasswordToken $token)
|
||||
{
|
||||
$user = $token->getUser();
|
||||
if ($user instanceof UserInterface) {
|
||||
return $user;
|
||||
}
|
||||
|
||||
try {
|
||||
// @deprecated since Symfony 5.3, change to $this->userProvider->loadUserByIdentifier() in 6.0
|
||||
if (method_exists($this->userProvider, 'loadUserByIdentifier')) {
|
||||
$user = $this->userProvider->loadUserByIdentifier($userIdentifier);
|
||||
} else {
|
||||
trigger_deprecation('symfony/security-core', '5.3', 'Not implementing method "loadUserByIdentifier()" in user provider "%s" is deprecated. This method will replace "loadUserByUsername()" in Symfony 6.0.', get_debug_type($this->userProvider));
|
||||
|
||||
$user = $this->userProvider->loadUserByUsername($userIdentifier);
|
||||
}
|
||||
|
||||
if (!$user instanceof UserInterface) {
|
||||
throw new AuthenticationServiceException('The user provider must return a UserInterface object.');
|
||||
}
|
||||
|
||||
return $user;
|
||||
} catch (UserNotFoundException $e) {
|
||||
$e->setUserIdentifier($userIdentifier);
|
||||
throw $e;
|
||||
} catch (\Exception $e) {
|
||||
$e = new AuthenticationServiceException($e->getMessage(), 0, $e);
|
||||
$e->setToken($token);
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
}
|
121
vendor/symfony/security-core/Authentication/Provider/LdapBindAuthenticationProvider.php
vendored
Normal file
121
vendor/symfony/security-core/Authentication/Provider/LdapBindAuthenticationProvider.php
vendored
Normal file
@ -0,0 +1,121 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Security\Core\Authentication\Provider;
|
||||
|
||||
use Symfony\Component\Ldap\Exception\ConnectionException;
|
||||
use Symfony\Component\Ldap\LdapInterface;
|
||||
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
|
||||
use Symfony\Component\Security\Core\Exception\BadCredentialsException;
|
||||
use Symfony\Component\Security\Core\Exception\LogicException;
|
||||
use Symfony\Component\Security\Core\Exception\UserNotFoundException;
|
||||
use Symfony\Component\Security\Core\User\UserCheckerInterface;
|
||||
use Symfony\Component\Security\Core\User\UserInterface;
|
||||
use Symfony\Component\Security\Core\User\UserProviderInterface;
|
||||
|
||||
trigger_deprecation('symfony/security-core', '5.3', 'The "%s" class is deprecated, use the new authenticator system instead.', LdapBindAuthenticationProvider::class);
|
||||
|
||||
/**
|
||||
* LdapBindAuthenticationProvider authenticates a user against an LDAP server.
|
||||
*
|
||||
* The only way to check user credentials is to try to connect the user with its
|
||||
* credentials to the ldap.
|
||||
*
|
||||
* @author Charles Sarrazin <charles@sarraz.in>
|
||||
*
|
||||
* @deprecated since Symfony 5.3, use the new authenticator system instead
|
||||
*/
|
||||
class LdapBindAuthenticationProvider extends UserAuthenticationProvider
|
||||
{
|
||||
private $userProvider;
|
||||
private $ldap;
|
||||
private $dnString;
|
||||
private $queryString;
|
||||
private $searchDn;
|
||||
private $searchPassword;
|
||||
|
||||
public function __construct(UserProviderInterface $userProvider, UserCheckerInterface $userChecker, string $providerKey, LdapInterface $ldap, string $dnString = '{user_identifier}', bool $hideUserNotFoundExceptions = true, string $searchDn = '', string $searchPassword = '')
|
||||
{
|
||||
parent::__construct($userChecker, $providerKey, $hideUserNotFoundExceptions);
|
||||
|
||||
$this->userProvider = $userProvider;
|
||||
$this->ldap = $ldap;
|
||||
$this->dnString = $dnString;
|
||||
$this->searchDn = $searchDn;
|
||||
$this->searchPassword = $searchPassword;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a query string to use in order to find a DN for the user identifier.
|
||||
*/
|
||||
public function setQueryString(string $queryString)
|
||||
{
|
||||
$this->queryString = $queryString;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function retrieveUser(string $userIdentifier, UsernamePasswordToken $token)
|
||||
{
|
||||
if (AuthenticationProviderInterface::USERNAME_NONE_PROVIDED === $userIdentifier) {
|
||||
throw new UserNotFoundException('User identifier cannot be null.');
|
||||
}
|
||||
|
||||
// @deprecated since Symfony 5.3, change to $this->userProvider->loadUserByIdentifier() in 6.0
|
||||
if (method_exists($this->userProvider, 'loadUserByIdentifier')) {
|
||||
return $this->userProvider->loadUserByIdentifier($userIdentifier);
|
||||
} else {
|
||||
trigger_deprecation('symfony/security-core', '5.3', 'Not implementing method "loadUserByIdentifier()" in user provider "%s" is deprecated. This method will replace "loadUserByUsername()" in Symfony 6.0.', get_debug_type($this->userProvider));
|
||||
|
||||
return $this->userProvider->loadUserByUsername($userIdentifier);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function checkAuthentication(UserInterface $user, UsernamePasswordToken $token)
|
||||
{
|
||||
// @deprecated since Symfony 5.3, change to $token->getUserIdentifier() in 6.0
|
||||
$userIdentifier = method_exists($token, 'getUserIdentifier') ? $token->getUserIdentifier() : $token->getUsername();
|
||||
$password = $token->getCredentials();
|
||||
|
||||
if ('' === (string) $password) {
|
||||
throw new BadCredentialsException('The presented password must not be empty.');
|
||||
}
|
||||
|
||||
try {
|
||||
if ($this->queryString) {
|
||||
if ('' !== $this->searchDn && '' !== $this->searchPassword) {
|
||||
$this->ldap->bind($this->searchDn, $this->searchPassword);
|
||||
} else {
|
||||
throw new LogicException('Using the "query_string" config without using a "search_dn" and a "search_password" is not supported.');
|
||||
}
|
||||
$userIdentifier = $this->ldap->escape($userIdentifier, '', LdapInterface::ESCAPE_FILTER);
|
||||
$query = str_replace(['{username}', '{user_identifier}'], $userIdentifier, $this->queryString);
|
||||
$result = $this->ldap->query($this->dnString, $query)->execute();
|
||||
if (1 !== $result->count()) {
|
||||
throw new BadCredentialsException('The presented username is invalid.');
|
||||
}
|
||||
|
||||
$dn = $result[0]->getDn();
|
||||
} else {
|
||||
$userIdentifier = $this->ldap->escape($userIdentifier, '', LdapInterface::ESCAPE_DN);
|
||||
$dn = str_replace(['{username}', '{user_identifier}'], $userIdentifier, $this->dnString);
|
||||
}
|
||||
|
||||
$this->ldap->bind($dn, $password);
|
||||
} catch (ConnectionException $e) {
|
||||
throw new BadCredentialsException('The presented password is invalid.');
|
||||
}
|
||||
}
|
||||
}
|
86
vendor/symfony/security-core/Authentication/Provider/PreAuthenticatedAuthenticationProvider.php
vendored
Normal file
86
vendor/symfony/security-core/Authentication/Provider/PreAuthenticatedAuthenticationProvider.php
vendored
Normal file
@ -0,0 +1,86 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Security\Core\Authentication\Provider;
|
||||
|
||||
use Symfony\Component\Security\Core\Authentication\Token\PreAuthenticatedToken;
|
||||
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
|
||||
use Symfony\Component\Security\Core\Exception\AuthenticationException;
|
||||
use Symfony\Component\Security\Core\Exception\BadCredentialsException;
|
||||
use Symfony\Component\Security\Core\User\UserCheckerInterface;
|
||||
use Symfony\Component\Security\Core\User\UserProviderInterface;
|
||||
|
||||
trigger_deprecation('symfony/security-core', '5.3', 'The "%s" class is deprecated, use the new authenticator system instead.', PreAuthenticatedAuthenticationProvider::class);
|
||||
|
||||
/**
|
||||
* Processes a pre-authenticated authentication request.
|
||||
*
|
||||
* This authentication provider will not perform any checks on authentication
|
||||
* requests, as they should already be pre-authenticated. However, the
|
||||
* UserProviderInterface implementation may still throw a
|
||||
* UserNotFoundException, for example.
|
||||
*
|
||||
* @author Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* @deprecated since Symfony 5.3, use the new authenticator system instead
|
||||
*/
|
||||
class PreAuthenticatedAuthenticationProvider implements AuthenticationProviderInterface
|
||||
{
|
||||
private $userProvider;
|
||||
private $userChecker;
|
||||
private $providerKey;
|
||||
|
||||
public function __construct(UserProviderInterface $userProvider, UserCheckerInterface $userChecker, string $providerKey)
|
||||
{
|
||||
$this->userProvider = $userProvider;
|
||||
$this->userChecker = $userChecker;
|
||||
$this->providerKey = $providerKey;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function authenticate(TokenInterface $token)
|
||||
{
|
||||
if (!$this->supports($token)) {
|
||||
throw new AuthenticationException('The token is not supported by this authentication provider.');
|
||||
}
|
||||
|
||||
if (!$user = $token->getUser()) {
|
||||
throw new BadCredentialsException('No pre-authenticated principal found in request.');
|
||||
}
|
||||
|
||||
$userIdentifier = method_exists($token, 'getUserIdentifier') ? $token->getUserIdentifier() : $token->getUsername();
|
||||
// @deprecated since Symfony 5.3, change to $this->userProvider->loadUserByIdentifier() in 6.0
|
||||
if (method_exists($this->userProvider, 'loadUserByIdentifier')) {
|
||||
$user = $this->userProvider->loadUserByIdentifier($userIdentifier);
|
||||
} else {
|
||||
trigger_deprecation('symfony/security-core', '5.3', 'Not implementing method "loadUserByIdentifier()" in user provider "%s" is deprecated. This method will replace "loadUserByUsername()" in Symfony 6.0.', get_debug_type($this->userProvider));
|
||||
|
||||
$user = $this->userProvider->loadUserByUsername($userIdentifier);
|
||||
}
|
||||
|
||||
$this->userChecker->checkPostAuth($user);
|
||||
|
||||
$authenticatedToken = new PreAuthenticatedToken($user, $token->getCredentials(), $this->providerKey, $user->getRoles());
|
||||
$authenticatedToken->setAttributes($token->getAttributes());
|
||||
|
||||
return $authenticatedToken;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function supports(TokenInterface $token)
|
||||
{
|
||||
return $token instanceof PreAuthenticatedToken && $this->providerKey === $token->getFirewallName();
|
||||
}
|
||||
}
|
79
vendor/symfony/security-core/Authentication/Provider/RememberMeAuthenticationProvider.php
vendored
Normal file
79
vendor/symfony/security-core/Authentication/Provider/RememberMeAuthenticationProvider.php
vendored
Normal file
@ -0,0 +1,79 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Security\Core\Authentication\Provider;
|
||||
|
||||
use Symfony\Component\Security\Core\Authentication\Token\RememberMeToken;
|
||||
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
|
||||
use Symfony\Component\Security\Core\Exception\AuthenticationException;
|
||||
use Symfony\Component\Security\Core\Exception\BadCredentialsException;
|
||||
use Symfony\Component\Security\Core\Exception\LogicException;
|
||||
use Symfony\Component\Security\Core\User\UserCheckerInterface;
|
||||
use Symfony\Component\Security\Core\User\UserInterface;
|
||||
|
||||
trigger_deprecation('symfony/security-core', '5.3', 'The "%s" class is deprecated, use the new authenticator system instead.', RememberMeAuthenticationProvider::class);
|
||||
|
||||
/**
|
||||
* @deprecated since Symfony 5.3, use the new authenticator system instead
|
||||
*/
|
||||
class RememberMeAuthenticationProvider implements AuthenticationProviderInterface
|
||||
{
|
||||
private $userChecker;
|
||||
private $secret;
|
||||
private $providerKey;
|
||||
|
||||
/**
|
||||
* @param string $secret A secret
|
||||
* @param string $providerKey A provider secret
|
||||
*/
|
||||
public function __construct(UserCheckerInterface $userChecker, string $secret, string $providerKey)
|
||||
{
|
||||
$this->userChecker = $userChecker;
|
||||
$this->secret = $secret;
|
||||
$this->providerKey = $providerKey;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function authenticate(TokenInterface $token)
|
||||
{
|
||||
if (!$this->supports($token)) {
|
||||
throw new AuthenticationException('The token is not supported by this authentication provider.');
|
||||
}
|
||||
|
||||
if ($this->secret !== $token->getSecret()) {
|
||||
throw new BadCredentialsException('The presented secret does not match.');
|
||||
}
|
||||
|
||||
$user = $token->getUser();
|
||||
|
||||
if (!$user instanceof UserInterface) {
|
||||
throw new LogicException(sprintf('Method "%s::getUser()" must return a "%s" instance, "%s" returned.', get_debug_type($token), UserInterface::class, get_debug_type($user)));
|
||||
}
|
||||
|
||||
$this->userChecker->checkPreAuth($user);
|
||||
$this->userChecker->checkPostAuth($user);
|
||||
|
||||
$authenticatedToken = new RememberMeToken($user, $this->providerKey, $this->secret);
|
||||
$authenticatedToken->setAttributes($token->getAttributes());
|
||||
|
||||
return $authenticatedToken;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function supports(TokenInterface $token)
|
||||
{
|
||||
return $token instanceof RememberMeToken && $token->getFirewallName() === $this->providerKey;
|
||||
}
|
||||
}
|
131
vendor/symfony/security-core/Authentication/Provider/UserAuthenticationProvider.php
vendored
Normal file
131
vendor/symfony/security-core/Authentication/Provider/UserAuthenticationProvider.php
vendored
Normal file
@ -0,0 +1,131 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Security\Core\Authentication\Provider;
|
||||
|
||||
use Symfony\Component\Security\Core\Authentication\Token\SwitchUserToken;
|
||||
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
|
||||
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
|
||||
use Symfony\Component\Security\Core\Exception\AccountStatusException;
|
||||
use Symfony\Component\Security\Core\Exception\AuthenticationException;
|
||||
use Symfony\Component\Security\Core\Exception\AuthenticationServiceException;
|
||||
use Symfony\Component\Security\Core\Exception\BadCredentialsException;
|
||||
use Symfony\Component\Security\Core\Exception\CustomUserMessageAccountStatusException;
|
||||
use Symfony\Component\Security\Core\Exception\UserNotFoundException;
|
||||
use Symfony\Component\Security\Core\User\UserCheckerInterface;
|
||||
use Symfony\Component\Security\Core\User\UserInterface;
|
||||
|
||||
trigger_deprecation('symfony/security-core', '5.3', 'The "%s" class is deprecated, use the new authenticator system instead.', UserAuthenticationProvider::class);
|
||||
|
||||
/**
|
||||
* UserProviderInterface retrieves users for UsernamePasswordToken tokens.
|
||||
*
|
||||
* @author Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* @deprecated since Symfony 5.3, use the new authenticator system instead
|
||||
*/
|
||||
abstract class UserAuthenticationProvider implements AuthenticationProviderInterface
|
||||
{
|
||||
private $hideUserNotFoundExceptions;
|
||||
private $userChecker;
|
||||
private $providerKey;
|
||||
|
||||
/**
|
||||
* @throws \InvalidArgumentException
|
||||
*/
|
||||
public function __construct(UserCheckerInterface $userChecker, string $providerKey, bool $hideUserNotFoundExceptions = true)
|
||||
{
|
||||
if (empty($providerKey)) {
|
||||
throw new \InvalidArgumentException('$providerKey must not be empty.');
|
||||
}
|
||||
|
||||
$this->userChecker = $userChecker;
|
||||
$this->providerKey = $providerKey;
|
||||
$this->hideUserNotFoundExceptions = $hideUserNotFoundExceptions;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function authenticate(TokenInterface $token)
|
||||
{
|
||||
if (!$this->supports($token)) {
|
||||
throw new AuthenticationException('The token is not supported by this authentication provider.');
|
||||
}
|
||||
|
||||
$username = method_exists($token, 'getUserIdentifier') ? $token->getUserIdentifier() : $token->getUsername();
|
||||
if ('' === $username || null === $username) {
|
||||
$username = AuthenticationProviderInterface::USERNAME_NONE_PROVIDED;
|
||||
}
|
||||
|
||||
try {
|
||||
$user = $this->retrieveUser($username, $token);
|
||||
} catch (UserNotFoundException $e) {
|
||||
if ($this->hideUserNotFoundExceptions) {
|
||||
throw new BadCredentialsException('Bad credentials.', 0, $e);
|
||||
}
|
||||
$e->setUserIdentifier($username);
|
||||
|
||||
throw $e;
|
||||
}
|
||||
|
||||
if (!$user instanceof UserInterface) {
|
||||
throw new AuthenticationServiceException('retrieveUser() must return a UserInterface.');
|
||||
}
|
||||
|
||||
try {
|
||||
$this->userChecker->checkPreAuth($user);
|
||||
$this->checkAuthentication($user, $token);
|
||||
$this->userChecker->checkPostAuth($user);
|
||||
} catch (AccountStatusException|BadCredentialsException $e) {
|
||||
if ($this->hideUserNotFoundExceptions && !$e instanceof CustomUserMessageAccountStatusException) {
|
||||
throw new BadCredentialsException('Bad credentials.', 0, $e);
|
||||
}
|
||||
|
||||
throw $e;
|
||||
}
|
||||
|
||||
if ($token instanceof SwitchUserToken) {
|
||||
$authenticatedToken = new SwitchUserToken($user, $token->getCredentials(), $this->providerKey, $user->getRoles(), $token->getOriginalToken());
|
||||
} else {
|
||||
$authenticatedToken = new UsernamePasswordToken($user, $token->getCredentials(), $this->providerKey, $user->getRoles());
|
||||
}
|
||||
|
||||
$authenticatedToken->setAttributes($token->getAttributes());
|
||||
|
||||
return $authenticatedToken;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function supports(TokenInterface $token)
|
||||
{
|
||||
return $token instanceof UsernamePasswordToken && $this->providerKey === $token->getFirewallName();
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the user from an implementation-specific location.
|
||||
*
|
||||
* @return UserInterface
|
||||
*
|
||||
* @throws AuthenticationException if the credentials could not be validated
|
||||
*/
|
||||
abstract protected function retrieveUser(string $username, UsernamePasswordToken $token);
|
||||
|
||||
/**
|
||||
* Does additional checks on the user and token (like validating the
|
||||
* credentials).
|
||||
*
|
||||
* @throws AuthenticationException if the credentials could not be validated
|
||||
*/
|
||||
abstract protected function checkAuthentication(UserInterface $user, UsernamePasswordToken $token);
|
||||
}
|
Reference in New Issue
Block a user