Sfoglia il codice sorgente

Implement delete activity

tags/v0.9.9
sxsdv1 5 anni fa
parent
commit
4e1cc2bab6
2 ha cambiato i file con 57 aggiunte e 2 eliminazioni
  1. +10
    -0
      lib/pleroma/web/activity_pub/activity_pub_controller.ex
  2. +47
    -2
      test/web/activity_pub/activity_pub_controller_test.exs

+ 10
- 0
lib/pleroma/web/activity_pub/activity_pub_controller.ex Vedi File

@@ -181,6 +181,16 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubController do
})
end

def handle_user_activity(user, %{"type" => "Delete"} = params) do
with %Object{} = object <- Object.normalize(params["object"]),
true <- user.info.is_moderator || user.ap_id == object.data["actor"],
{:ok, delete} <- ActivityPub.delete(object) do
{:ok, delete}
else
_ -> {:error, "Can't delete object"}
end
end

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


+ 47
- 2
test/web/activity_pub/activity_pub_controller_test.exs Vedi File

@@ -6,7 +6,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubControllerTest do
use Pleroma.Web.ConnCase
import Pleroma.Factory
alias Pleroma.Web.ActivityPub.{UserView, ObjectView}
alias Pleroma.{Repo, User}
alias Pleroma.{Object, Repo, User}
alias Pleroma.Activity

setup_all do
@@ -179,7 +179,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubControllerTest do
assert json_response(conn, 403)
end

test "it inserts an incoming activity into the database", %{conn: conn} do
test "it inserts an incoming create activity into the database", %{conn: conn} do
data = File.read!("test/fixtures/activitypub-client-post-activity.json") |> Poison.decode!()
user = insert(:user)

@@ -209,6 +209,51 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubControllerTest do

assert json_response(conn, 400)
end

test "it erects a tombstone when receiving a delete activity", %{conn: conn} do
note_activity = insert(:note_activity)
user = User.get_cached_by_ap_id(note_activity.data["actor"])

data = %{
type: "Delete",
object: %{
id: note_activity.data["object"]["id"]
}
}

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

result = json_response(conn, 201)
assert Activity.get_by_ap_id(result["id"])

object = Object.get_by_ap_id(note_activity.data["object"]["id"])
assert object
assert object.data["type"] == "Tombstone"
end

test "it rejects delete activity of object from other actor", %{conn: conn} do
note_activity = insert(:note_activity)
user = insert(:user)

data = %{
type: "Delete",
object: %{
id: note_activity.data["object"]["id"]
}
}

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


Loading…
Annulla
Salva