Commit b45b4fb2 authored by alexkappa's avatar alexkappa

SecurityServiceProvider now registers a UserPasswordValidator if...

SecurityServiceProvider now registers a UserPasswordValidator if ValidatorServiceProvider is registered.
parent 70c1e365
......@@ -51,7 +51,7 @@ class ConstraintValidatorFactory implements ConstraintValidatorFactoryInterface
if (!isset($this->validators[$name])) {
$this->validators[$name] = new $name();
} elseif (!is_object($this->validators[$name])) {
} elseif (is_string($this->validators[$name])) {
$this->validators[$name] = $this->container[$this->validators[$name]];
}
......
......@@ -32,6 +32,7 @@ use Symfony\Component\Security\Core\Authorization\Voter\RoleHierarchyVoter;
use Symfony\Component\Security\Core\Authorization\Voter\AuthenticatedVoter;
use Symfony\Component\Security\Core\Authorization\AccessDecisionManager;
use Symfony\Component\Security\Core\Role\RoleHierarchy;
use Symfony\Component\Security\Core\Validator\Constraint\UserPasswordValidator;
use Symfony\Component\Security\Http\Firewall;
use Symfony\Component\Security\Http\FirewallMap;
use Symfony\Component\Security\Http\Firewall\AccessListener;
......@@ -504,6 +505,20 @@ class SecurityServiceProvider implements ServiceProviderInterface
return new AnonymousAuthenticationProvider($name);
});
});
if (isset($app['validator'])) {
$app['security.validator.user_password_validator'] = $app->share(function ($app) {
return new UserPasswordValidator($app['security'], $app['security.encoder_factory']);
});
if (isset($app['validator.validator_service_ids'])) {
$app['validator.validator_service_ids']['security.validator.user_password'] = 'security.validator.user_password_validator';
} else {
$app['validator.validator_service_ids'] = array(
'security.validator.user_password' => 'security.validator.user_password_validator'
);
}
}
}
public function boot(Application $app)
......
......@@ -65,6 +65,7 @@ class ValidatorServiceProvider implements ServiceProviderInterface
$validators[$alias] = $service;
}
}
return new ConstraintValidatorFactory($app, $validators);
});
}
......
......@@ -15,6 +15,7 @@ use Silex\Application;
use Silex\WebTestCase;
use Silex\Provider\SecurityServiceProvider;
use Silex\Provider\SessionServiceProvider;
use Silex\Provider\ValidatorServiceProvider;
use Symfony\Component\HttpKernel\Client;
use Symfony\Component\HttpFoundation\Request;
......@@ -125,6 +126,32 @@ class SecurityServiceProviderTest extends WebTestCase
$this->assertEquals('admin', $client->getResponse()->getContent());
}
public function testUserPasswordValidatorIsRegistered()
{
if (!is_dir(__DIR__.'/../../../../vendor/symfony/validator')) {
$this->markTestSkipped('Validator dependency was not installed.');
}
$app = new Application();
$app->register(new ValidatorServiceProvider());
$app->register(new SecurityServiceProvider(), array(
'security.firewalls' => array(
'admin' => array(
'pattern' => '^/admin',
'http' => true,
'users' => array(
'admin' => array('ROLE_ADMIN', '513aeb0121909'),
)
),
),
));
$app->boot();
$this->assertInstanceOf('Symfony\Component\Security\Core\Validator\Constraint\UserPasswordValidator', $app['security.validator.user_password_validator']);
}
public function createApplication($authenticationMethod = 'form')
{
$app = new Application();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment