mirror of
https://github.com/Karaka-Management/phpOMS.git
synced 2026-01-11 17:58:41 +00:00
Impl. routing error codes
This commit is contained in:
parent
71fe6219c8
commit
866b5416a4
|
|
@ -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
36
Router/RouteStatus.php
Normal 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;
|
||||
}
|
||||
|
|
@ -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];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user