mirror of
https://github.com/Karaka-Management/phpOMS.git
synced 2026-02-08 05:18:40 +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];
|
$function = $dispatch[0] . '::' . $dispatch[2];
|
||||||
|
|
||||||
if (!\is_callable($function)) {
|
if (!\is_callable($function)) {
|
||||||
throw new \Exception();
|
throw new \Exception('Endpoint "'. $function .'" is not callable!');
|
||||||
}
|
}
|
||||||
|
|
||||||
$views[$controller] = $data === null ? $function() : $function(...$data);
|
$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;
|
namespace phpOMS\Router;
|
||||||
|
|
||||||
use phpOMS\Account\Account;
|
use phpOMS\Account\Account;
|
||||||
|
use phpOMS\Account\NullAccount;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Router class for socket routes.
|
* Router class for socket routes.
|
||||||
|
|
@ -148,21 +149,28 @@ final class SocketRouter implements RouterInterface
|
||||||
|| ($verb & $d['verb']) === $verb
|
|| ($verb & $d['verb']) === $verb
|
||||||
) {
|
) {
|
||||||
// if permission check is invalid
|
// if permission check is invalid
|
||||||
if ((isset($d['permission']) && !empty($d['permission']) && $account === null)
|
if (isset($d['permission']) && !empty($d['permission'])
|
||||||
|| (isset($d['permission']) && !empty($d['permission'])
|
&& ($account === null || $account instanceof NullAccount)
|
||||||
&& !$account?->hasPermission(
|
) {
|
||||||
$d['permission']['type'] ?? null, $orgId, $app, $d['permission']['module'] ?? null, $d['permission']['state'] ?? null
|
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 validation check is invalid
|
||||||
if (isset($d['validation'])) {
|
if (isset($d['validation'])) {
|
||||||
foreach ($d['validation'] as $name => $pattern) {
|
foreach ($d['validation'] as $name => $pattern) {
|
||||||
if (!isset($data[$name]) || \preg_match($pattern, $data[$name]) !== 1) {
|
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;
|
namespace phpOMS\Router;
|
||||||
|
|
||||||
use phpOMS\Account\Account;
|
use phpOMS\Account\Account;
|
||||||
|
use phpOMS\Account\NullAccount;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Router class for web routes.
|
* Router class for web routes.
|
||||||
|
|
@ -155,15 +156,16 @@ final class WebRouter implements RouterInterface
|
||||||
) {
|
) {
|
||||||
// if csrf is required but not set
|
// if csrf is required but not set
|
||||||
if (isset($d['csrf']) && $d['csrf'] && $csrf === null) {
|
if (isset($d['csrf']) && $d['csrf'] && $csrf === null) {
|
||||||
return $app !== null
|
return ['dest' => RouteStatus::INVALID_CSRF];
|
||||||
? $this->route('/' . \strtolower($app) . '/e403', $csrf, $verb)
|
|
||||||
: $this->route('/e403', $csrf, $verb);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// if permission check is invalid
|
// if permission check is invalid
|
||||||
if ((isset($d['permission']) && !empty($d['permission']) && $account === null)
|
if (isset($d['permission']) && !empty($d['permission'])
|
||||||
|| (isset($d['permission']) && !empty($d['permission'])
|
&& ($account === null || $account instanceof NullAccount)
|
||||||
&& !$account?->hasPermission(
|
) {
|
||||||
|
return ['dest' => RouteStatus::NOT_LOGGED_IN];
|
||||||
|
} elseif (isset($d['permission']) && !empty($d['permission'])
|
||||||
|
&& !($account?->hasPermission(
|
||||||
$d['permission']['type'] ?? 0,
|
$d['permission']['type'] ?? 0,
|
||||||
$d['permission']['unit'] ?? $orgId,
|
$d['permission']['unit'] ?? $orgId,
|
||||||
$app,
|
$app,
|
||||||
|
|
@ -172,18 +174,14 @@ final class WebRouter implements RouterInterface
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
return $app !== null
|
return ['dest' => RouteStatus::INVALID_PERMISSIONS];
|
||||||
? $this->route('/' . \strtolower($app) . '/e403', $csrf, $verb)
|
|
||||||
: $this->route('/e403', $csrf, $verb);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// if validation check is invalid
|
// if validation check is invalid
|
||||||
if (isset($d['validation'])) {
|
if (isset($d['validation'])) {
|
||||||
foreach ($d['validation'] as $name => $validation) {
|
foreach ($d['validation'] as $name => $validation) {
|
||||||
if (!isset($data[$name]) || \preg_match($validation, $data[$name]) !== 1) {
|
if (!isset($data[$name]) || \preg_match($validation, $data[$name]) !== 1) {
|
||||||
return $app !== null
|
return ['dest' => RouteStatus::INVALID_DATA];
|
||||||
? $this->route('/' . \strtolower($app) . '/e403', $csrf, $verb)
|
|
||||||
: $this->route('/e403', $csrf, $verb);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user