mirror of
https://github.com/Karaka-Management/phpOMS.git
synced 2026-01-25 07:38:40 +00:00
More general routing and hidden server responses
This commit is contained in:
parent
31812f701c
commit
3d39929180
|
|
@ -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';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user