diff --git a/lib/pleroma/web/ostatus/ostatus_controller.ex b/lib/pleroma/web/ostatus/ostatus_controller.ex index e6822463d..fd8dcdf52 100644 --- a/lib/pleroma/web/ostatus/ostatus_controller.ex +++ b/lib/pleroma/web/ostatus/ostatus_controller.ex @@ -44,10 +44,22 @@ def salmon_incoming(conn, params) do end def object(conn, %{"uuid" => uuid}) do - id = o_status_url(conn, :object, uuid) - activity = Activity.get_create_activity_by_object_ap_id(id) - user = User.get_cached_by_ap_id(activity.data["actor"]) + with id <- o_status_url(conn, :object, uuid), + %Activity{} = activity <- Activity.get_create_activity_by_object_ap_id(id), + %User{} = user <- User.get_cached_by_ap_id(activity.data["actor"]) do + represent_activity(conn, activity, user) + end + end + def activity(conn, %{"uuid" => uuid}) do + with id <- o_status_url(conn, :activity, uuid), + %Activity{} = activity <- Activity.get_by_ap_id(id), + %User{} = user <- User.get_cached_by_ap_id(activity.data["actor"]) do + represent_activity(conn, activity, user) + end + end + + defp represent_activity(conn, activity, user) do response = activity |> ActivityRepresenter.to_simple_form(user, true) |> ActivityRepresenter.wrap_with_entry diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index 15f66b24f..12159cffc 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -77,6 +77,7 @@ def user_fetcher(username) do pipe_through :ostatus get "/objects/:uuid", OStatus.OStatusController, :object + get "/activities/:uuid", OStatus.OStatusController, :activity get "/users/:nickname/feed", OStatus.OStatusController, :feed get "/users/:nickname", OStatus.OStatusController, :feed_redirect diff --git a/test/web/ostatus/ostatus_controller_test.exs b/test/web/ostatus/ostatus_controller_test.exs index 8b7ca4d89..77bc202fe 100644 --- a/test/web/ostatus/ostatus_controller_test.exs +++ b/test/web/ostatus/ostatus_controller_test.exs @@ -2,6 +2,7 @@ defmodule Pleroma.Web.OStatus.OStatusControllerTest do use Pleroma.Web.ConnCase import Pleroma.Factory alias Pleroma.User + alias Pleroma.Web.OStatus.ActivityRepresenter test "gets a feed", %{conn: conn} do note_activity = insert(:note_activity) @@ -15,12 +16,29 @@ test "gets a feed", %{conn: conn} do test "gets an object", %{conn: conn} do note_activity = insert(:note_activity) + user = User.get_by_ap_id(note_activity.data["actor"]) [_, uuid] = hd Regex.scan(~r/.+\/([\w-]+)$/, note_activity.data["object"]["id"]) url = "/objects/#{uuid}" conn = conn |> get(url) + expected = ActivityRepresenter.to_simple_form(note_activity, user, true) + |> ActivityRepresenter.wrap_with_entry + |> :xmerl.export_simple(:xmerl_xml) + |> to_string + + assert response(conn, 200) == expected + end + + test "gets an activity", %{conn: conn} do + note_activity = insert(:note_activity) + [_, uuid] = hd Regex.scan(~r/.+\/([\w-]+)$/, note_activity.data["id"]) + url = "/activities/#{uuid}" + + conn = conn + |> get(url) + assert response(conn, 200) end end