fix cli routing

This commit is contained in:
Dennis Eichhorn 2022-03-11 23:18:00 +01:00
parent df89ee433e
commit c5cd5da5d9

View File

@ -85,6 +85,9 @@ final class SocketRouter implements RouterInterface
* *
* @param string $route Route regex * @param string $route Route regex
* @param mixed $destination Destination e.g. Module:function string or callback * @param mixed $destination Destination e.g. Module:function string or callback
* @param int $verb Request verb
* @param array $validation Validation patterns
* @param string $dataPattern Data patterns
* *
* @return void * @return void
* *
@ -93,6 +96,7 @@ final class SocketRouter implements RouterInterface
public function add( public function add(
string $route, string $route,
mixed $destination, mixed $destination,
int $verb = RouteVerb::GET,
array $validation = [], array $validation = [],
string $dataPattern = '' string $dataPattern = ''
) : void ) : void
@ -103,6 +107,7 @@ final class SocketRouter implements RouterInterface
$this->routes[$route][] = [ $this->routes[$route][] = [
'dest' => $destination, 'dest' => $destination,
'verb' => $verb,
'validation' => empty($validation) ? null : $validation, 'validation' => empty($validation) ? null : $validation,
'pattern' => empty($dataPattern) ? null : $dataPattern, 'pattern' => empty($dataPattern) ? null : $dataPattern,
]; ];
@ -112,6 +117,7 @@ final class SocketRouter implements RouterInterface
* Route request. * Route request.
* *
* @param string $uri Route * @param string $uri Route
* @param int $verb Route verb
* @param string $app Application name * @param string $app Application name
* @param int $orgId Organization id * @param int $orgId Organization id
* @param Account $account Account * @param Account $account Account
@ -123,6 +129,7 @@ final class SocketRouter implements RouterInterface
*/ */
public function route( public function route(
string $uri, string $uri,
int $verb = RouteVerb::GET,
string $app = null, string $app = null,
int $orgId = null, int $orgId = null,
Account $account = null, Account $account = null,
@ -136,36 +143,41 @@ final class SocketRouter implements RouterInterface
} }
foreach ($destination as $d) { foreach ($destination as $d) {
// if permission check is invalid if ($d['verb'] === RouteVerb::ANY
if ((isset($d['permission']) && !empty($d['permission']) && $account === null) || $verb === RouteVerb::ANY
|| (isset($d['permission']) && !empty($d['permission']) || ($verb & $d['verb']) === $verb
&& !$account?->hasPermission(
$d['permission']['type'] ?? null, $orgId, $app, $d['permission']['module'] ?? null, $d['permission']['state'] ?? null
)
)
) { ) {
return $app !== null ? $this->route('/' . \strtolower($app) . '/e403') : $this->route('/e403'); // 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
)
)
) {
return $app !== null ? $this->route('/' . \strtolower($app) . '/e403') : $this->route('/e403');
}
// 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 $app !== null ? $this->route('/' . \strtolower($app) . '/e403') : $this->route('/e403');
}
} }
} }
$temp = ['dest' => $d['dest']];
// fill data
if (isset($d['pattern'])) {
\preg_match($d['pattern'], $uri, $matches);
$temp['data'] = $matches;
}
$bound[] = $temp;
} }
$temp = ['dest' => $d['dest']];
// fill data
if (isset($d['pattern'])) {
\preg_match($d['pattern'], $uri, $matches);
$temp['data'] = $matches;
}
$bound[] = $temp;
} }
} }