More general routing and hidden server responses

This commit is contained in:
Dennis Eichhorn 2019-06-01 20:55:46 +02:00
parent 31812f701c
commit 3d39929180
4 changed files with 55 additions and 19 deletions

View File

@ -30,4 +30,5 @@ abstract class NotificationLevel extends Enum
public const INFO = 'info';
public const WARNING = 'warning';
public const ERROR = 'error';
public const HIDDEN = 'hidden';
}

View File

@ -14,6 +14,7 @@ declare(strict_types=1);
namespace phpOMS\Module;
use phpOMS\ApplicationAbstract;
use phpOMS\Message\RequestAbstract;
use phpOMS\Message\ResponseAbstract;
use phpOMS\System\MimeType;
@ -103,11 +104,11 @@ abstract class ModuleAbstract
/**
* Constructor.
*
* @param \phpOMS\ApplicationAbstract $app Application instance
* @param ApplicationAbstract $app Application instance
*
* @since 1.0.0
*/
public function __construct($app)
public function __construct(ApplicationAbstract $app)
{
$this->app = $app;
}

View File

@ -99,19 +99,27 @@ final class Router
/**
* Route request.
*
* @param RequestAbstract $request Request to route
* @param int $verb Route verb
* @param string $uri Route
* @param string $csrf CSRF token
* @param int $verb Route verb
* @param string $app Application name
* @param int $orgId Organization id
* @param mixed $account Account
*
* @return array[]
*
* @since 1.0.0
*/
public function route(RequestAbstract $request, int $verb = RouteVerb::GET, string $app = null, int $orgId = null, $account = null) : array
public function route(
string $uri,
string $csrf = null,
int $verb = RouteVerb::GET,
string $app = null,
int $orgId = null,
$account = null
) : array
{
$bound = [];
$uri = $request->getUri()->getRoute();
$csrf = $request->getData('CSRF');
foreach ($this->routes as $route => $destination) {
if (!((bool) \preg_match('~^' . $route . '$~', $uri))) {
continue;
@ -125,7 +133,7 @@ final class Router
// if csrf is required but not set
if (isset($d['csrf']) && $csrf === null) {
// todo: replace http request and http uri with general request and http
\array_merge($bound, $this->route(new Request(new Http('/' . $app . '/e403')), $verb));
\array_merge($bound, $this->route('/' . $app . '/e403', $csrf, $verb));
continue;
}
@ -136,7 +144,10 @@ final class Router
&& !$account->hasPermission($d['permission']['type'], $orgId, $app, $d['permission']['module'], $d['permission']['state']))
) {
// todo: replace http request and http uri with general request and http
\array_merge($bound, $this->route(new Request(new Http('/' . $app . '/e403')), $verb));
\array_merge(
$bound,
$this->route('/' . $app . '/e403', $csrf, $verb)
);
continue;
}

View File

@ -41,7 +41,11 @@ class RouterTest extends \PHPUnit\Framework\TestCase
public function testDefault() : void
{
$router = new Router();
self::assertEmpty($router->route(new Request(new Http('http://test.com'))));
self::assertEmpty(
$router->route(
(new Request(new Http()))->getUri()->getRoute()
)
);
}
public function testGetSet() : void
@ -52,33 +56,52 @@ class RouterTest extends \PHPUnit\Framework\TestCase
self::assertEquals(
[['dest' => '\Modules\Admin\Controller:viewSettingsGeneral']],
$router->route(new Request(new Http('http://test.com/backend/admin/settings/general/something?test')))
$router->route(
(new Request(
new Http('http://test.com/backend/admin/settings/general/something?test')
))->getUri()->getRoute()
)
);
self::assertNotEquals(
[['dest' => '\Modules\Admin\Controller:viewSettingsGeneral']],
$router->route(new Request(new Http('http://test.com/backend/admin/settings/general/something?test')), RouteVerb::PUT)
$router->route(
(new Request(
new Http('http://test.com/backend/admin/settings/general/something?test')
))->getUri()->getRoute(), RouteVerb::PUT)
);
self::assertNotEquals(
[['dest' => '\Modules\Admin\Controller:viewSettingsGeneral']],
$router->route(new Request(new Http('http://test.com/backends/admin/settings/general/something?test')))
$router->route(
(new Request(
new Http('http://test.com/backends/admin/settings/general/something?test')
))->getUri()->getRoute()
)
);
$router->add('^.*/backends/admin/settings/general.*$', 'Controller:test', RouteVerb::GET | RouteVerb::SET);
self::assertEquals(
[['dest' => 'Controller:test']],
$router->route(new Request(new Http('http://test.com/backends/admin/settings/general/something?test')), RouteVerb::ANY)
$router->route(
(new Request(
new Http('http://test.com/backends/admin/settings/general/something?test')
))->getUri()->getRoute(), RouteVerb::ANY)
);
self::assertEquals(
[['dest' => 'Controller:test']],
$router->route(new Request(new Http('http://test.com/backends/admin/settings/general/something?test')), RouteVerb::SET)
$router->route(
(new Request(
new Http('http://test.com/backends/admin/settings/general/something?test')
))->getUri()->getRoute(), RouteVerb::SET)
);
self::assertEquals(
[['dest' => 'Controller:test']],
$router->route(new Request(new Http('http://test.com/backends/admin/settings/general/something?test')), RouteVerb::GET)
$router->route(
(new Request(
new Http('http://test.com/backends/admin/settings/general/something?test')))->getUri()->getRoute(), RouteVerb::GET)
);
}
@ -104,7 +127,7 @@ class RouterTest extends \PHPUnit\Framework\TestCase
self::assertEquals(
[['dest' => '\Modules\Admin\Controller:viewSettingsGeneral']],
$router->route(
new Request(new Http('http://test.com/backend/admin/settings/general/something?test')),
(new Request(new Http('http://test.com/backend/admin/settings/general/something?test')))->getUri()->getRoute(),
RouteVerb::GET,
null,
null,
@ -153,7 +176,7 @@ class RouterTest extends \PHPUnit\Framework\TestCase
self::assertNotEquals(
[['dest' => '\Modules\Admin\Controller:viewSettingsGeneral']],
$router->route(
new Request(new Http('http://test.com/backend/admin/settings/general/something?test')),
(new Request(new Http('http://test.com/backend/admin/settings/general/something?test')))->getUri()->getRoute(),
RouteVerb::GET,
null,
null,