Skip to content

Commit

Permalink
[Security] use current request attributes to generate redirect url?
Browse files Browse the repository at this point in the history
  • Loading branch information
jfsimon authored and fabpot committed Mar 13, 2013
1 parent a27f7d8 commit 6575df6
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 5 deletions.
16 changes: 13 additions & 3 deletions src/Symfony/Component/Security/Http/HttpUtils.php
Expand Up @@ -136,15 +136,25 @@ public function generateUri($request, $path)
return $request->getUriForPath($path);
}

return $this->generateUrl($path, true);
return $this->generateUrl($path, $request->attributes->all(), true);
}

private function generateUrl($route, $absolute = false)
private function generateUrl($route, array $attributes = array(), $absolute = false)
{
if (null === $this->urlGenerator) {
throw new \LogicException('You must provide a UrlGeneratorInterface instance to be able to use routes.');
}

return $this->urlGenerator->generate($route, array(), $absolute);
$url = $this->urlGenerator->generate($route, $attributes, $absolute);

// unnecessary query string parameters must be removed from url
// (ie. query parameters that are presents in $attributes)
// fortunately, they all are, so we have to remove entire query string
$position = strpos($url, '?');
if (false !== $position) {
$url = substr($url, 0, $position);
}

return $url;
}
}
16 changes: 14 additions & 2 deletions src/Symfony/Component/Security/Tests/Http/HttpUtilsTest.php
Expand Up @@ -137,13 +137,25 @@ public function testCheckRequestPathWithUrlMatcherLoadingException()
$utils->checkRequestPath($this->getRequest(), 'foobar');
}

private function getUrlGenerator()
public function testGenerateUrlRemovesQueryString()
{
$method = new \ReflectionMethod('Symfony\Component\Security\Http\HttpUtils', 'generateUrl');
$method->setAccessible(true);

$utils = new HttpUtils($this->getUrlGenerator());
$this->assertEquals('/foo/bar', $method->invoke($utils, 'route_name'));

$utils = new HttpUtils($this->getUrlGenerator('/foo/bar?param=value'));
$this->assertEquals('/foo/bar', $method->invoke($utils, 'route_name'));
}

private function getUrlGenerator($generatedUrl = '/foo/bar')
{
$urlGenerator = $this->getMock('Symfony\Component\Routing\Generator\UrlGeneratorInterface');
$urlGenerator
->expects($this->any())
->method('generate')
->will($this->returnValue('/foo/bar'))
->will($this->returnValue($generatedUrl))
;

return $urlGenerator;
Expand Down

0 comments on commit 6575df6

Please sign in to comment.