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 ...@@ -51,7 +51,7 @@ class ConstraintValidatorFactory implements ConstraintValidatorFactoryInterface
if (!isset($this->validators[$name])) { if (!isset($this->validators[$name])) {
$this->validators[$name] = new $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]]; $this->validators[$name] = $this->container[$this->validators[$name]];
} }
......
...@@ -32,6 +32,7 @@ use Symfony\Component\Security\Core\Authorization\Voter\RoleHierarchyVoter; ...@@ -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\Voter\AuthenticatedVoter;
use Symfony\Component\Security\Core\Authorization\AccessDecisionManager; use Symfony\Component\Security\Core\Authorization\AccessDecisionManager;
use Symfony\Component\Security\Core\Role\RoleHierarchy; 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\Firewall;
use Symfony\Component\Security\Http\FirewallMap; use Symfony\Component\Security\Http\FirewallMap;
use Symfony\Component\Security\Http\Firewall\AccessListener; use Symfony\Component\Security\Http\Firewall\AccessListener;
...@@ -504,6 +505,20 @@ class SecurityServiceProvider implements ServiceProviderInterface ...@@ -504,6 +505,20 @@ class SecurityServiceProvider implements ServiceProviderInterface
return new AnonymousAuthenticationProvider($name); 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) public function boot(Application $app)
......
...@@ -65,6 +65,7 @@ class ValidatorServiceProvider implements ServiceProviderInterface ...@@ -65,6 +65,7 @@ class ValidatorServiceProvider implements ServiceProviderInterface
$validators[$alias] = $service; $validators[$alias] = $service;
} }
} }
return new ConstraintValidatorFactory($app, $validators); return new ConstraintValidatorFactory($app, $validators);
}); });
} }
......
...@@ -15,6 +15,7 @@ use Silex\Application; ...@@ -15,6 +15,7 @@ use Silex\Application;
use Silex\WebTestCase; use Silex\WebTestCase;
use Silex\Provider\SecurityServiceProvider; use Silex\Provider\SecurityServiceProvider;
use Silex\Provider\SessionServiceProvider; use Silex\Provider\SessionServiceProvider;
use Silex\Provider\ValidatorServiceProvider;
use Symfony\Component\HttpKernel\Client; use Symfony\Component\HttpKernel\Client;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
...@@ -125,6 +126,32 @@ class SecurityServiceProviderTest extends WebTestCase ...@@ -125,6 +126,32 @@ class SecurityServiceProviderTest extends WebTestCase
$this->assertEquals('admin', $client->getResponse()->getContent()); $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') public function createApplication($authenticationMethod = 'form')
{ {
$app = new Application(); $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