<?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\Encoder; 
 
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasher; 
use Symfony\Component\Security\Core\User\LegacyPasswordAuthenticatedUserInterface; 
use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface; 
use Symfony\Component\Security\Core\User\UserInterface; 
 
trigger_deprecation('symfony/security-core', '5.3', 'The "%s" class is deprecated, use "%s" instead.', UserPasswordEncoder::class, UserPasswordHasher::class); 
 
/** 
 * A generic password encoder. 
 * 
 * @author Ariel Ferrandini <arielferrandini@gmail.com> 
 * 
 * @deprecated since Symfony 5.3, use {@link UserPasswordHasher} instead 
 */ 
class UserPasswordEncoder implements UserPasswordEncoderInterface 
{ 
    private $encoderFactory; 
 
    public function __construct(EncoderFactoryInterface $encoderFactory) 
    { 
        $this->encoderFactory = $encoderFactory; 
    } 
 
    /** 
     * {@inheritdoc} 
     */ 
    public function encodePassword(UserInterface $user, string $plainPassword) 
    { 
        $encoder = $this->encoderFactory->getEncoder($user); 
 
        if (!$user instanceof PasswordAuthenticatedUserInterface) { 
            trigger_deprecation('symfony/password-hasher', '5.3', 'Not implementing the "%s" interface while using "%s" is deprecated, the "%s" class should implement it.', PasswordAuthenticatedUserInterface::class, __CLASS__, get_debug_type($user)); 
        } 
 
        $salt = $user->getSalt(); 
        if ($salt && !$user instanceof LegacyPasswordAuthenticatedUserInterface) { 
            trigger_deprecation('symfony/password-hasher', '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)); 
        } 
 
        return $encoder->encodePassword($plainPassword, $user->getSalt()); 
    } 
 
    /** 
     * {@inheritdoc} 
     */ 
    public function isPasswordValid(UserInterface $user, string $raw) 
    { 
        if (null === $user->getPassword()) { 
            return false; 
        } 
 
        $encoder = $this->encoderFactory->getEncoder($user); 
 
        return $encoder->isPasswordValid($user->getPassword(), $raw, $user->getSalt()); 
    } 
 
    /** 
     * {@inheritdoc} 
     */ 
    public function needsRehash(UserInterface $user): bool 
    { 
        if (null === $user->getPassword()) { 
            return false; 
        } 
 
        $encoder = $this->encoderFactory->getEncoder($user); 
 
        return $encoder->needsRehash($user->getPassword()); 
    } 
}