Browse Source

Merge branch 'bugfix/notice-urls-should-return-objects' into 'develop'

ostatus controller: respond with AS2 objects instead of activities to notice URIs

Closes #289 and #383

See merge request pleroma/pleroma!462
tags/v0.9.9
lambda 5 years ago
parent
commit
b471344b63
2 changed files with 41 additions and 3 deletions
  1. +14
    -3
      lib/pleroma/web/ostatus/ostatus_controller.ex
  2. +27
    -0
      test/web/ostatus/ostatus_controller_test.exs

+ 14
- 3
lib/pleroma/web/ostatus/ostatus_controller.ex View File

@@ -1,7 +1,7 @@
defmodule Pleroma.Web.OStatus.OStatusController do
use Pleroma.Web, :controller

alias Pleroma.{User, Activity}
alias Pleroma.{User, Activity, Object}
alias Pleroma.Web.OStatus.{FeedRepresenter, ActivityRepresenter}
alias Pleroma.Repo
alias Pleroma.Web.{OStatus, Federator}
@@ -153,10 +153,21 @@ defmodule Pleroma.Web.OStatus.OStatusController do
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
|> 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

defp represent_activity(conn, _, activity, user) do


+ 27
- 0
test/web/ostatus/ostatus_controller_test.exs View File

@@ -2,6 +2,7 @@ defmodule Pleroma.Web.OStatus.OStatusControllerTest do
use Pleroma.Web.ConnCase
import Pleroma.Factory
alias Pleroma.{User, Repo}
alias Pleroma.Web.CommonAPI
alias Pleroma.Web.OStatus.ActivityRepresenter

test "decodes a salmon", %{conn: conn} do
@@ -167,6 +168,32 @@ defmodule Pleroma.Web.OStatus.OStatusControllerTest do
assert json_response(conn, 200)
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
note_activity = insert(:note_activity)
[_, uuid] = hd(Regex.scan(~r/.+\/([\w-]+)$/, note_activity.data["id"]))


Loading…
Cancel
Save