ostatus controller: respond with AS2 objects instead of activities to notice URIs
This commit is contained in:
parent
d73c7cc0ca
commit
98795172a7
2 changed files with 41 additions and 3 deletions
|
@ -1,7 +1,7 @@
|
||||||
defmodule Pleroma.Web.OStatus.OStatusController do
|
defmodule Pleroma.Web.OStatus.OStatusController do
|
||||||
use Pleroma.Web, :controller
|
use Pleroma.Web, :controller
|
||||||
|
|
||||||
alias Pleroma.{User, Activity}
|
alias Pleroma.{User, Activity, Object}
|
||||||
alias Pleroma.Web.OStatus.{FeedRepresenter, ActivityRepresenter}
|
alias Pleroma.Web.OStatus.{FeedRepresenter, ActivityRepresenter}
|
||||||
alias Pleroma.Repo
|
alias Pleroma.Repo
|
||||||
alias Pleroma.Web.{OStatus, Federator}
|
alias Pleroma.Web.{OStatus, Federator}
|
||||||
|
@ -153,10 +153,21 @@ def notice(conn, %{"id" => id}) do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
defp represent_activity(conn, "activity+json", activity, user) do
|
defp represent_activity(
|
||||||
|
conn,
|
||||||
|
"activity+json",
|
||||||
|
%Activity{data: %{"type" => "Create"}} = activity,
|
||||||
|
user
|
||||||
|
) do
|
||||||
|
object = Object.normalize(activity.data["object"])
|
||||||
|
|
||||||
conn
|
conn
|
||||||
|> put_resp_header("content-type", "application/activity+json")
|
|> put_resp_header("content-type", "application/activity+json")
|
||||||
|> json(ObjectView.render("object.json", %{object: activity}))
|
|> json(ObjectView.render("object.json", %{object: object}))
|
||||||
|
end
|
||||||
|
|
||||||
|
defp represent_activity(conn, "activity+json", _, _) do
|
||||||
|
{:error, :not_found}
|
||||||
end
|
end
|
||||||
|
|
||||||
defp represent_activity(conn, _, activity, user) do
|
defp represent_activity(conn, _, activity, user) do
|
||||||
|
|
|
@ -2,6 +2,7 @@ defmodule Pleroma.Web.OStatus.OStatusControllerTest do
|
||||||
use Pleroma.Web.ConnCase
|
use Pleroma.Web.ConnCase
|
||||||
import Pleroma.Factory
|
import Pleroma.Factory
|
||||||
alias Pleroma.{User, Repo}
|
alias Pleroma.{User, Repo}
|
||||||
|
alias Pleroma.Web.CommonAPI
|
||||||
alias Pleroma.Web.OStatus.ActivityRepresenter
|
alias Pleroma.Web.OStatus.ActivityRepresenter
|
||||||
|
|
||||||
test "decodes a salmon", %{conn: conn} do
|
test "decodes a salmon", %{conn: conn} do
|
||||||
|
@ -167,6 +168,32 @@ test "gets a notice in AS2 format", %{conn: conn} do
|
||||||
assert json_response(conn, 200)
|
assert json_response(conn, 200)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "only gets a notice in AS2 format for Create messages", %{conn: conn} do
|
||||||
|
note_activity = insert(:note_activity)
|
||||||
|
url = "/notice/#{note_activity.id}"
|
||||||
|
|
||||||
|
conn =
|
||||||
|
conn
|
||||||
|
|> put_req_header("accept", "application/activity+json")
|
||||||
|
|> get(url)
|
||||||
|
|
||||||
|
assert json_response(conn, 200)
|
||||||
|
|
||||||
|
user = insert(:user)
|
||||||
|
|
||||||
|
{:ok, like_activity, _} = CommonAPI.favorite(note_activity.id, user)
|
||||||
|
url = "/notice/#{like_activity.id}"
|
||||||
|
|
||||||
|
assert like_activity.data["type"] == "Like"
|
||||||
|
|
||||||
|
conn =
|
||||||
|
build_conn()
|
||||||
|
|> put_req_header("accept", "application/activity+json")
|
||||||
|
|> get(url)
|
||||||
|
|
||||||
|
assert response(conn, 404)
|
||||||
|
end
|
||||||
|
|
||||||
test "gets an activity in AS2 format", %{conn: conn} do
|
test "gets an activity in AS2 format", %{conn: conn} do
|
||||||
note_activity = insert(:note_activity)
|
note_activity = insert(:note_activity)
|
||||||
[_, uuid] = hd(Regex.scan(~r/.+\/([\w-]+)$/, note_activity.data["id"]))
|
[_, uuid] = hd(Regex.scan(~r/.+\/([\w-]+)$/, note_activity.data["id"]))
|
||||||
|
|
Loading…
Reference in a new issue