Fix: encoding in legacy route login redirection to post bookmark
When a bookmark is post from a logged out user, he is first redirected to the login page with 'returnurl' containing the link, then redirected again when the login is processed. We need to reencode the posted URL, otherwise the browser does not handle the fragment as a part of the posted parameter.
This commit is contained in:
parent
21163a3329
commit
d33cffdb2e
1 changed files with 11 additions and 1 deletions
|
@ -39,13 +39,23 @@ public function process(Request $request, Response $response, string $action): R
|
||||||
/** Legacy route: ?post= */
|
/** Legacy route: ?post= */
|
||||||
public function post(Request $request, Response $response): Response
|
public function post(Request $request, Response $response): Response
|
||||||
{
|
{
|
||||||
$parameters = count($request->getQueryParams()) > 0 ? '?' . http_build_query($request->getQueryParams()) : '';
|
|
||||||
$route = '/admin/shaare';
|
$route = '/admin/shaare';
|
||||||
|
$buildParameters = function (?array $parameters, bool $encode) {
|
||||||
|
if ($encode) {
|
||||||
|
$parameters = array_map('urlencode', $parameters);
|
||||||
|
}
|
||||||
|
|
||||||
|
return count($parameters) > 0 ? '?' . http_build_query($parameters) : '';
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
if (!$this->container->loginManager->isLoggedIn()) {
|
if (!$this->container->loginManager->isLoggedIn()) {
|
||||||
|
$parameters = $buildParameters($request->getQueryParams(), true);
|
||||||
return $this->redirect($response, '/login?returnurl='. $this->getBasePath() . $route . $parameters);
|
return $this->redirect($response, '/login?returnurl='. $this->getBasePath() . $route . $parameters);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$parameters = $buildParameters($request->getQueryParams(), false);
|
||||||
|
|
||||||
return $this->redirect($response, $route . $parameters);
|
return $this->redirect($response, $route . $parameters);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue