mirror of
https://github.com/skipperbent/simple-php-router.git
synced 2026-06-17 08:47:52 +00:00
Merge branch 'v4-development' into v4-feature-ip
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
<?php
|
||||
require_once 'Dummy/CsrfVerifier/DummyCsrfVerifier.php';
|
||||
require_once 'Dummy/Security/SilentTokenProvider.php';
|
||||
|
||||
class CsrfVerifierTest extends \PHPUnit\Framework\TestCase
|
||||
{
|
||||
|
||||
public function testTokenPass()
|
||||
{
|
||||
global $_POST;
|
||||
|
||||
$tokenProvider = new SilentTokenProvider();
|
||||
|
||||
$_POST[DummyCsrfVerifier::POST_KEY] = $tokenProvider->getToken();
|
||||
|
||||
TestRouter::router()->reset();
|
||||
|
||||
$router = TestRouter::router();
|
||||
$router->getRequest()->setMethod(\Pecee\Http\Request::REQUEST_TYPE_POST);
|
||||
$router->getRequest()->setUrl(new \Pecee\Http\Url('/page'));
|
||||
$csrf = new DummyCsrfVerifier();
|
||||
$csrf->setTokenProvider($tokenProvider);
|
||||
|
||||
$csrf->handle($router->getRequest());
|
||||
|
||||
// If handle doesn't throw exception, the test has passed
|
||||
$this->assertTrue(true);
|
||||
}
|
||||
|
||||
public function testTokenFail()
|
||||
{
|
||||
$this->expectException(\Pecee\Http\Middleware\Exceptions\TokenMismatchException::class);
|
||||
|
||||
global $_POST;
|
||||
|
||||
$tokenProvider = new SilentTokenProvider();
|
||||
|
||||
$router = TestRouter::router();
|
||||
$router->getRequest()->setMethod(\Pecee\Http\Request::REQUEST_TYPE_POST);
|
||||
$router->getRequest()->setUrl(new \Pecee\Http\Url('/page'));
|
||||
$csrf = new DummyCsrfVerifier();
|
||||
$csrf->setTokenProvider($tokenProvider);
|
||||
|
||||
$csrf->handle($router->getRequest());
|
||||
}
|
||||
|
||||
public function testExcludeInclude()
|
||||
{
|
||||
$router = TestRouter::router();
|
||||
$csrf = new DummyCsrfVerifier();
|
||||
$request = $router->getRequest();
|
||||
|
||||
$request->setUrl(new \Pecee\Http\Url('/exclude-page'));
|
||||
$this->assertTrue($csrf->testSkip($router->getRequest()));
|
||||
|
||||
$request->setUrl(new \Pecee\Http\Url('/exclude-all/page'));
|
||||
$this->assertTrue($csrf->testSkip($router->getRequest()));
|
||||
|
||||
$request->setUrl(new \Pecee\Http\Url('/exclude-all/include-page'));
|
||||
$this->assertFalse($csrf->testSkip($router->getRequest()));
|
||||
|
||||
$request->setUrl(new \Pecee\Http\Url('/include-page'));
|
||||
$this->assertFalse($csrf->testSkip($router->getRequest()));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
class DummyCsrfVerifier extends \Pecee\Http\Middleware\BaseCsrfVerifier {
|
||||
|
||||
protected $except = [
|
||||
'/exclude-page',
|
||||
'/exclude-all/*',
|
||||
];
|
||||
|
||||
protected $include = [
|
||||
'/exclude-all/include-page',
|
||||
];
|
||||
|
||||
public function testSkip(\Pecee\Http\Request $request) {
|
||||
return $this->skip($request);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -103,4 +103,52 @@ class EventHandlerTest extends \PHPUnit\Framework\TestCase
|
||||
|
||||
}
|
||||
|
||||
public function testCustomBasePath() {
|
||||
|
||||
$basePath = '/basepath/';
|
||||
|
||||
$eventHandler = new EventHandler();
|
||||
$eventHandler->register(EventHandler::EVENT_ADD_ROUTE, function(EventArgument $data) use($basePath) {
|
||||
|
||||
// Add basepath
|
||||
$basePath = rtrim($basePath, '/');
|
||||
|
||||
// Skip routes added by group
|
||||
if($data->isSubRoute === false) {
|
||||
|
||||
switch (true) {
|
||||
case $data->route instanceof \Pecee\SimpleRouter\Route\ILoadableRoute:
|
||||
$data->route->setUrl($basePath . $data->route->getUrl());
|
||||
break;
|
||||
case $data->route instanceof \Pecee\SimpleRouter\Route\IGroupRoute:
|
||||
$data->route->setPrefix($basePath . $data->route->getPrefix());
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
$results = [];
|
||||
|
||||
TestRouter::addEventHandler($eventHandler);
|
||||
|
||||
TestRouter::get('/about', function() use(&$results) {
|
||||
$results[] = 'about';
|
||||
});
|
||||
|
||||
TestRouter::group(['prefix' => '/admin'], function() use(&$results) {
|
||||
TestRouter::get('/', function() use(&$results) {
|
||||
$results[] = 'admin';
|
||||
});
|
||||
});
|
||||
|
||||
TestRouter::router()->setRenderMultipleRoutes(false);
|
||||
TestRouter::debugNoReset('/basepath/about');
|
||||
TestRouter::debugNoReset('/basepath/admin');
|
||||
|
||||
$this->assertEquals(['about', 'admin'], $results);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user