Просмотр исходного кода

Split create activity specifics from update_outbox

tags/v0.9.9
sxsdv1 5 лет назад
Родитель
Сommit
551c3d9391
2 измененных файлов: 44 добавлений и 15 удалений
  1. +27
    -15
      lib/pleroma/web/activity_pub/activity_pub_controller.ex
  2. +17
    -0
      test/web/activity_pub/activity_pub_controller_test.exs

+ 27
- 15
lib/pleroma/web/activity_pub/activity_pub_controller.ex Просмотреть файл

@@ -165,9 +165,29 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubController do
end
end

def handle_user_activity(user, %{"type" => "Create"} = params) do
object =
params["object"]
|> Map.merge(Map.take(params, ["to", "cc"]))
|> Map.put("attributedTo", user.ap_id())
|> Transmogrifier.fix_object()

ActivityPub.create(%{
to: params["to"],
actor: user,
context: object["context"],
object: object,
additional: Map.take(params, ["cc"])
})
end

def handle_user_activity(_, _) do
{:error, "Unhandled activity type"}
end

def update_outbox(
%{assigns: %{user: user}} = conn,
%{"nickname" => nickname, "type" => "Create"} = params
%{"nickname" => nickname} = params
) do
if nickname == user.nickname do
actor = user.ap_id()
@@ -178,24 +198,16 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubController do
|> Map.put("actor", actor)
|> Transmogrifier.fix_addressing()

object =
params["object"]
|> Map.merge(Map.take(params, ["to", "cc"]))
|> Map.put("attributedTo", actor)
|> Transmogrifier.fix_object()

with {:ok, %Activity{} = activity} <-
ActivityPub.create(%{
to: params["to"],
actor: user,
context: object["context"],
object: object,
additional: Map.take(params, ["cc"])
}) do
with {:ok, %Activity{} = activity} <- handle_user_activity(user, params) do
conn
|> put_status(:created)
|> put_resp_header("location", activity.data["id"])
|> json(activity.data)
else
{:error, message} ->
conn
|> put_status(:bad_request)
|> json(message)
end
else
conn


+ 17
- 0
test/web/activity_pub/activity_pub_controller_test.exs Просмотреть файл

@@ -192,6 +192,23 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubControllerTest do
result = json_response(conn, 201)
assert Activity.get_by_ap_id(result["id"])
end

test "it rejects an incoming activity with bogus type", %{conn: conn} do
data = File.read!("test/fixtures/activitypub-client-post-activity.json") |> Poison.decode!()
user = insert(:user)

data =
data
|> Map.put("type", "BadType")

conn =
conn
|> assign(:user, user)
|> put_req_header("content-type", "application/activity+json")
|> post("/users/#{user.nickname}/outbox", data)

assert json_response(conn, 400)
end
end

describe "/users/:nickname/followers" do


Загрузка…
Отмена
Сохранить