Redirect to homepage if referer is null

Fix #1924
This commit is contained in:
Nicolas Lœuillet 2016-04-15 07:58:01 +02:00
parent f2e5fdc366
commit af497a641c
No known key found for this signature in database
GPG key ID: 5656BE27E1E34D0A
5 changed files with 104 additions and 4 deletions

View file

@ -344,7 +344,9 @@ class EntryController extends Controller
$message
);
return $this->redirect($request->headers->get('referer'));
$redirectUrl = $this->get('wallabag_core.helper.redirect')->to($request->headers->get('referer'));
return $this->redirect($redirectUrl);
}
/**
@ -374,7 +376,9 @@ class EntryController extends Controller
$message
);
return $this->redirect($request->headers->get('referer'));
$redirectUrl = $this->get('wallabag_core.helper.redirect')->to($request->headers->get('referer'));
return $this->redirect($redirectUrl);
}
/**
@ -408,7 +412,11 @@ class EntryController extends Controller
);
// don't redirect user to the deleted entry
return $this->redirect($url !== $request->headers->get('referer') ? $request->headers->get('referer') : $this->generateUrl('homepage'));
$to = ($url !== $request->headers->get('referer') ? $request->headers->get('referer') : $this->generateUrl('homepage'));
$redirectUrl = $this->get('wallabag_core.helper.redirect')->to($to);
return $this->redirect($redirectUrl);
}
/**

View file

@ -65,7 +65,9 @@ class TagController extends Controller
}
$em->flush();
return $this->redirect($request->headers->get('referer'));
$redirectUrl = $this->get('wallabag_core.helper.redirect')->to($request->headers->get('referer'));
return $this->redirect($redirectUrl);
}
/**

View file

@ -0,0 +1,36 @@
<?php
namespace Wallabag\CoreBundle\Helper;
use Symfony\Component\Routing\Router;
class Redirect
{
private $router;
public function __construct(Router $router)
{
$this->router = $router;
}
/**
* @param string $url URL to redirect
* @param string $fallback Fallback URL if $url is null
*
* @return string
*/
public function to($url, $fallback = '')
{
$returnUrl = $url;
if (null === $url) {
if ('' !== $fallback) {
$returnUrl = $fallback;
} else {
$returnUrl = $this->router->generate('homepage');
}
}
return $returnUrl;
}
}

View file

@ -114,3 +114,8 @@ services:
class: Wallabag\CoreBundle\Operator\Doctrine\Matches
tags:
- { name: rulerz.operator, executor: rulerz.executor.doctrine, operator: matches, inline: true }
wallabag_core.helper.redirect:
class: Wallabag\CoreBundle\Helper\Redirect
arguments:
- "@router"

View file

@ -0,0 +1,49 @@
<?php
namespace Wallabag\CoreBundle\Tests\Helper;
use Wallabag\CoreBundle\Helper\Redirect;
class RedirectTest extends \PHPUnit_Framework_TestCase
{
/** @var \Symfony\Component\Routing\Router */
private $routerMock;
/** @var Redirect */
private $redirect;
public function setUp()
{
$this->routerMock = $this->getRouterMock();
$this->redirect = new Redirect($this->routerMock);
}
public function testRedirectToNullWithFallback()
{
$redirectUrl = $this->redirect->to(null, 'fallback');
$this->assertEquals('fallback', $redirectUrl);
}
public function testRedirectToNullWithoutFallback()
{
$redirectUrl = $this->redirect->to(null);
$this->assertEquals($this->routerMock->generate('homepage'), $redirectUrl);
}
public function testRedirectToValidUrl()
{
$redirectUrl = $this->redirect->to('/unread/list');
$this->assertEquals('/unread/list', $redirectUrl);
}
private function getRouterMock()
{
return $this->getMockBuilder('Symfony\Component\Routing\Router')
->setMethods(['generate'])
->disableOriginalConstructor()
->getMock();
}
}