mirror of
https://github.com/Karaka-Management/phpOMS.git
synced 2026-02-13 07:18:39 +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 INFO = 'info';
|
||||||
public const WARNING = 'warning';
|
public const WARNING = 'warning';
|
||||||
public const ERROR = 'error';
|
public const ERROR = 'error';
|
||||||
|
public const HIDDEN = 'hidden';
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace phpOMS\Module;
|
namespace phpOMS\Module;
|
||||||
|
|
||||||
|
use phpOMS\ApplicationAbstract;
|
||||||
use phpOMS\Message\RequestAbstract;
|
use phpOMS\Message\RequestAbstract;
|
||||||
use phpOMS\Message\ResponseAbstract;
|
use phpOMS\Message\ResponseAbstract;
|
||||||
use phpOMS\System\MimeType;
|
use phpOMS\System\MimeType;
|
||||||
|
|
@ -103,11 +104,11 @@ abstract class ModuleAbstract
|
||||||
/**
|
/**
|
||||||
* Constructor.
|
* Constructor.
|
||||||
*
|
*
|
||||||
* @param \phpOMS\ApplicationAbstract $app Application instance
|
* @param ApplicationAbstract $app Application instance
|
||||||
*
|
*
|
||||||
* @since 1.0.0
|
* @since 1.0.0
|
||||||
*/
|
*/
|
||||||
public function __construct($app)
|
public function __construct(ApplicationAbstract $app)
|
||||||
{
|
{
|
||||||
$this->app = $app;
|
$this->app = $app;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -99,19 +99,27 @@ final class Router
|
||||||
/**
|
/**
|
||||||
* Route request.
|
* Route request.
|
||||||
*
|
*
|
||||||
* @param RequestAbstract $request Request to route
|
* @param string $uri Route
|
||||||
* @param int $verb Route verb
|
* @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[]
|
* @return array[]
|
||||||
*
|
*
|
||||||
* @since 1.0.0
|
* @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 = [];
|
$bound = [];
|
||||||
$uri = $request->getUri()->getRoute();
|
|
||||||
$csrf = $request->getData('CSRF');
|
|
||||||
|
|
||||||
foreach ($this->routes as $route => $destination) {
|
foreach ($this->routes as $route => $destination) {
|
||||||
if (!((bool) \preg_match('~^' . $route . '$~', $uri))) {
|
if (!((bool) \preg_match('~^' . $route . '$~', $uri))) {
|
||||||
continue;
|
continue;
|
||||||
|
|
@ -125,7 +133,7 @@ final class Router
|
||||||
// if csrf is required but not set
|
// if csrf is required but not set
|
||||||
if (isset($d['csrf']) && $csrf === null) {
|
if (isset($d['csrf']) && $csrf === null) {
|
||||||
// todo: replace http request and http uri with general request and http
|
// 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;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
@ -136,7 +144,10 @@ final class Router
|
||||||
&& !$account->hasPermission($d['permission']['type'], $orgId, $app, $d['permission']['module'], $d['permission']['state']))
|
&& !$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
|
// 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;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,11 @@ class RouterTest extends \PHPUnit\Framework\TestCase
|
||||||
public function testDefault() : void
|
public function testDefault() : void
|
||||||
{
|
{
|
||||||
$router = new Router();
|
$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
|
public function testGetSet() : void
|
||||||
|
|
@ -52,33 +56,52 @@ class RouterTest extends \PHPUnit\Framework\TestCase
|
||||||
|
|
||||||
self::assertEquals(
|
self::assertEquals(
|
||||||
[['dest' => '\Modules\Admin\Controller:viewSettingsGeneral']],
|
[['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(
|
self::assertNotEquals(
|
||||||
[['dest' => '\Modules\Admin\Controller:viewSettingsGeneral']],
|
[['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(
|
self::assertNotEquals(
|
||||||
[['dest' => '\Modules\Admin\Controller:viewSettingsGeneral']],
|
[['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);
|
$router->add('^.*/backends/admin/settings/general.*$', 'Controller:test', RouteVerb::GET | RouteVerb::SET);
|
||||||
self::assertEquals(
|
self::assertEquals(
|
||||||
[['dest' => 'Controller:test']],
|
[['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(
|
self::assertEquals(
|
||||||
[['dest' => 'Controller:test']],
|
[['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(
|
self::assertEquals(
|
||||||
[['dest' => 'Controller:test']],
|
[['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(
|
self::assertEquals(
|
||||||
[['dest' => '\Modules\Admin\Controller:viewSettingsGeneral']],
|
[['dest' => '\Modules\Admin\Controller:viewSettingsGeneral']],
|
||||||
$router->route(
|
$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,
|
RouteVerb::GET,
|
||||||
null,
|
null,
|
||||||
null,
|
null,
|
||||||
|
|
@ -153,7 +176,7 @@ class RouterTest extends \PHPUnit\Framework\TestCase
|
||||||
self::assertNotEquals(
|
self::assertNotEquals(
|
||||||
[['dest' => '\Modules\Admin\Controller:viewSettingsGeneral']],
|
[['dest' => '\Modules\Admin\Controller:viewSettingsGeneral']],
|
||||||
$router->route(
|
$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,
|
RouteVerb::GET,
|
||||||
null,
|
null,
|
||||||
null,
|
null,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user