]> git.immae.eu Git - github/shaarli/Shaarli.git/commitdiff
Fix: encoding in legacy route login redirection to post bookmark 1541/head
authorArthurHoaro <arthur@hoa.ro>
Thu, 3 Sep 2020 16:46:10 +0000 (18:46 +0200)
committerArthurHoaro <arthur@hoa.ro>
Thu, 3 Sep 2020 16:46:10 +0000 (18:46 +0200)
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.

application/legacy/LegacyController.php

index e16dd0f43effa6921b6238f0546e7357c9cea188..826604e77204f3726862890d0478ad5b448f7199 100644 (file)
@@ -39,13 +39,23 @@ class LegacyController extends ShaarliVisitorController
     /** Legacy route: ?post= */
     public function post(Request $request, Response $response): Response
     {
-        $parameters = count($request->getQueryParams()) > 0 ? '?' . http_build_query($request->getQueryParams()) : '';
         $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()) {
+            $parameters = $buildParameters($request->getQueryParams(), true);
             return $this->redirect($response, '/login?returnurl='. $this->getBasePath() . $route . $parameters);
         }
 
+        $parameters = $buildParameters($request->getQueryParams(), false);
+
         return $this->redirect($response, $route . $parameters);
     }