For remote notices, redirect to the original instead of 404.
authorPhil Hagelberg <phil@hagelb.org>
Tue, 12 Nov 2019 01:16:44 +0000 (17:16 -0800)
committerPhil Hagelberg <phil@hagelb.org>
Tue, 12 Nov 2019 17:40:29 +0000 (09:40 -0800)
We shouldn't treat these like local statuses, but I don't think a 404
is the right choice either here, because within pleroma-fe, these are
valid URLs. So with remote notices you have the awkward situation
where clicking a link will behave differently depending on whether you
open it in a new tab or not; the new tab will 404 if it hits static-fe.

This new redirecting behavior should improve that situation.

lib/pleroma/web/static_fe/static_fe_controller.ex
test/web/static_fe/static_fe_controller_test.exs

index 5e60c82b00eec1f228543e150897b0448fb06a7b..ba44b8a4feec38149e806d23703cc2efa6766729 100644 (file)
@@ -77,6 +77,11 @@ defmodule Pleroma.Web.StaticFE.StaticFEController do
 
       render(conn, "conversation.html", %{activities: timeline, meta: meta})
     else
+      %Activity{object: %Object{data: data}} ->
+        conn
+        |> put_status(:found)
+        |> redirect(external: data["url"] || data["external_url"] || data["id"])
+
       _ ->
         conn
         |> put_status(404)
index effdfbeb3f12e9b6881fa1e13d29d4e370123bde..b8fb67b225b64e711dde0ad569b4432763201288 100644 (file)
@@ -151,7 +151,7 @@ defmodule Pleroma.Web.StaticFE.StaticFEControllerTest do
       assert html_response(conn, 404) =~ "not found"
     end
 
-    test "404 for remote cached status", %{conn: conn} do
+    test "302 for remote cached status", %{conn: conn} do
       user = insert(:user)
 
       message = %{
@@ -175,7 +175,7 @@ defmodule Pleroma.Web.StaticFE.StaticFEControllerTest do
         |> put_req_header("accept", "text/html")
         |> get("/notice/#{activity.id}")
 
-      assert html_response(conn, 404) =~ "not found"
+      assert html_response(conn, 302) =~ "redirected"
     end
   end
 end