merged branch asm89/fix-security-encoder-factory (PR #4604)
Commits -------0be11f4
[Security] Fix retrieval of encoder when configured for concrete classes024cb91
[Security] Add failing testcases for EncoderFactory Discussion ---------- Fix security encoder factory Bug fix: yes Feature addition: no Backwards compatibility break: no Symfony2 tests pass: [![Build Status](https://secure.travis-ci.org/asm89/symfony.png?branch=fix-security-encoder-factory)](http://travis-ci.org/asm89/symfony) License of the code: MIT This PR adds two testcases + a fix for the retrieval of an encoder from the `EncoderFactory`. --------------------------------------------------------------------------- by travisbot at 2012-06-18T10:22:40Z This pull request [fails](http://travis-ci.org/symfony/symfony/builds/1645765) (merged0be11f4d
into0b8b76bf
). --------------------------------------------------------------------------- by asm89 at 2012-06-18T10:42:58Z @fabpot One testcase fails on PHP 5.3.3, but I'm not sure why. Any clues?
This commit is contained in:
commit
817aa5721f
@ -33,7 +33,7 @@ class EncoderFactory implements EncoderFactoryInterface
|
||||
public function getEncoder($user)
|
||||
{
|
||||
foreach ($this->encoders as $class => $encoder) {
|
||||
if ((is_object($user) && !$user instanceof $class) || (!is_subclass_of($user, $class) && $user != $class)) {
|
||||
if ((is_object($user) && !$user instanceof $class) || (!is_object($user) && !is_subclass_of($user, $class) && $user != $class)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -55,6 +55,29 @@ class EncoderFactoryTest extends \PHPUnit_Framework_TestCase
|
||||
$expectedEncoder = new MessageDigestPasswordEncoder('sha1');
|
||||
$this->assertEquals($expectedEncoder->encodePassword('foo', ''), $encoder->encodePassword('foo', ''));
|
||||
|
||||
$encoder = $factory->getEncoder('Symfony\Component\Security\Core\User\User');
|
||||
$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\User\User' => new MessageDigestPasswordEncoder('sha1'),
|
||||
));
|
||||
|
||||
|
||||
$encoder = $factory->getEncoder('Symfony\Component\Security\Core\User\User');
|
||||
$expectedEncoder = new MessageDigestPasswordEncoder('sha1');
|
||||
$this->assertEquals($expectedEncoder->encodePassword('foo', ''), $encoder->encodePassword('foo', ''));
|
||||
|
Reference in New Issue
Block a user