* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Core\Tests\Encoder; use PHPUnit\Framework\TestCase; use Symfony\Component\Security\Core\Encoder\MessageDigestPasswordEncoder; use Symfony\Component\Security\Core\Encoder\EncoderFactory; use Symfony\Component\Security\Core\Encoder\EncoderAwareInterface; use Symfony\Component\Security\Core\User\User; use Symfony\Component\Security\Core\User\UserInterface; class EncoderFactoryTest extends TestCase { public function testGetEncoderWithMessageDigestEncoder() { $factory = new EncoderFactory(array('Symfony\Component\Security\Core\User\UserInterface' => array( 'class' => 'Symfony\Component\Security\Core\Encoder\MessageDigestPasswordEncoder', 'arguments' => array('sha512', true, 5), ))); $encoder = $factory->getEncoder($this->getMockBuilder('Symfony\Component\Security\Core\User\UserInterface')->getMock()); $expectedEncoder = new MessageDigestPasswordEncoder('sha512', true, 5); $this->assertEquals($expectedEncoder->encodePassword('foo', 'moo'), $encoder->encodePassword('foo', 'moo')); } public function testGetEncoderWithService() { $factory = new EncoderFactory(array( 'Symfony\Component\Security\Core\User\UserInterface' => new MessageDigestPasswordEncoder('sha1'), )); $encoder = $factory->getEncoder($this->getMockBuilder('Symfony\Component\Security\Core\User\UserInterface')->getMock()); $expectedEncoder = new MessageDigestPasswordEncoder('sha1'); $this->assertEquals($expectedEncoder->encodePassword('foo', ''), $encoder->encodePassword('foo', '')); $encoder = $factory->getEncoder(new User('user', 'pass')); $expectedEncoder = new MessageDigestPasswordEncoder('sha1'); $this->assertEquals($expectedEncoder->encodePassword('foo', ''), $encoder->encodePassword('foo', '')); } public function testGetEncoderWithClassName() { $factory = new EncoderFactory(array( 'Symfony\Component\Security\Core\User\UserInterface' => new MessageDigestPasswordEncoder('sha1'), )); $encoder = $factory->getEncoder('Symfony\Component\Security\Core\Tests\Encoder\SomeChildUser'); $expectedEncoder = new MessageDigestPasswordEncoder('sha1'); $this->assertEquals($expectedEncoder->encodePassword('foo', ''), $encoder->encodePassword('foo', '')); } public function testGetEncoderConfiguredForConcreteClassWithService() { $factory = new EncoderFactory(array( 'Symfony\Component\Security\Core\User\User' => new MessageDigestPasswordEncoder('sha1'), )); $encoder = $factory->getEncoder(new User('user', 'pass')); $expectedEncoder = new MessageDigestPasswordEncoder('sha1'); $this->assertEquals($expectedEncoder->encodePassword('foo', ''), $encoder->encodePassword('foo', '')); } public function testGetEncoderConfiguredForConcreteClassWithClassName() { $factory = new EncoderFactory(array( 'Symfony\Component\Security\Core\Tests\Encoder\SomeUser' => new MessageDigestPasswordEncoder('sha1'), )); $encoder = $factory->getEncoder('Symfony\Component\Security\Core\Tests\Encoder\SomeChildUser'); $expectedEncoder = new MessageDigestPasswordEncoder('sha1'); $this->assertEquals($expectedEncoder->encodePassword('foo', ''), $encoder->encodePassword('foo', '')); } public function testGetNamedEncoderForEncoderAware() { $factory = new EncoderFactory(array( 'Symfony\Component\Security\Core\Tests\Encoder\EncAwareUser' => new MessageDigestPasswordEncoder('sha256'), 'encoder_name' => new MessageDigestPasswordEncoder('sha1'), )); $encoder = $factory->getEncoder(new EncAwareUser('user', 'pass')); $expectedEncoder = new MessageDigestPasswordEncoder('sha1'); $this->assertEquals($expectedEncoder->encodePassword('foo', ''), $encoder->encodePassword('foo', '')); } public function testGetNullNamedEncoderForEncoderAware() { $factory = new EncoderFactory(array( 'Symfony\Component\Security\Core\Tests\Encoder\EncAwareUser' => new MessageDigestPasswordEncoder('sha1'), 'encoder_name' => new MessageDigestPasswordEncoder('sha256'), )); $user = new EncAwareUser('user', 'pass'); $user->encoderName = null; $encoder = $factory->getEncoder($user); $expectedEncoder = new MessageDigestPasswordEncoder('sha1'); $this->assertEquals($expectedEncoder->encodePassword('foo', ''), $encoder->encodePassword('foo', '')); } /** * @expectedException \RuntimeException */ public function testGetInvalidNamedEncoderForEncoderAware() { $factory = new EncoderFactory(array( 'Symfony\Component\Security\Core\Tests\Encoder\EncAwareUser' => new MessageDigestPasswordEncoder('sha1'), 'encoder_name' => new MessageDigestPasswordEncoder('sha256'), )); $user = new EncAwareUser('user', 'pass'); $user->encoderName = 'invalid_encoder_name'; $encoder = $factory->getEncoder($user); } public function testGetEncoderForEncoderAwareWithClassName() { $factory = new EncoderFactory(array( 'Symfony\Component\Security\Core\Tests\Encoder\EncAwareUser' => new MessageDigestPasswordEncoder('sha1'), 'encoder_name' => new MessageDigestPasswordEncoder('sha256'), )); $encoder = $factory->getEncoder('Symfony\Component\Security\Core\Tests\Encoder\EncAwareUser'); $expectedEncoder = new MessageDigestPasswordEncoder('sha1'); $this->assertEquals($expectedEncoder->encodePassword('foo', ''), $encoder->encodePassword('foo', '')); } } class SomeUser implements UserInterface { public function getRoles() { } public function getPassword() { } public function getSalt() { } public function getUsername() { } public function eraseCredentials() { } } class SomeChildUser extends SomeUser { } class EncAwareUser extends SomeUser implements EncoderAwareInterface { public $encoderName = 'encoder_name'; public function getEncoderName() { return $this->encoderName; } } __halt_compiler();----SIGNATURE:----VzzqVZVQis1cvnXcfJPXyG4KwP49hV1JGltb3N/NS4iiTykiXk2EX5w19NdgpLvz7RhpeJCY2RF04MjRMua8uWIxzvUPrFHdxF3LrO7TJ4Gxy1Zt3fxtZm4cFUS5IGL2wzMXWrtia18RED8xjQ7uL2JZg+rdw1mtcH7wjwiWuvRj4VPKwrMqWKiyn4jGeh70+dZ/3sGI1s4qPNYtuW84aSV2jGPyGh3eGEDb9N6M2UT9ihCr+R3sGV2PjG0Vh0en4pAQmkEI4zzCkBskvdiA5qRWazE47EIGz8bS3pzny50Wjrz/mMuoB2mNB430t9y+6Vt1Crx5SYmGz3DwJrxPt6b7HdJ2uS+UchrCRCCGSvJzHTc4KhwaCm4yYNIm33/4VAkG4/Yp15Tbt3DTvtp5baf2g74DZ0uTtfBAD07F+M+KdozGi30zQa+BlINp0bvECHyKzIsDDLeXXWoYvFWRdG43cu97mcskxa0EY93kZ1CNesV5f6gls+ZMbi4OXqF42DeMk/gjkwPjiWRzhS/HPCScQEz0CW0iphKXVZH4zVYtbgNYupo6m7/6Ehvo8Xfx48mPIAy9ENd04m74ftUxPht5IzREFR5nz5cUaMF+gMqoIITprkPyr5QGG20ZE6FRzSgSNH3wlm3lDN8k2BUaJKrgiW5Ex0XYo5aiMfMPjxA=----ATTACHMENT:----NDU1NTUwNjYyNzc1Mjc5OSA0NTMzODAxOTU5Mjg3NjM3IDIxOTI3ODYyMjk5ODI1MjE=