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:
ArthurHoaro 2020-09-03 18:46:10 +02:00
parent 21163a3329
commit d33cffdb2e

View file

@ -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);
} }