Merge branch '2.8'
* 2.8: [Routing] use constants in tests [Process] tweaked README [TwigBundle] Fix Twig cache is not properly warmed [Validator] Allow an empty path in a URL with only a fragment or a query [Security] Use SessionAuthenticationStrategy on RememberMe login [HttpFoundation] Fix some typo in the Request doc fixed CS Added separated handling of root paths
This commit is contained in:
commit
82bfbf0ed9
|
@ -13,6 +13,7 @@
|
||||||
<argument type="service" id="logger" on-invalid="null" />
|
<argument type="service" id="logger" on-invalid="null" />
|
||||||
<argument type="service" id="event_dispatcher" on-invalid="null"/>
|
<argument type="service" id="event_dispatcher" on-invalid="null"/>
|
||||||
<argument /> <!-- Catch exception flag set in RememberMeFactory -->
|
<argument /> <!-- Catch exception flag set in RememberMeFactory -->
|
||||||
|
<argument type="service" id="security.authentication.session_strategy" />
|
||||||
</service>
|
</service>
|
||||||
|
|
||||||
<service id="security.authentication.provider.rememberme" class="Symfony\Component\Security\Core\Authentication\Provider\RememberMeAuthenticationProvider" abstract="true" public="false">
|
<service id="security.authentication.provider.rememberme" class="Symfony\Component\Security\Core\Authentication\Provider\RememberMeAuthenticationProvider" abstract="true" public="false">
|
||||||
|
|
|
@ -38,12 +38,13 @@ class TemplateCacheCacheWarmer implements CacheWarmerInterface
|
||||||
* @param TemplateFinderInterface $finder The template paths cache warmer
|
* @param TemplateFinderInterface $finder The template paths cache warmer
|
||||||
* @param array $paths Additional twig paths to warm
|
* @param array $paths Additional twig paths to warm
|
||||||
*/
|
*/
|
||||||
public function __construct(ContainerInterface $container, TemplateFinderInterface $finder, array $paths = array())
|
public function __construct(ContainerInterface $container, TemplateFinderInterface $finder = null, array $paths = array())
|
||||||
{
|
{
|
||||||
// We don't inject the Twig environment directly as it depends on the
|
// We don't inject the Twig environment directly as it depends on the
|
||||||
// template locator (via the loader) which might be a cached one.
|
// template locator (via the loader) which might be a cached one.
|
||||||
// The cached template locator is available once the TemplatePathsCacheWarmer
|
// The cached template locator is available once the TemplatePathsCacheWarmer
|
||||||
// has been warmed up
|
// has been warmed up.
|
||||||
|
// But it can also be null if templating has been disabled.
|
||||||
$this->container = $container;
|
$this->container = $container;
|
||||||
$this->finder = $finder;
|
$this->finder = $finder;
|
||||||
$this->paths = $paths;
|
$this->paths = $paths;
|
||||||
|
@ -56,6 +57,10 @@ class TemplateCacheCacheWarmer implements CacheWarmerInterface
|
||||||
*/
|
*/
|
||||||
public function warmUp($cacheDir)
|
public function warmUp($cacheDir)
|
||||||
{
|
{
|
||||||
|
if (null === $this->finder) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
$twig = $this->container->get('twig');
|
$twig = $this->container->get('twig');
|
||||||
|
|
||||||
$templates = $this->finder->findAllTemplates();
|
$templates = $this->finder->findAllTemplates();
|
||||||
|
|
|
@ -64,9 +64,7 @@ class ExtensionPass implements CompilerPassInterface
|
||||||
$container->getDefinition('twig.extension.debug')->addTag('twig.extension');
|
$container->getDefinition('twig.extension.debug')->addTag('twig.extension');
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($container->has('templating')) {
|
if (!$container->has('templating')) {
|
||||||
$container->getDefinition('twig.cache_warmer')->addTag('kernel.cache_warmer');
|
|
||||||
} else {
|
|
||||||
$loader = $container->getDefinition('twig.loader.native_filesystem');
|
$loader = $container->getDefinition('twig.loader.native_filesystem');
|
||||||
$loader->addTag('twig.loader');
|
$loader->addTag('twig.loader');
|
||||||
$loader->setMethodCalls($container->getDefinition('twig.loader.filesystem')->getMethodCalls());
|
$loader->setMethodCalls($container->getDefinition('twig.loader.filesystem')->getMethodCalls());
|
||||||
|
|
|
@ -23,8 +23,9 @@
|
||||||
</service>
|
</service>
|
||||||
|
|
||||||
<service id="twig.cache_warmer" class="Symfony\Bundle\TwigBundle\CacheWarmer\TemplateCacheCacheWarmer" public="false">
|
<service id="twig.cache_warmer" class="Symfony\Bundle\TwigBundle\CacheWarmer\TemplateCacheCacheWarmer" public="false">
|
||||||
|
<tag name="kernel.cache_warmer" />
|
||||||
<argument type="service" id="service_container" />
|
<argument type="service" id="service_container" />
|
||||||
<argument type="service" id="templating.finder" />
|
<argument type="service" id="templating.finder" on-invalid="ignore" />
|
||||||
<argument type="collection" /> <!-- Twig paths -->
|
<argument type="collection" /> <!-- Twig paths -->
|
||||||
</service>
|
</service>
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,116 @@
|
||||||
|
<?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\Bundle\TwigBundle\Tests;
|
||||||
|
|
||||||
|
use Symfony\Component\HttpKernel\Kernel;
|
||||||
|
use Symfony\Component\Config\Loader\LoaderInterface;
|
||||||
|
use Symfony\Component\Filesystem\Filesystem;
|
||||||
|
use Symfony\Bundle\FrameworkBundle\FrameworkBundle;
|
||||||
|
use Symfony\Bundle\TwigBundle\TwigBundle;
|
||||||
|
|
||||||
|
class NewCacheWamingTest extends \PHPUnit_Framework_TestCase
|
||||||
|
{
|
||||||
|
public function testCacheIsProperlyWarmedWhenTemplatingIsAvailable()
|
||||||
|
{
|
||||||
|
$kernel = new CacheWarmingKernel(true);
|
||||||
|
$kernel->boot();
|
||||||
|
|
||||||
|
$warmer = $kernel->getContainer()->get('cache_warmer');
|
||||||
|
$warmer->enableOptionalWarmers();
|
||||||
|
$warmer->warmUp($kernel->getCacheDir());
|
||||||
|
|
||||||
|
$this->assertTrue(file_exists($kernel->getCacheDir().'/twig'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testCacheIsNotWarmedWhenTemplatingIsDisabled()
|
||||||
|
{
|
||||||
|
$kernel = new CacheWarmingKernel(false);
|
||||||
|
$kernel->boot();
|
||||||
|
|
||||||
|
$warmer = $kernel->getContainer()->get('cache_warmer');
|
||||||
|
$warmer->enableOptionalWarmers();
|
||||||
|
$warmer->warmUp($kernel->getCacheDir());
|
||||||
|
|
||||||
|
$this->assertFalse(file_exists($kernel->getCacheDir().'/twig'));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function setUp()
|
||||||
|
{
|
||||||
|
$this->deleteTempDir();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function tearDown()
|
||||||
|
{
|
||||||
|
$this->deleteTempDir();
|
||||||
|
}
|
||||||
|
|
||||||
|
private function deleteTempDir()
|
||||||
|
{
|
||||||
|
if (!file_exists($dir = sys_get_temp_dir().'/'.Kernel::VERSION.'/CacheWarmingKernel')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$fs = new Filesystem();
|
||||||
|
$fs->remove($dir);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class CacheWarmingKernel extends Kernel
|
||||||
|
{
|
||||||
|
private $withTemplating;
|
||||||
|
|
||||||
|
public function __construct($withTemplating)
|
||||||
|
{
|
||||||
|
$this->withTemplating = $withTemplating;
|
||||||
|
|
||||||
|
parent::__construct('dev', true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getName()
|
||||||
|
{
|
||||||
|
return 'CacheWarming';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function registerBundles()
|
||||||
|
{
|
||||||
|
return array(new FrameworkBundle(), new TwigBundle());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function registerContainerConfiguration(LoaderInterface $loader)
|
||||||
|
{
|
||||||
|
$loader->load(function ($container) {
|
||||||
|
$container->loadFromExtension('framework', array(
|
||||||
|
'secret' => '$ecret',
|
||||||
|
));
|
||||||
|
});
|
||||||
|
|
||||||
|
if ($this->withTemplating) {
|
||||||
|
$loader->load(function ($container) {
|
||||||
|
$container->loadFromExtension('framework', array(
|
||||||
|
'secret' => '$ecret',
|
||||||
|
'templating' => array('engines' => array('twig')),
|
||||||
|
'router' => array('resource' => '%kernel.root_dir%/Resources/config/empty_routing.yml'),
|
||||||
|
));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCacheDir()
|
||||||
|
{
|
||||||
|
return sys_get_temp_dir().'/'.Kernel::VERSION.'/CacheWarmingKernel/cache';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getLogDir()
|
||||||
|
{
|
||||||
|
return sys_get_temp_dir().'/'.Kernel::VERSION.'/CacheWarmingKernel/logs';
|
||||||
|
}
|
||||||
|
}
|
|
@ -27,6 +27,7 @@
|
||||||
"symfony/dependency-injection": "~2.8|~3.0",
|
"symfony/dependency-injection": "~2.8|~3.0",
|
||||||
"symfony/expression-language": "~2.8|~3.0",
|
"symfony/expression-language": "~2.8|~3.0",
|
||||||
"symfony/config": "~2.8|~3.0",
|
"symfony/config": "~2.8|~3.0",
|
||||||
|
"symfony/finder": "~2.8|~3.0",
|
||||||
"symfony/routing": "~2.8|~3.0",
|
"symfony/routing": "~2.8|~3.0",
|
||||||
"symfony/templating": "~2.8|~3.0",
|
"symfony/templating": "~2.8|~3.0",
|
||||||
"symfony/yaml": "~2.8|~3.0",
|
"symfony/yaml": "~2.8|~3.0",
|
||||||
|
|
|
@ -345,8 +345,13 @@ class Filesystem
|
||||||
// Determine how deep the start path is relative to the common path (ie, "web/bundles" = 2 levels)
|
// Determine how deep the start path is relative to the common path (ie, "web/bundles" = 2 levels)
|
||||||
$depth = count($startPathArr) - $index;
|
$depth = count($startPathArr) - $index;
|
||||||
|
|
||||||
// Repeated "../" for each level need to reach the common path
|
// When we need to traverse from the start, and we are starting from a root path, don't add '../'
|
||||||
$traverser = str_repeat('../', $depth);
|
if ('/' === $startPath[0] && 0 === $index && 1 === $depth) {
|
||||||
|
$traverser = '';
|
||||||
|
} else {
|
||||||
|
// Repeated "../" for each level need to reach the common path
|
||||||
|
$traverser = str_repeat('../', $depth);
|
||||||
|
}
|
||||||
|
|
||||||
$endPathRemainder = implode('/', array_slice($endPathArr, $index));
|
$endPathRemainder = implode('/', array_slice($endPathArr, $index));
|
||||||
|
|
||||||
|
|
|
@ -790,6 +790,8 @@ class FilesystemTest extends FilesystemTestCase
|
||||||
array('/a/aab/bb', '/a/aa/', '../aab/bb/'),
|
array('/a/aab/bb', '/a/aa/', '../aab/bb/'),
|
||||||
array('/a/aab/bb/', '/a/aa', '../aab/bb/'),
|
array('/a/aab/bb/', '/a/aa', '../aab/bb/'),
|
||||||
array('/a/aab/bb/', '/a/aa/', '../aab/bb/'),
|
array('/a/aab/bb/', '/a/aa/', '../aab/bb/'),
|
||||||
|
array('/a/aab/bb/', '/', 'a/aab/bb/'),
|
||||||
|
array('/a/aab/bb/', '/b/aab', '../../a/aab/bb/'),
|
||||||
);
|
);
|
||||||
|
|
||||||
if ('\\' === DIRECTORY_SEPARATOR) {
|
if ('\\' === DIRECTORY_SEPARATOR) {
|
||||||
|
|
|
@ -1158,7 +1158,7 @@ class Request
|
||||||
/**
|
/**
|
||||||
* Checks whether the request is secure or not.
|
* Checks whether the request is secure or not.
|
||||||
*
|
*
|
||||||
* This method can read the client port from the "X-Forwarded-Proto" header
|
* This method can read the client protocol from the "X-Forwarded-Proto" header
|
||||||
* when trusted proxies were set via "setTrustedProxies()".
|
* when trusted proxies were set via "setTrustedProxies()".
|
||||||
*
|
*
|
||||||
* The "X-Forwarded-Proto" header must contain the protocol: "https" or "http".
|
* The "X-Forwarded-Proto" header must contain the protocol: "https" or "http".
|
||||||
|
@ -1183,7 +1183,7 @@ class Request
|
||||||
/**
|
/**
|
||||||
* Returns the host name.
|
* Returns the host name.
|
||||||
*
|
*
|
||||||
* This method can read the client port from the "X-Forwarded-Host" header
|
* This method can read the client host name from the "X-Forwarded-Host" header
|
||||||
* when trusted proxies were set via "setTrustedProxies()".
|
* when trusted proxies were set via "setTrustedProxies()".
|
||||||
*
|
*
|
||||||
* The "X-Forwarded-Host" header must contain the client host name.
|
* The "X-Forwarded-Host" header must contain the client host name.
|
||||||
|
|
|
@ -7,12 +7,13 @@ In this example, we run a simple directory listing and get the result back:
|
||||||
|
|
||||||
```php
|
```php
|
||||||
use Symfony\Component\Process\Process;
|
use Symfony\Component\Process\Process;
|
||||||
|
use Symfony\Component\Process\Exception\ProcessFailedException;
|
||||||
|
|
||||||
$process = new Process('ls -lsa');
|
$process = new Process('ls -lsa');
|
||||||
$process->setTimeout(3600);
|
$process->setTimeout(3600);
|
||||||
$process->run();
|
$process->run();
|
||||||
if (!$process->isSuccessful()) {
|
if (!$process->isSuccessful()) {
|
||||||
throw new RuntimeException($process->getErrorOutput());
|
throw new ProcessFailedException($process);
|
||||||
}
|
}
|
||||||
|
|
||||||
print $process->getOutput();
|
print $process->getOutput();
|
||||||
|
@ -21,6 +22,19 @@ print $process->getOutput();
|
||||||
You can think that this is easy to achieve with plain PHP but it's not especially
|
You can think that this is easy to achieve with plain PHP but it's not especially
|
||||||
if you want to take care of the subtle differences between the different platforms.
|
if you want to take care of the subtle differences between the different platforms.
|
||||||
|
|
||||||
|
You can simplify the code by using `mustRun()` instead of `run()`, which will
|
||||||
|
throw a `ProcessFailedException` automatically in case of a problem:
|
||||||
|
|
||||||
|
```php
|
||||||
|
use Symfony\Component\Process\Process;
|
||||||
|
|
||||||
|
$process = new Process('ls -lsa');
|
||||||
|
$process->setTimeout(3600);
|
||||||
|
$process->mustRun();
|
||||||
|
|
||||||
|
print $process->getOutput();
|
||||||
|
```
|
||||||
|
|
||||||
And if you want to be able to get some feedback in real-time, just pass an
|
And if you want to be able to get some feedback in real-time, just pass an
|
||||||
anonymous function to the ``run()`` method and you will get the output buffer
|
anonymous function to the ``run()`` method and you will get the output buffer
|
||||||
as it becomes available:
|
as it becomes available:
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
|
|
||||||
namespace Symfony\Component\Routing\Tests\Generator\Dumper;
|
namespace Symfony\Component\Routing\Tests\Generator\Dumper;
|
||||||
|
|
||||||
|
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
|
||||||
use Symfony\Component\Routing\RouteCollection;
|
use Symfony\Component\Routing\RouteCollection;
|
||||||
use Symfony\Component\Routing\Route;
|
use Symfony\Component\Routing\Route;
|
||||||
use Symfony\Component\Routing\Generator\Dumper\PhpGeneratorDumper;
|
use Symfony\Component\Routing\Generator\Dumper\PhpGeneratorDumper;
|
||||||
|
@ -64,10 +65,10 @@ class PhpGeneratorDumperTest extends \PHPUnit_Framework_TestCase
|
||||||
|
|
||||||
$projectUrlGenerator = new \ProjectUrlGenerator(new RequestContext('/app.php'));
|
$projectUrlGenerator = new \ProjectUrlGenerator(new RequestContext('/app.php'));
|
||||||
|
|
||||||
$absoluteUrlWithParameter = $projectUrlGenerator->generate('Test', array('foo' => 'bar'), true);
|
$absoluteUrlWithParameter = $projectUrlGenerator->generate('Test', array('foo' => 'bar'), UrlGeneratorInterface::ABSOLUTE_URL);
|
||||||
$absoluteUrlWithoutParameter = $projectUrlGenerator->generate('Test2', array(), true);
|
$absoluteUrlWithoutParameter = $projectUrlGenerator->generate('Test2', array(), UrlGeneratorInterface::ABSOLUTE_URL);
|
||||||
$relativeUrlWithParameter = $projectUrlGenerator->generate('Test', array('foo' => 'bar'), false);
|
$relativeUrlWithParameter = $projectUrlGenerator->generate('Test', array('foo' => 'bar'), UrlGeneratorInterface::ABSOLUTE_PATH);
|
||||||
$relativeUrlWithoutParameter = $projectUrlGenerator->generate('Test2', array(), false);
|
$relativeUrlWithoutParameter = $projectUrlGenerator->generate('Test2', array(), UrlGeneratorInterface::ABSOLUTE_PATH);
|
||||||
|
|
||||||
$this->assertEquals($absoluteUrlWithParameter, 'http://localhost/app.php/testing/bar');
|
$this->assertEquals($absoluteUrlWithParameter, 'http://localhost/app.php/testing/bar');
|
||||||
$this->assertEquals($absoluteUrlWithoutParameter, 'http://localhost/app.php/testing2');
|
$this->assertEquals($absoluteUrlWithoutParameter, 'http://localhost/app.php/testing2');
|
||||||
|
|
|
@ -22,7 +22,7 @@ class UrlGeneratorTest extends \PHPUnit_Framework_TestCase
|
||||||
public function testAbsoluteUrlWithPort80()
|
public function testAbsoluteUrlWithPort80()
|
||||||
{
|
{
|
||||||
$routes = $this->getRoutes('test', new Route('/testing'));
|
$routes = $this->getRoutes('test', new Route('/testing'));
|
||||||
$url = $this->getGenerator($routes)->generate('test', array(), true);
|
$url = $this->getGenerator($routes)->generate('test', array(), UrlGeneratorInterface::ABSOLUTE_URL);
|
||||||
|
|
||||||
$this->assertEquals('http://localhost/app.php/testing', $url);
|
$this->assertEquals('http://localhost/app.php/testing', $url);
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,7 @@ class UrlGeneratorTest extends \PHPUnit_Framework_TestCase
|
||||||
public function testAbsoluteSecureUrlWithPort443()
|
public function testAbsoluteSecureUrlWithPort443()
|
||||||
{
|
{
|
||||||
$routes = $this->getRoutes('test', new Route('/testing'));
|
$routes = $this->getRoutes('test', new Route('/testing'));
|
||||||
$url = $this->getGenerator($routes, array('scheme' => 'https'))->generate('test', array(), true);
|
$url = $this->getGenerator($routes, array('scheme' => 'https'))->generate('test', array(), UrlGeneratorInterface::ABSOLUTE_URL);
|
||||||
|
|
||||||
$this->assertEquals('https://localhost/app.php/testing', $url);
|
$this->assertEquals('https://localhost/app.php/testing', $url);
|
||||||
}
|
}
|
||||||
|
@ -38,7 +38,7 @@ class UrlGeneratorTest extends \PHPUnit_Framework_TestCase
|
||||||
public function testAbsoluteUrlWithNonStandardPort()
|
public function testAbsoluteUrlWithNonStandardPort()
|
||||||
{
|
{
|
||||||
$routes = $this->getRoutes('test', new Route('/testing'));
|
$routes = $this->getRoutes('test', new Route('/testing'));
|
||||||
$url = $this->getGenerator($routes, array('httpPort' => 8080))->generate('test', array(), true);
|
$url = $this->getGenerator($routes, array('httpPort' => 8080))->generate('test', array(), UrlGeneratorInterface::ABSOLUTE_URL);
|
||||||
|
|
||||||
$this->assertEquals('http://localhost:8080/app.php/testing', $url);
|
$this->assertEquals('http://localhost:8080/app.php/testing', $url);
|
||||||
}
|
}
|
||||||
|
@ -46,7 +46,7 @@ class UrlGeneratorTest extends \PHPUnit_Framework_TestCase
|
||||||
public function testAbsoluteSecureUrlWithNonStandardPort()
|
public function testAbsoluteSecureUrlWithNonStandardPort()
|
||||||
{
|
{
|
||||||
$routes = $this->getRoutes('test', new Route('/testing'));
|
$routes = $this->getRoutes('test', new Route('/testing'));
|
||||||
$url = $this->getGenerator($routes, array('httpsPort' => 8080, 'scheme' => 'https'))->generate('test', array(), true);
|
$url = $this->getGenerator($routes, array('httpsPort' => 8080, 'scheme' => 'https'))->generate('test', array(), UrlGeneratorInterface::ABSOLUTE_URL);
|
||||||
|
|
||||||
$this->assertEquals('https://localhost:8080/app.php/testing', $url);
|
$this->assertEquals('https://localhost:8080/app.php/testing', $url);
|
||||||
}
|
}
|
||||||
|
@ -54,7 +54,7 @@ class UrlGeneratorTest extends \PHPUnit_Framework_TestCase
|
||||||
public function testRelativeUrlWithoutParameters()
|
public function testRelativeUrlWithoutParameters()
|
||||||
{
|
{
|
||||||
$routes = $this->getRoutes('test', new Route('/testing'));
|
$routes = $this->getRoutes('test', new Route('/testing'));
|
||||||
$url = $this->getGenerator($routes)->generate('test', array(), false);
|
$url = $this->getGenerator($routes)->generate('test', array(), UrlGeneratorInterface::ABSOLUTE_PATH);
|
||||||
|
|
||||||
$this->assertEquals('/app.php/testing', $url);
|
$this->assertEquals('/app.php/testing', $url);
|
||||||
}
|
}
|
||||||
|
@ -62,7 +62,7 @@ class UrlGeneratorTest extends \PHPUnit_Framework_TestCase
|
||||||
public function testRelativeUrlWithParameter()
|
public function testRelativeUrlWithParameter()
|
||||||
{
|
{
|
||||||
$routes = $this->getRoutes('test', new Route('/testing/{foo}'));
|
$routes = $this->getRoutes('test', new Route('/testing/{foo}'));
|
||||||
$url = $this->getGenerator($routes)->generate('test', array('foo' => 'bar'), false);
|
$url = $this->getGenerator($routes)->generate('test', array('foo' => 'bar'), UrlGeneratorInterface::ABSOLUTE_PATH);
|
||||||
|
|
||||||
$this->assertEquals('/app.php/testing/bar', $url);
|
$this->assertEquals('/app.php/testing/bar', $url);
|
||||||
}
|
}
|
||||||
|
@ -70,7 +70,7 @@ class UrlGeneratorTest extends \PHPUnit_Framework_TestCase
|
||||||
public function testRelativeUrlWithNullParameter()
|
public function testRelativeUrlWithNullParameter()
|
||||||
{
|
{
|
||||||
$routes = $this->getRoutes('test', new Route('/testing.{format}', array('format' => null)));
|
$routes = $this->getRoutes('test', new Route('/testing.{format}', array('format' => null)));
|
||||||
$url = $this->getGenerator($routes)->generate('test', array(), false);
|
$url = $this->getGenerator($routes)->generate('test', array(), UrlGeneratorInterface::ABSOLUTE_PATH);
|
||||||
|
|
||||||
$this->assertEquals('/app.php/testing', $url);
|
$this->assertEquals('/app.php/testing', $url);
|
||||||
}
|
}
|
||||||
|
@ -83,13 +83,13 @@ class UrlGeneratorTest extends \PHPUnit_Framework_TestCase
|
||||||
$routes = $this->getRoutes('test', new Route('/testing/{foo}/bar', array('foo' => null)));
|
$routes = $this->getRoutes('test', new Route('/testing/{foo}/bar', array('foo' => null)));
|
||||||
// This must raise an exception because the default requirement for "foo" is "[^/]+" which is not met with these params.
|
// This must raise an exception because the default requirement for "foo" is "[^/]+" which is not met with these params.
|
||||||
// Generating path "/testing//bar" would be wrong as matching this route would fail.
|
// Generating path "/testing//bar" would be wrong as matching this route would fail.
|
||||||
$this->getGenerator($routes)->generate('test', array(), false);
|
$this->getGenerator($routes)->generate('test', array(), UrlGeneratorInterface::ABSOLUTE_PATH);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testRelativeUrlWithOptionalZeroParameter()
|
public function testRelativeUrlWithOptionalZeroParameter()
|
||||||
{
|
{
|
||||||
$routes = $this->getRoutes('test', new Route('/testing/{page}'));
|
$routes = $this->getRoutes('test', new Route('/testing/{page}'));
|
||||||
$url = $this->getGenerator($routes)->generate('test', array('page' => 0), false);
|
$url = $this->getGenerator($routes)->generate('test', array('page' => 0), UrlGeneratorInterface::ABSOLUTE_PATH);
|
||||||
|
|
||||||
$this->assertEquals('/app.php/testing/0', $url);
|
$this->assertEquals('/app.php/testing/0', $url);
|
||||||
}
|
}
|
||||||
|
@ -104,7 +104,7 @@ class UrlGeneratorTest extends \PHPUnit_Framework_TestCase
|
||||||
public function testRelativeUrlWithExtraParameters()
|
public function testRelativeUrlWithExtraParameters()
|
||||||
{
|
{
|
||||||
$routes = $this->getRoutes('test', new Route('/testing'));
|
$routes = $this->getRoutes('test', new Route('/testing'));
|
||||||
$url = $this->getGenerator($routes)->generate('test', array('foo' => 'bar'), false);
|
$url = $this->getGenerator($routes)->generate('test', array('foo' => 'bar'), UrlGeneratorInterface::ABSOLUTE_PATH);
|
||||||
|
|
||||||
$this->assertEquals('/app.php/testing?foo=bar', $url);
|
$this->assertEquals('/app.php/testing?foo=bar', $url);
|
||||||
}
|
}
|
||||||
|
@ -112,7 +112,7 @@ class UrlGeneratorTest extends \PHPUnit_Framework_TestCase
|
||||||
public function testAbsoluteUrlWithExtraParameters()
|
public function testAbsoluteUrlWithExtraParameters()
|
||||||
{
|
{
|
||||||
$routes = $this->getRoutes('test', new Route('/testing'));
|
$routes = $this->getRoutes('test', new Route('/testing'));
|
||||||
$url = $this->getGenerator($routes)->generate('test', array('foo' => 'bar'), true);
|
$url = $this->getGenerator($routes)->generate('test', array('foo' => 'bar'), UrlGeneratorInterface::ABSOLUTE_URL);
|
||||||
|
|
||||||
$this->assertEquals('http://localhost/app.php/testing?foo=bar', $url);
|
$this->assertEquals('http://localhost/app.php/testing?foo=bar', $url);
|
||||||
}
|
}
|
||||||
|
@ -120,7 +120,7 @@ class UrlGeneratorTest extends \PHPUnit_Framework_TestCase
|
||||||
public function testUrlWithNullExtraParameters()
|
public function testUrlWithNullExtraParameters()
|
||||||
{
|
{
|
||||||
$routes = $this->getRoutes('test', new Route('/testing'));
|
$routes = $this->getRoutes('test', new Route('/testing'));
|
||||||
$url = $this->getGenerator($routes)->generate('test', array('foo' => null), true);
|
$url = $this->getGenerator($routes)->generate('test', array('foo' => null), UrlGeneratorInterface::ABSOLUTE_URL);
|
||||||
|
|
||||||
$this->assertEquals('http://localhost/app.php/testing', $url);
|
$this->assertEquals('http://localhost/app.php/testing', $url);
|
||||||
}
|
}
|
||||||
|
@ -167,7 +167,7 @@ class UrlGeneratorTest extends \PHPUnit_Framework_TestCase
|
||||||
public function testGenerateWithoutRoutes()
|
public function testGenerateWithoutRoutes()
|
||||||
{
|
{
|
||||||
$routes = $this->getRoutes('foo', new Route('/testing/{foo}'));
|
$routes = $this->getRoutes('foo', new Route('/testing/{foo}'));
|
||||||
$this->getGenerator($routes)->generate('test', array(), true);
|
$this->getGenerator($routes)->generate('test', array(), UrlGeneratorInterface::ABSOLUTE_URL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -176,7 +176,7 @@ class UrlGeneratorTest extends \PHPUnit_Framework_TestCase
|
||||||
public function testGenerateForRouteWithoutMandatoryParameter()
|
public function testGenerateForRouteWithoutMandatoryParameter()
|
||||||
{
|
{
|
||||||
$routes = $this->getRoutes('test', new Route('/testing/{foo}'));
|
$routes = $this->getRoutes('test', new Route('/testing/{foo}'));
|
||||||
$this->getGenerator($routes)->generate('test', array(), true);
|
$this->getGenerator($routes)->generate('test', array(), UrlGeneratorInterface::ABSOLUTE_URL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -185,7 +185,7 @@ class UrlGeneratorTest extends \PHPUnit_Framework_TestCase
|
||||||
public function testGenerateForRouteWithInvalidOptionalParameter()
|
public function testGenerateForRouteWithInvalidOptionalParameter()
|
||||||
{
|
{
|
||||||
$routes = $this->getRoutes('test', new Route('/testing/{foo}', array('foo' => '1'), array('foo' => 'd+')));
|
$routes = $this->getRoutes('test', new Route('/testing/{foo}', array('foo' => '1'), array('foo' => 'd+')));
|
||||||
$this->getGenerator($routes)->generate('test', array('foo' => 'bar'), true);
|
$this->getGenerator($routes)->generate('test', array('foo' => 'bar'), UrlGeneratorInterface::ABSOLUTE_URL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -194,7 +194,7 @@ class UrlGeneratorTest extends \PHPUnit_Framework_TestCase
|
||||||
public function testGenerateForRouteWithInvalidParameter()
|
public function testGenerateForRouteWithInvalidParameter()
|
||||||
{
|
{
|
||||||
$routes = $this->getRoutes('test', new Route('/testing/{foo}', array(), array('foo' => '1|2')));
|
$routes = $this->getRoutes('test', new Route('/testing/{foo}', array(), array('foo' => '1|2')));
|
||||||
$this->getGenerator($routes)->generate('test', array('foo' => '0'), true);
|
$this->getGenerator($routes)->generate('test', array('foo' => '0'), UrlGeneratorInterface::ABSOLUTE_URL);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGenerateForRouteWithInvalidOptionalParameterNonStrict()
|
public function testGenerateForRouteWithInvalidOptionalParameterNonStrict()
|
||||||
|
@ -202,7 +202,7 @@ class UrlGeneratorTest extends \PHPUnit_Framework_TestCase
|
||||||
$routes = $this->getRoutes('test', new Route('/testing/{foo}', array('foo' => '1'), array('foo' => 'd+')));
|
$routes = $this->getRoutes('test', new Route('/testing/{foo}', array('foo' => '1'), array('foo' => 'd+')));
|
||||||
$generator = $this->getGenerator($routes);
|
$generator = $this->getGenerator($routes);
|
||||||
$generator->setStrictRequirements(false);
|
$generator->setStrictRequirements(false);
|
||||||
$this->assertNull($generator->generate('test', array('foo' => 'bar'), true));
|
$this->assertNull($generator->generate('test', array('foo' => 'bar'), UrlGeneratorInterface::ABSOLUTE_URL));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGenerateForRouteWithInvalidOptionalParameterNonStrictWithLogger()
|
public function testGenerateForRouteWithInvalidOptionalParameterNonStrictWithLogger()
|
||||||
|
@ -213,7 +213,7 @@ class UrlGeneratorTest extends \PHPUnit_Framework_TestCase
|
||||||
->method('error');
|
->method('error');
|
||||||
$generator = $this->getGenerator($routes, array(), $logger);
|
$generator = $this->getGenerator($routes, array(), $logger);
|
||||||
$generator->setStrictRequirements(false);
|
$generator->setStrictRequirements(false);
|
||||||
$this->assertNull($generator->generate('test', array('foo' => 'bar'), true));
|
$this->assertNull($generator->generate('test', array('foo' => 'bar'), UrlGeneratorInterface::ABSOLUTE_URL));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGenerateForRouteWithInvalidParameterButDisabledRequirementsCheck()
|
public function testGenerateForRouteWithInvalidParameterButDisabledRequirementsCheck()
|
||||||
|
@ -230,7 +230,7 @@ class UrlGeneratorTest extends \PHPUnit_Framework_TestCase
|
||||||
public function testGenerateForRouteWithInvalidMandatoryParameter()
|
public function testGenerateForRouteWithInvalidMandatoryParameter()
|
||||||
{
|
{
|
||||||
$routes = $this->getRoutes('test', new Route('/testing/{foo}', array(), array('foo' => 'd+')));
|
$routes = $this->getRoutes('test', new Route('/testing/{foo}', array(), array('foo' => 'd+')));
|
||||||
$this->getGenerator($routes)->generate('test', array('foo' => 'bar'), true);
|
$this->getGenerator($routes)->generate('test', array('foo' => 'bar'), UrlGeneratorInterface::ABSOLUTE_URL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -411,7 +411,7 @@ class UrlGeneratorTest extends \PHPUnit_Framework_TestCase
|
||||||
{
|
{
|
||||||
$routes = $this->getRoutes('test', new Route('/{name}', array(), array(), array(), '{locale}.example.com'));
|
$routes = $this->getRoutes('test', new Route('/{name}', array(), array(), array(), '{locale}.example.com'));
|
||||||
|
|
||||||
$this->assertEquals('http://fr.example.com/app.php/Fabien', $this->getGenerator($routes, array('host' => 'fr.example.com'))->generate('test', array('name' => 'Fabien', 'locale' => 'fr'), true));
|
$this->assertEquals('http://fr.example.com/app.php/Fabien', $this->getGenerator($routes, array('host' => 'fr.example.com'))->generate('test', array('name' => 'Fabien', 'locale' => 'fr'), UrlGeneratorInterface::ABSOLUTE_URL));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -420,7 +420,7 @@ class UrlGeneratorTest extends \PHPUnit_Framework_TestCase
|
||||||
public function testUrlWithInvalidParameterInHost()
|
public function testUrlWithInvalidParameterInHost()
|
||||||
{
|
{
|
||||||
$routes = $this->getRoutes('test', new Route('/', array(), array('foo' => 'bar'), array(), '{foo}.example.com'));
|
$routes = $this->getRoutes('test', new Route('/', array(), array('foo' => 'bar'), array(), '{foo}.example.com'));
|
||||||
$this->getGenerator($routes)->generate('test', array('foo' => 'baz'), false);
|
$this->getGenerator($routes)->generate('test', array('foo' => 'baz'), UrlGeneratorInterface::ABSOLUTE_PATH);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -429,7 +429,7 @@ class UrlGeneratorTest extends \PHPUnit_Framework_TestCase
|
||||||
public function testUrlWithInvalidParameterInHostWhenParamHasADefaultValue()
|
public function testUrlWithInvalidParameterInHostWhenParamHasADefaultValue()
|
||||||
{
|
{
|
||||||
$routes = $this->getRoutes('test', new Route('/', array('foo' => 'bar'), array('foo' => 'bar'), array(), '{foo}.example.com'));
|
$routes = $this->getRoutes('test', new Route('/', array('foo' => 'bar'), array('foo' => 'bar'), array(), '{foo}.example.com'));
|
||||||
$this->getGenerator($routes)->generate('test', array('foo' => 'baz'), false);
|
$this->getGenerator($routes)->generate('test', array('foo' => 'baz'), UrlGeneratorInterface::ABSOLUTE_PATH);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -438,7 +438,7 @@ class UrlGeneratorTest extends \PHPUnit_Framework_TestCase
|
||||||
public function testUrlWithInvalidParameterEqualsDefaultValueInHost()
|
public function testUrlWithInvalidParameterEqualsDefaultValueInHost()
|
||||||
{
|
{
|
||||||
$routes = $this->getRoutes('test', new Route('/', array('foo' => 'baz'), array('foo' => 'bar'), array(), '{foo}.example.com'));
|
$routes = $this->getRoutes('test', new Route('/', array('foo' => 'baz'), array('foo' => 'bar'), array(), '{foo}.example.com'));
|
||||||
$this->getGenerator($routes)->generate('test', array('foo' => 'baz'), false);
|
$this->getGenerator($routes)->generate('test', array('foo' => 'baz'), UrlGeneratorInterface::ABSOLUTE_PATH);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testUrlWithInvalidParameterInHostInNonStrictMode()
|
public function testUrlWithInvalidParameterInHostInNonStrictMode()
|
||||||
|
@ -446,7 +446,7 @@ class UrlGeneratorTest extends \PHPUnit_Framework_TestCase
|
||||||
$routes = $this->getRoutes('test', new Route('/', array(), array('foo' => 'bar'), array(), '{foo}.example.com'));
|
$routes = $this->getRoutes('test', new Route('/', array(), array('foo' => 'bar'), array(), '{foo}.example.com'));
|
||||||
$generator = $this->getGenerator($routes);
|
$generator = $this->getGenerator($routes);
|
||||||
$generator->setStrictRequirements(false);
|
$generator->setStrictRequirements(false);
|
||||||
$this->assertNull($generator->generate('test', array('foo' => 'baz'), false));
|
$this->assertNull($generator->generate('test', array('foo' => 'baz'), UrlGeneratorInterface::ABSOLUTE_PATH));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testHostIsCaseInsensitive()
|
public function testHostIsCaseInsensitive()
|
||||||
|
|
|
@ -20,6 +20,7 @@ use Symfony\Component\Security\Http\RememberMe\RememberMeServicesInterface;
|
||||||
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
|
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
|
||||||
use Symfony\Component\Security\Http\SecurityEvents;
|
use Symfony\Component\Security\Http\SecurityEvents;
|
||||||
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
|
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
|
||||||
|
use Symfony\Component\Security\Http\Session\SessionAuthenticationStrategyInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* RememberMeListener implements authentication capabilities via a cookie.
|
* RememberMeListener implements authentication capabilities via a cookie.
|
||||||
|
@ -34,18 +35,20 @@ class RememberMeListener implements ListenerInterface
|
||||||
private $logger;
|
private $logger;
|
||||||
private $dispatcher;
|
private $dispatcher;
|
||||||
private $catchExceptions = true;
|
private $catchExceptions = true;
|
||||||
|
private $sessionStrategy;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor.
|
* Constructor.
|
||||||
*
|
*
|
||||||
* @param TokenStorageInterface $tokenStorage
|
* @param TokenStorageInterface $tokenStorage
|
||||||
* @param RememberMeServicesInterface $rememberMeServices
|
* @param RememberMeServicesInterface $rememberMeServices
|
||||||
* @param AuthenticationManagerInterface $authenticationManager
|
* @param AuthenticationManagerInterface $authenticationManager
|
||||||
* @param LoggerInterface $logger
|
* @param LoggerInterface $logger
|
||||||
* @param EventDispatcherInterface $dispatcher
|
* @param EventDispatcherInterface $dispatcher
|
||||||
* @param bool $catchExceptions
|
* @param bool $catchExceptions
|
||||||
|
* @param SessionAuthenticationStrategyInterface $sessionStrategy
|
||||||
*/
|
*/
|
||||||
public function __construct(TokenStorageInterface $tokenStorage, RememberMeServicesInterface $rememberMeServices, AuthenticationManagerInterface $authenticationManager, LoggerInterface $logger = null, EventDispatcherInterface $dispatcher = null, $catchExceptions = true)
|
public function __construct(TokenStorageInterface $tokenStorage, RememberMeServicesInterface $rememberMeServices, AuthenticationManagerInterface $authenticationManager, LoggerInterface $logger = null, EventDispatcherInterface $dispatcher = null, $catchExceptions = true, SessionAuthenticationStrategyInterface $sessionStrategy = null)
|
||||||
{
|
{
|
||||||
$this->tokenStorage = $tokenStorage;
|
$this->tokenStorage = $tokenStorage;
|
||||||
$this->rememberMeServices = $rememberMeServices;
|
$this->rememberMeServices = $rememberMeServices;
|
||||||
|
@ -53,6 +56,7 @@ class RememberMeListener implements ListenerInterface
|
||||||
$this->logger = $logger;
|
$this->logger = $logger;
|
||||||
$this->dispatcher = $dispatcher;
|
$this->dispatcher = $dispatcher;
|
||||||
$this->catchExceptions = $catchExceptions;
|
$this->catchExceptions = $catchExceptions;
|
||||||
|
$this->sessionStrategy = $sessionStrategy;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -73,6 +77,9 @@ class RememberMeListener implements ListenerInterface
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$token = $this->authenticationManager->authenticate($token);
|
$token = $this->authenticationManager->authenticate($token);
|
||||||
|
if (null !== $this->sessionStrategy && $request->hasSession() && $request->getSession()->isStarted()) {
|
||||||
|
$this->sessionStrategy->onAuthentication($request, $token);
|
||||||
|
}
|
||||||
$this->tokenStorage->setToken($token);
|
$this->tokenStorage->setToken($token);
|
||||||
|
|
||||||
if (null !== $this->dispatcher) {
|
if (null !== $this->dispatcher) {
|
||||||
|
|
|
@ -181,6 +181,71 @@ class RememberMeListenerTest extends \PHPUnit_Framework_TestCase
|
||||||
$listener->handle($event);
|
$listener->handle($event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testSessionStrategy()
|
||||||
|
{
|
||||||
|
list($listener, $tokenStorage, $service, $manager, , $dispatcher, $sessionStrategy) = $this->getListener(false, true, true);
|
||||||
|
|
||||||
|
$tokenStorage
|
||||||
|
->expects($this->once())
|
||||||
|
->method('getToken')
|
||||||
|
->will($this->returnValue(null))
|
||||||
|
;
|
||||||
|
|
||||||
|
$token = $this->getMock('Symfony\Component\Security\Core\Authentication\Token\TokenInterface');
|
||||||
|
$service
|
||||||
|
->expects($this->once())
|
||||||
|
->method('autoLogin')
|
||||||
|
->will($this->returnValue($token))
|
||||||
|
;
|
||||||
|
|
||||||
|
$tokenStorage
|
||||||
|
->expects($this->once())
|
||||||
|
->method('setToken')
|
||||||
|
->with($this->equalTo($token))
|
||||||
|
;
|
||||||
|
|
||||||
|
$manager
|
||||||
|
->expects($this->once())
|
||||||
|
->method('authenticate')
|
||||||
|
->will($this->returnValue($token))
|
||||||
|
;
|
||||||
|
|
||||||
|
$session = $this->getMock('\Symfony\Component\HttpFoundation\Session\SessionInterface');
|
||||||
|
$session
|
||||||
|
->expects($this->once())
|
||||||
|
->method('isStarted')
|
||||||
|
->will($this->returnValue(true))
|
||||||
|
;
|
||||||
|
|
||||||
|
$request = $this->getMock('\Symfony\Component\HttpFoundation\Request');
|
||||||
|
$request
|
||||||
|
->expects($this->once())
|
||||||
|
->method('hasSession')
|
||||||
|
->will($this->returnValue(true))
|
||||||
|
;
|
||||||
|
|
||||||
|
$request
|
||||||
|
->expects($this->once())
|
||||||
|
->method('getSession')
|
||||||
|
->will($this->returnValue($session))
|
||||||
|
;
|
||||||
|
|
||||||
|
$event = $this->getGetResponseEvent();
|
||||||
|
$event
|
||||||
|
->expects($this->once())
|
||||||
|
->method('getRequest')
|
||||||
|
->will($this->returnValue($request))
|
||||||
|
;
|
||||||
|
|
||||||
|
$sessionStrategy
|
||||||
|
->expects($this->once())
|
||||||
|
->method('onAuthentication')
|
||||||
|
->will($this->returnValue(null))
|
||||||
|
;
|
||||||
|
|
||||||
|
$listener->handle($event);
|
||||||
|
}
|
||||||
|
|
||||||
public function testOnCoreSecurityInteractiveLoginEventIsDispatchedIfDispatcherIsPresent()
|
public function testOnCoreSecurityInteractiveLoginEventIsDispatchedIfDispatcherIsPresent()
|
||||||
{
|
{
|
||||||
list($listener, $tokenStorage, $service, $manager, , $dispatcher) = $this->getListener(true);
|
list($listener, $tokenStorage, $service, $manager, , $dispatcher) = $this->getListener(true);
|
||||||
|
@ -240,7 +305,7 @@ class RememberMeListenerTest extends \PHPUnit_Framework_TestCase
|
||||||
return $this->getMock('Symfony\Component\HttpKernel\Event\FilterResponseEvent', array(), array(), '', false);
|
return $this->getMock('Symfony\Component\HttpKernel\Event\FilterResponseEvent', array(), array(), '', false);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function getListener($withDispatcher = false, $catchExceptions = true)
|
protected function getListener($withDispatcher = false, $catchExceptions = true, $withSessionStrategy = false)
|
||||||
{
|
{
|
||||||
$listener = new RememberMeListener(
|
$listener = new RememberMeListener(
|
||||||
$tokenStorage = $this->getTokenStorage(),
|
$tokenStorage = $this->getTokenStorage(),
|
||||||
|
@ -248,10 +313,11 @@ class RememberMeListenerTest extends \PHPUnit_Framework_TestCase
|
||||||
$manager = $this->getManager(),
|
$manager = $this->getManager(),
|
||||||
$logger = $this->getLogger(),
|
$logger = $this->getLogger(),
|
||||||
$dispatcher = ($withDispatcher ? $this->getDispatcher() : null),
|
$dispatcher = ($withDispatcher ? $this->getDispatcher() : null),
|
||||||
$catchExceptions
|
$catchExceptions,
|
||||||
|
$sessionStrategy = ($withSessionStrategy ? $this->getSessionStrategy() : null)
|
||||||
);
|
);
|
||||||
|
|
||||||
return array($listener, $tokenStorage, $service, $manager, $logger, $dispatcher);
|
return array($listener, $tokenStorage, $service, $manager, $logger, $dispatcher, $sessionStrategy);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function getLogger()
|
protected function getLogger()
|
||||||
|
@ -278,4 +344,9 @@ class RememberMeListenerTest extends \PHPUnit_Framework_TestCase
|
||||||
{
|
{
|
||||||
return $this->getMock('Symfony\Component\EventDispatcher\EventDispatcherInterface');
|
return $this->getMock('Symfony\Component\EventDispatcher\EventDispatcherInterface');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function getSessionStrategy()
|
||||||
|
{
|
||||||
|
return $this->getMock('\Symfony\Component\Security\Http\Session\SessionAuthenticationStrategyInterface');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,7 @@ use Symfony\Component\HttpFoundation\Request;
|
||||||
use Symfony\Component\Routing\Exception\MethodNotAllowedException;
|
use Symfony\Component\Routing\Exception\MethodNotAllowedException;
|
||||||
use Symfony\Component\Routing\Exception\ResourceNotFoundException;
|
use Symfony\Component\Routing\Exception\ResourceNotFoundException;
|
||||||
use Symfony\Component\Security\Core\Security;
|
use Symfony\Component\Security\Core\Security;
|
||||||
|
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
|
||||||
use Symfony\Component\Security\Http\HttpUtils;
|
use Symfony\Component\Security\Http\HttpUtils;
|
||||||
|
|
||||||
class HttpUtilsTest extends \PHPUnit_Framework_TestCase
|
class HttpUtilsTest extends \PHPUnit_Framework_TestCase
|
||||||
|
@ -43,7 +44,7 @@ class HttpUtilsTest extends \PHPUnit_Framework_TestCase
|
||||||
$urlGenerator
|
$urlGenerator
|
||||||
->expects($this->any())
|
->expects($this->any())
|
||||||
->method('generate')
|
->method('generate')
|
||||||
->with('foobar', array(), true)
|
->with('foobar', array(), UrlGeneratorInterface::ABSOLUTE_URL)
|
||||||
->will($this->returnValue('http://localhost/foo/bar'))
|
->will($this->returnValue('http://localhost/foo/bar'))
|
||||||
;
|
;
|
||||||
$urlGenerator
|
$urlGenerator
|
||||||
|
|
|
@ -34,7 +34,7 @@ class UrlValidator extends ConstraintValidator
|
||||||
\] # a IPv6 address
|
\] # a IPv6 address
|
||||||
)
|
)
|
||||||
(:[0-9]+)? # a port (optional)
|
(:[0-9]+)? # a port (optional)
|
||||||
(/?|/\S+) # a /, nothing or a / with something
|
(/?|/\S+|\?|\#) # a /, nothing, a / with something, a query or a fragment
|
||||||
$~ixu';
|
$~ixu';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -112,6 +112,8 @@ class UrlValidatorTest extends AbstractConstraintValidatorTest
|
||||||
array('http://☎.com/'),
|
array('http://☎.com/'),
|
||||||
array('http://username:password@symfony.com'),
|
array('http://username:password@symfony.com'),
|
||||||
array('http://user-name@symfony.com'),
|
array('http://user-name@symfony.com'),
|
||||||
|
array('http://symfony.com?'),
|
||||||
|
array('http://symfony.com#'),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -142,8 +144,6 @@ class UrlValidatorTest extends AbstractConstraintValidatorTest
|
||||||
array('http://goog_le.com'),
|
array('http://goog_le.com'),
|
||||||
array('http://google.com::aa'),
|
array('http://google.com::aa'),
|
||||||
array('http://google.com:aa'),
|
array('http://google.com:aa'),
|
||||||
array('http://symfony.com?'),
|
|
||||||
array('http://symfony.com#'),
|
|
||||||
array('ftp://google.fr'),
|
array('ftp://google.fr'),
|
||||||
array('faked://google.fr'),
|
array('faked://google.fr'),
|
||||||
array('http://127.0.0.1:aa/'),
|
array('http://127.0.0.1:aa/'),
|
||||||
|
|
Reference in New Issue