Impl. routing error codes

This commit is contained in:
Dennis Eichhorn 2022-11-16 22:17:41 +01:00
parent 71fe6219c8
commit 866b5416a4
4 changed files with 61 additions and 19 deletions

View File

@ -124,7 +124,7 @@ final class Dispatcher implements DispatcherInterface
$function = $dispatch[0] . '::' . $dispatch[2];
if (!\is_callable($function)) {
throw new \Exception();
throw new \Exception('Endpoint "'. $function .'" is not callable!');
}
$views[$controller] = $data === null ? $function() : $function(...$data);

36
Router/RouteStatus.php Normal file
View File

@ -0,0 +1,36 @@
<?php
/**
* Karaka
*
* PHP Version 8.1
*
* @package phpOMS\Router
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link https://karaka.app
*/
declare(strict_types=1);
namespace phpOMS\Router;
use phpOMS\Stdlib\Base\Enum;
/**
* Route Status
*
* @package phpOMS\Router
* @license OMS License 1.0
* @link https://karaka.app
* @since 1.0.0
*/
abstract class RouteStatus extends Enum
{
public const INVALID_CSRF = -1;
public const NOT_LOGGED_IN = -2;
public const INVALID_PERMISSIONS = -3;
public const INVALID_DATA = -4;
}

View File

@ -15,6 +15,7 @@ declare(strict_types=1);
namespace phpOMS\Router;
use phpOMS\Account\Account;
use phpOMS\Account\NullAccount;
/**
* Router class for socket routes.
@ -148,21 +149,28 @@ final class SocketRouter implements RouterInterface
|| ($verb & $d['verb']) === $verb
) {
// if permission check is invalid
if ((isset($d['permission']) && !empty($d['permission']) && $account === null)
|| (isset($d['permission']) && !empty($d['permission'])
&& !$account?->hasPermission(
$d['permission']['type'] ?? null, $orgId, $app, $d['permission']['module'] ?? null, $d['permission']['state'] ?? null
if (isset($d['permission']) && !empty($d['permission'])
&& ($account === null || $account instanceof NullAccount)
) {
return ['dest' => RouteStatus::NOT_LOGGED_IN];
} elseif (isset($d['permission']) && !empty($d['permission'])
&& !($account?->hasPermission(
$d['permission']['type'] ?? 0,
$d['permission']['unit'] ?? $orgId,
$app,
$d['permission']['module'] ?? null,
$d['permission']['state'] ?? null
)
)
) {
return $app !== null ? $this->route('/' . \strtolower($app) . '/e403') : $this->route('/e403');
return ['dest' => RouteStatus::INVALID_PERMISSIONS];
}
// if validation check is invalid
if (isset($d['validation'])) {
foreach ($d['validation'] as $name => $pattern) {
if (!isset($data[$name]) || \preg_match($pattern, $data[$name]) !== 1) {
return $app !== null ? $this->route('/' . \strtolower($app) . '/e403') : $this->route('/e403');
return ['dest' => RouteStatus::INVALID_DATA];
}
}
}

View File

@ -15,6 +15,7 @@ declare(strict_types=1);
namespace phpOMS\Router;
use phpOMS\Account\Account;
use phpOMS\Account\NullAccount;
/**
* Router class for web routes.
@ -155,15 +156,16 @@ final class WebRouter implements RouterInterface
) {
// if csrf is required but not set
if (isset($d['csrf']) && $d['csrf'] && $csrf === null) {
return $app !== null
? $this->route('/' . \strtolower($app) . '/e403', $csrf, $verb)
: $this->route('/e403', $csrf, $verb);
return ['dest' => RouteStatus::INVALID_CSRF];
}
// if permission check is invalid
if ((isset($d['permission']) && !empty($d['permission']) && $account === null)
|| (isset($d['permission']) && !empty($d['permission'])
&& !$account?->hasPermission(
if (isset($d['permission']) && !empty($d['permission'])
&& ($account === null || $account instanceof NullAccount)
) {
return ['dest' => RouteStatus::NOT_LOGGED_IN];
} elseif (isset($d['permission']) && !empty($d['permission'])
&& !($account?->hasPermission(
$d['permission']['type'] ?? 0,
$d['permission']['unit'] ?? $orgId,
$app,
@ -172,18 +174,14 @@ final class WebRouter implements RouterInterface
)
)
) {
return $app !== null
? $this->route('/' . \strtolower($app) . '/e403', $csrf, $verb)
: $this->route('/e403', $csrf, $verb);
return ['dest' => RouteStatus::INVALID_PERMISSIONS];
}
// if validation check is invalid
if (isset($d['validation'])) {
foreach ($d['validation'] as $name => $validation) {
if (!isset($data[$name]) || \preg_match($validation, $data[$name]) !== 1) {
return $app !== null
? $this->route('/' . \strtolower($app) . '/e403', $csrf, $verb)
: $this->route('/e403', $csrf, $verb);
return ['dest' => RouteStatus::INVALID_DATA];
}
}
}