Browse Source

ActivityPubController: Add Mastodon activity compat route.

fix/http_secury_plug
lain 4 years ago
parent
commit
355aa3bdc7
6 changed files with 42 additions and 4 deletions
  1. +2
    -2
      lib/pleroma/web/activity_pub/activity_pub_controller.ex
  2. +4
    -0
      lib/pleroma/web/common_api/utils.ex
  3. +1
    -1
      lib/pleroma/web/ostatus/ostatus_controller.ex
  4. +2
    -1
      lib/pleroma/web/router.ex
  5. +32
    -0
      test/web/activity_pub/activity_pub_controller_test.exs
  6. +1
    -0
      test/web/ostatus/ostatus_controller_test.exs

+ 2
- 2
lib/pleroma/web/activity_pub/activity_pub_controller.ex View File

@@ -102,8 +102,8 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubController do
conn
end

def activity(conn, %{"uuid" => uuid}) do
with ap_id <- o_status_url(conn, :activity, uuid),
def activity(conn, _params) do
with ap_id <- Endpoint.url() <> conn.request_path,
%Activity{} = activity <- Activity.normalize(ap_id),
{_, true} <- {:public?, Visibility.is_public?(activity)} do
conn


+ 4
- 0
lib/pleroma/web/common_api/utils.ex View File

@@ -468,6 +468,8 @@ defmodule Pleroma.Web.CommonAPI.Utils do
|> Enum.map(& &1.ap_id)

recipients ++ subscriber_ids
else
_e -> recipients
end
end

@@ -479,6 +481,8 @@ defmodule Pleroma.Web.CommonAPI.Utils do
|> User.get_followers()
|> Enum.map(& &1.ap_id)
|> Enum.concat(recipients)
else
_e -> recipients
end
end



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

@@ -54,7 +54,7 @@ defmodule Pleroma.Web.OStatus.OStatusController do
end
end

def activity(%{assigns: %{format: format}} = conn, %{"uuid" => _uuid})
def activity(%{assigns: %{format: format}} = conn, _params)
when format in ["json", "activity+json"] do
ActivityPubController.call(conn, :activity)
end


+ 2
- 1
lib/pleroma/web/router.ex View File

@@ -556,8 +556,9 @@ defmodule Pleroma.Web.Router do
get("/notice/:id", OStatus.OStatusController, :notice)
get("/notice/:id/embed_player", OStatus.OStatusController, :notice_player)

# Mastodon compat routes
# Mastodon compatibility routes
get("/users/:nickname/statuses/:id", OStatus.OStatusController, :object)
get("/users/:nickname/statuses/:id/activity", OStatus.OStatusController, :activity)

get("/users/:nickname/feed", Feed.UserController, :feed, as: :user_feed)
get("/users/:nickname", Feed.UserController, :feed_redirect, as: :user_feed)


+ 32
- 0
test/web/activity_pub/activity_pub_controller_test.exs View File

@@ -13,6 +13,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubControllerTest do
alias Pleroma.Object
alias Pleroma.Tests.ObanHelpers
alias Pleroma.User
alias Pleroma.Web.ActivityPub.ActivityPub
alias Pleroma.Web.ActivityPub.ObjectView
alias Pleroma.Web.ActivityPub.Relay
alias Pleroma.Web.ActivityPub.UserView
@@ -193,6 +194,37 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubControllerTest do

assert json_response(conn, 200) == ObjectView.render("object.json", %{object: object})
end

test "it returns a json representation of the activity with accept application/json", %{
conn: conn
} do
{:ok, object} =
%{
"type" => "Note",
"content" => "hey",
"id" => Endpoint.url() <> "/users/raymoo/statuses/999999999",
"actor" => Endpoint.url() <> "/users/raymoo",
"to" => [Pleroma.Constants.as_public()]
}
|> Object.create()

{:ok, activity, _} =
%{
"id" => object.data["id"] <> "/activity",
"type" => "Create",
"object" => object.data["id"],
"actor" => object.data["actor"],
"to" => object.data["to"]
}
|> ActivityPub.persist(local: true)

conn =
conn
|> put_req_header("accept", "application/json")
|> get("/users/raymoo/statuses/999999999/activity")

assert json_response(conn, 200) == ObjectView.render("object.json", %{object: activity})
end
end

describe "/objects/:uuid" do


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

@@ -42,6 +42,7 @@ defmodule Pleroma.Web.OStatus.OStatusControllerTest do

{:ok, activity, _} =
%{
"id" => object.data["id"] <> "/activity",
"type" => "Create",
"object" => object.data["id"],
"actor" => object.data["actor"],


Loading…
Cancel
Save