From aa45674be68d65c500e776f15a4a28097b415829 Mon Sep 17 00:00:00 2001 From: William Pitcock Date: Wed, 20 Feb 2019 20:45:09 +0000 Subject: [PATCH 1/3] tests: add test for fetching AP objects with application/json. --- .../activity_pub_controller_test.exs | 54 ++++++++++++++++++- 1 file changed, 52 insertions(+), 2 deletions(-) diff --git a/test/web/activity_pub/activity_pub_controller_test.exs b/test/web/activity_pub/activity_pub_controller_test.exs index 398bedf77..aa2ca4eb8 100644 --- a/test/web/activity_pub/activity_pub_controller_test.exs +++ b/test/web/activity_pub/activity_pub_controller_test.exs @@ -41,7 +41,20 @@ test "with the relay disabled, it returns 404", %{conn: conn} do end describe "/users/:nickname" do - test "it returns a json representation of the user", %{conn: conn} do + test "it returns a json representation of the user with accept application/json", %{conn: conn} do + user = insert(:user) + + conn = + conn + |> put_req_header("accept", "application/json") + |> get("/users/#{user.nickname}") + + user = Repo.get(User, user.id) + + assert json_response(conn, 200) == UserView.render("user.json", %{user: user}) + end + + test "it returns a json representation of the user with accept application/activity+json", %{conn: conn} do user = insert(:user) conn = @@ -53,10 +66,35 @@ test "it returns a json representation of the user", %{conn: conn} do assert json_response(conn, 200) == UserView.render("user.json", %{user: user}) end + + test "it returns a json representation of the user with accept application/ld+json", %{conn: conn} do + user = insert(:user) + + conn = + conn + |> put_req_header("accept", "application/ld+json; profile=\"https://www.w3.org/ns/activitystreams\"") + |> get("/users/#{user.nickname}") + + user = Repo.get(User, user.id) + + assert json_response(conn, 200) == UserView.render("user.json", %{user: user}) + end end describe "/object/:uuid" do - test "it returns a json representation of the object", %{conn: conn} do + test "it returns a json representation of the object with accept application/json", %{conn: conn} do + note = insert(:note) + uuid = String.split(note.data["id"], "/") |> List.last() + + conn = + conn + |> put_req_header("accept", "application/json") + |> get("/objects/#{uuid}") + + assert json_response(conn, 200) == ObjectView.render("object.json", %{object: note}) + end + + test "it returns a json representation of the object with accept application/activity+json", %{conn: conn} do note = insert(:note) uuid = String.split(note.data["id"], "/") |> List.last() @@ -68,6 +106,18 @@ test "it returns a json representation of the object", %{conn: conn} do assert json_response(conn, 200) == ObjectView.render("object.json", %{object: note}) end + test "it returns a json representation of the object with accept application/ld+json", %{conn: conn} do + note = insert(:note) + uuid = String.split(note.data["id"], "/") |> List.last() + + conn = + conn + |> put_req_header("accept", "application/ld+json; profile=\"https://www.w3.org/ns/activitystreams\"") + |> get("/objects/#{uuid}") + + assert json_response(conn, 200) == ObjectView.render("object.json", %{object: note}) + end + test "it returns 404 for non-public messages", %{conn: conn} do note = insert(:direct_note) uuid = String.split(note.data["id"], "/") |> List.last() From 1803d9a02241b70491273b4e449475f8ebe8ef0b Mon Sep 17 00:00:00 2001 From: William Pitcock Date: Wed, 20 Feb 2019 20:45:40 +0000 Subject: [PATCH 2/3] fix fetching AP objects with application/json --- lib/pleroma/web/ostatus/ostatus_controller.ex | 7 +++++-- lib/pleroma/web/router.ex | 8 ++++---- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/lib/pleroma/web/ostatus/ostatus_controller.ex b/lib/pleroma/web/ostatus/ostatus_controller.ex index bab3da2b0..ee2e3d6ec 100644 --- a/lib/pleroma/web/ostatus/ostatus_controller.ex +++ b/lib/pleroma/web/ostatus/ostatus_controller.ex @@ -33,6 +33,9 @@ def feed_redirect(conn, %{"nickname" => nickname}) do "activity+json" -> ActivityPubController.call(conn, :user) + "json" -> + ActivityPubController.call(conn, :user) + _ -> with %User{} = user <- User.get_cached_by_nickname(nickname) do redirect(conn, external: OStatus.feed_path(user)) @@ -94,7 +97,7 @@ def salmon_incoming(conn, _) do end def object(conn, %{"uuid" => uuid}) do - if get_format(conn) == "activity+json" do + if get_format(conn) in ["activity+json", "json"] do ActivityPubController.call(conn, :object) else with id <- o_status_url(conn, :object, uuid), @@ -119,7 +122,7 @@ def object(conn, %{"uuid" => uuid}) do end def activity(conn, %{"uuid" => uuid}) do - if get_format(conn) == "activity+json" do + if get_format(conn) in ["activity+json", "json"] do ActivityPubController.call(conn, :activity) else with id <- o_status_url(conn, :activity, uuid), diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index 357ed7843..a372610d4 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -488,11 +488,11 @@ defmodule Pleroma.Web.Router do end pipeline :ap_relay do - plug(:accepts, ["activity+json"]) + plug(:accepts, ["activity+json", "json"]) end pipeline :ostatus do - plug(:accepts, ["html", "xml", "atom", "activity+json"]) + plug(:accepts, ["html", "xml", "atom", "activity+json", "json"]) end pipeline :oembed do @@ -521,7 +521,7 @@ defmodule Pleroma.Web.Router do end pipeline :activitypub do - plug(:accepts, ["activity+json"]) + plug(:accepts, ["activity+json", "json"]) plug(Pleroma.Web.Plugs.HTTPSignaturePlug) end @@ -536,7 +536,7 @@ defmodule Pleroma.Web.Router do end pipeline :activitypub_client do - plug(:accepts, ["activity+json"]) + plug(:accepts, ["activity+json", "json"]) plug(:fetch_session) plug(Pleroma.Plugs.OAuthPlug) plug(Pleroma.Plugs.BasicAuthDecoderPlug) From e95dbecf3e3c831a3bff201b06a5e901c401ae89 Mon Sep 17 00:00:00 2001 From: William Pitcock Date: Wed, 20 Feb 2019 20:49:10 +0000 Subject: [PATCH 3/3] tests: fix formatting --- .../activity_pub_controller_test.exs | 33 ++++++++++++++----- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/test/web/activity_pub/activity_pub_controller_test.exs b/test/web/activity_pub/activity_pub_controller_test.exs index aa2ca4eb8..a809c15b1 100644 --- a/test/web/activity_pub/activity_pub_controller_test.exs +++ b/test/web/activity_pub/activity_pub_controller_test.exs @@ -41,7 +41,9 @@ test "with the relay disabled, it returns 404", %{conn: conn} do end describe "/users/:nickname" do - test "it returns a json representation of the user with accept application/json", %{conn: conn} do + test "it returns a json representation of the user with accept application/json", %{ + conn: conn + } do user = insert(:user) conn = @@ -54,7 +56,9 @@ test "it returns a json representation of the user with accept application/json" assert json_response(conn, 200) == UserView.render("user.json", %{user: user}) end - test "it returns a json representation of the user with accept application/activity+json", %{conn: conn} do + test "it returns a json representation of the user with accept application/activity+json", %{ + conn: conn + } do user = insert(:user) conn = @@ -67,12 +71,17 @@ test "it returns a json representation of the user with accept application/activ assert json_response(conn, 200) == UserView.render("user.json", %{user: user}) end - test "it returns a json representation of the user with accept application/ld+json", %{conn: conn} do + test "it returns a json representation of the user with accept application/ld+json", %{ + conn: conn + } do user = insert(:user) conn = conn - |> put_req_header("accept", "application/ld+json; profile=\"https://www.w3.org/ns/activitystreams\"") + |> put_req_header( + "accept", + "application/ld+json; profile=\"https://www.w3.org/ns/activitystreams\"" + ) |> get("/users/#{user.nickname}") user = Repo.get(User, user.id) @@ -82,7 +91,9 @@ test "it returns a json representation of the user with accept application/ld+js end describe "/object/:uuid" do - test "it returns a json representation of the object with accept application/json", %{conn: conn} do + test "it returns a json representation of the object with accept application/json", %{ + conn: conn + } do note = insert(:note) uuid = String.split(note.data["id"], "/") |> List.last() @@ -94,7 +105,8 @@ test "it returns a json representation of the object with accept application/jso assert json_response(conn, 200) == ObjectView.render("object.json", %{object: note}) end - test "it returns a json representation of the object with accept application/activity+json", %{conn: conn} do + test "it returns a json representation of the object with accept application/activity+json", + %{conn: conn} do note = insert(:note) uuid = String.split(note.data["id"], "/") |> List.last() @@ -106,13 +118,18 @@ test "it returns a json representation of the object with accept application/act assert json_response(conn, 200) == ObjectView.render("object.json", %{object: note}) end - test "it returns a json representation of the object with accept application/ld+json", %{conn: conn} do + test "it returns a json representation of the object with accept application/ld+json", %{ + conn: conn + } do note = insert(:note) uuid = String.split(note.data["id"], "/") |> List.last() conn = conn - |> put_req_header("accept", "application/ld+json; profile=\"https://www.w3.org/ns/activitystreams\"") + |> put_req_header( + "accept", + "application/ld+json; profile=\"https://www.w3.org/ns/activitystreams\"" + ) |> get("/objects/#{uuid}") assert json_response(conn, 200) == ObjectView.render("object.json", %{object: note})