Compare commits

..

3 Commits

Author SHA1 Message Date
d504f1d5bb
encode and decode parameters in routes
All checks were successful
soko-web/pipeline/head This commit looks good
2024-11-08 12:21:54 +01:00
5534f10cee
use RFC3986 for query parameter encoding 2024-11-08 12:21:13 +01:00
c1fe1bb0e0
do not encode query parameters 2024-11-08 12:20:30 +01:00
2 changed files with 4 additions and 4 deletions

View File

@ -170,7 +170,7 @@ class HttpResponse
$this->request->session()->set('redirect_after_login', $this->rawUrl); $this->request->session()->set('redirect_after_login', $this->rawUrl);
$response = new Redirect( $response = new Redirect(
$this->routeCollection->getRoute($this->appConfig['loginRouteId']) $this->routeCollection->getRoute($this->appConfig['loginRouteId'])
->generateLink(['redirect_after_login' => urlencode($this->rawUrl)]), ->generateLink(['redirect_after_login' => $this->rawUrl]),
IRedirect::TEMPORARY); IRedirect::TEMPORARY);
header('Location: ' . $this->getRedirectUrl($response), true, $response->getHttpCode()); header('Location: ' . $this->getRedirectUrl($response), true, $response->getHttpCode());
} }

View File

@ -34,7 +34,7 @@ class Route implements IRoute
foreach ($this->pattern as $fragment) { foreach ($this->pattern as $fragment) {
if (preg_match('/^{(\\w+)(\\?)?}$/', $fragment, $matches) === 1) { if (preg_match('/^{(\\w+)(\\?)?}$/', $fragment, $matches) === 1) {
if (isset($parameters[$matches[1]])) { if (isset($parameters[$matches[1]])) {
$link[] = $parameters[$matches[1]]; $link[] = rawurlencode($parameters[$matches[1]]);
unset($parameters[$matches[1]]); unset($parameters[$matches[1]]);
} elseif (!isset($matches[2])) {//TODO: why? parameter not found but not optional } elseif (!isset($matches[2])) {//TODO: why? parameter not found but not optional
$link[] = $fragment; $link[] = $fragment;
@ -53,7 +53,7 @@ class Route implements IRoute
$queryParams[$key] = $value; $queryParams[$key] = $value;
} }
$query = count($queryParams) > 0 ? '?' . http_build_query($queryParams) : ''; $query = count($queryParams) > 0 ? '?' . http_build_query($queryParams, encoding_type: PHP_QUERY_RFC3986) : '';
return '/' . implode('/', $link) . $query; return '/' . implode('/', $link) . $query;
} }
@ -64,7 +64,7 @@ class Route implements IRoute
foreach ($path as $i => $fragment) { foreach ($path as $i => $fragment) {
if (preg_match('/^{(\\w+)(?:\\?)?}$/', $this->pattern[$i], $matches) === 1) { if (preg_match('/^{(\\w+)(?:\\?)?}$/', $this->pattern[$i], $matches) === 1) {
$parameters[$matches[1]] = $fragment; $parameters[$matches[1]] = rawurldecode($fragment);
} elseif ($fragment != $this->pattern[$i]) { } elseif ($fragment != $this->pattern[$i]) {
return null; return null;
} }