Merge branch 'bugfix/notice-external-redirect' into 'develop'
authorHaelwenn <contact+git.pleroma.social@hacktivis.me>
Thu, 4 Feb 2021 14:26:03 +0000 (14:26 +0000)
committerHaelwenn <contact+git.pleroma.social@hacktivis.me>
Thu, 4 Feb 2021 14:26:03 +0000 (14:26 +0000)
Redirect non-local activities when /notice/:id is used

See merge request pleroma/pleroma!3300

CHANGELOG.md
lib/pleroma/web/o_status/o_status_controller.ex
test/pleroma/web/o_status/o_status_controller_test.exs

index 47009abc93f37a41ff552a3e4401ac39b04652aa..1dbdb3f4e04175052b9396185b8718742a49afbc 100644 (file)
@@ -18,6 +18,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
 - Deprecated `Pleroma.Uploaders.S3, :public_endpoint`. Now `Pleroma.Upload, :base_url` is the standard configuration key for all uploaders.
 - Improved Apache webserver support: updated sample configuration, MediaProxy cache invalidation verified with the included sample script
 - Improve OAuth 2.0 provider support. A missing `fqn` field was added to the response, but does not expose the user's email address.
+- Provide redirect of external posts from `/notice/:id` to their original URL
 
 <details>
   <summary>API Changes</summary>
index 450aae0426889e704657e45da4821a6b99938a2f..da3264149b792c644266659ab063d70910a465d5 100644 (file)
@@ -73,12 +73,8 @@ defmodule Pleroma.Web.OStatus.OStatusController do
          %User{} = user <- User.get_cached_by_ap_id(activity.data["actor"]) do
       cond do
         format in ["json", "activity+json"] ->
-          if activity.local do
-            %{data: %{"id" => redirect_url}} = Object.normalize(activity, fetch: false)
-            redirect(conn, external: redirect_url)
-          else
-            {:error, :not_found}
-          end
+          %{data: %{"id" => redirect_url}} = Object.normalize(activity, fetch: false)
+          redirect(conn, external: redirect_url)
 
         activity.data["type"] == "Create" ->
           %Object{} = object = Object.normalize(activity, fetch: false)
index 5cdca019a0ccc033bedf79d5e210bbe903b10de4..2038f4ddd12bd654062a9484695892f59ba381b9 100644 (file)
@@ -144,13 +144,19 @@ defmodule Pleroma.Web.OStatus.OStatusControllerTest do
       assert redirect_url == expected_redirect_url
     end
 
-    test "returns a 404 on remote notice when json requested", %{conn: conn} do
+    test "redirects to a proper object URL when json requested and the object is remote", %{
+      conn: conn
+    } do
       note_activity = insert(:note_activity, local: false)
+      expected_redirect_url = Object.normalize(note_activity, fetch: false).data["id"]
 
-      conn
-      |> put_req_header("accept", "application/activity+json")
-      |> get("/notice/#{note_activity.id}")
-      |> response(404)
+      redirect_url =
+        conn
+        |> put_req_header("accept", "application/activity+json")
+        |> get("/notice/#{note_activity.id}")
+        |> redirected_to()
+
+      assert redirect_url == expected_redirect_url
     end
 
     test "500s when actor not found", %{conn: conn} do