Handle incoming deletes.
authorlain <lain@soykaf.club>
Sat, 3 Mar 2018 17:37:40 +0000 (18:37 +0100)
committerlain <lain@soykaf.club>
Sat, 3 Mar 2018 17:38:40 +0000 (18:38 +0100)
lib/pleroma/web/activity_pub/transmogrifier.ex
test/fixtures/mastodon-delete.json [new file with mode: 0644]
test/web/activity_pub/transmogrifier_test.exs

index f3e869f4d0ac218b40ec30b1243a35e1e5d15f3d..54468b5f9d5f9be8b346e5a3913251969765419c 100644 (file)
@@ -138,6 +138,21 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
     end
   end
 
+  # TODO: Make secure.
+  def handle_incoming(%{"type" => "Delete", "object" => object_id, "actor" => actor, "id" => id} = data) do
+    object_id = case object_id do
+                  %{"id" => id} -> id
+                  id -> id
+                end
+    with %User{} = actor <- User.get_or_fetch_by_ap_id(actor),
+         {:ok, object} <- get_obj_helper(object_id) || ActivityPub.fetch_object_from_id(object_id),
+         {:ok, activity} <- ActivityPub.delete(object, false) do
+      {:ok, activity}
+    else
+      e -> :error
+    end
+  end
+
   # TODO
   # Accept
   # Undo
diff --git a/test/fixtures/mastodon-delete.json b/test/fixtures/mastodon-delete.json
new file mode 100644 (file)
index 0000000..87a5820
--- /dev/null
@@ -0,0 +1,33 @@
+{
+  "type": "Delete",
+  "signature": {
+    "type": "RsaSignature2017",
+    "signatureValue": "cw0RlfNREf+5VdsOYcCBDrv521eiLsDTAYNHKffjF0bozhCnOh+wHkFik7WamUk$
+uEiN4L2H6vPlGRprAZGRhEwgy+A7rIFQNmLrpW5qV5UNVI/2F7kngEHqZQgbQYj9hW+5GMYmPkHdv3D72ZefGw$
+4Xa2NBLGFpAjQllfzt7kzZLKKY2DM99FdUa64I2Wj3iD04Hs23SbrUdAeuGk/c1Cg6bwGNG4vxoiwn1jikgJLA$
+NAlSGjsRGdR7LfbC7GqWWsW3cSNsLFPoU6FyALjgTrrYoHiXe0QHggw+L3yMLfzB2S/L46/VRbyb+WDKMBIXUL$
+5owmzHSi6e/ZtCI3w==",
+    "creator": "http://mastodon.example.org/users/gargron#main-key",                       "created": "2018-03-03T16:24:11Z"
+  },
+  "object": {
+    "type": "Tombstone",
+    "id": "http://mastodon.example.org/users/gargron/statuses/99620895606148759",
+    "atomUri": "http://mastodon.example.org/users/gargron/statuses/99620895606148759"
+  },
+  "id": "http://mastodon.example.org/users/gargron/statuses/99620895606148759#delete",
+  "actor": "http://mastodon.example.org/users/gargron",
+  "@context": [
+    {
+      "toot": "http://joinmastodon.org/ns#",
+      "sensitive": "as:sensitive",
+      "ostatus": "http://ostatus.org#",
+      "movedTo": "as:movedTo",
+      "manuallyApprovesFollowers": "as:manuallyApprovesFollowers",
+      "inReplyToAtomUri": "ostatus:inReplyToAtomUri",
+      "conversation": "ostatus:conversation",
+      "atomUri": "ostatus:atomUri",
+      "Hashtag": "as:Hashtag",
+      "Emoji": "toot:Emoji"
+    }
+  ]
+}
index 2803f1a0533cd10b42df0f903181e3ce025b63b6..c0ee209f1c84979557cbf018825a3c7859a3fb85 100644 (file)
@@ -148,6 +148,23 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do
       assert user.info["banner"]["url"] == [%{"href" => "https://cd.niu.moe/accounts/headers/000/033/323/original/850b3448fa5fd477.png"}]
       assert user.bio == "<p>Some bio</p>"
     end
+
+    test "it works for incoming deletes" do
+      activity = insert(:note_activity)
+      data = File.read!("test/fixtures/mastodon-delete.json")
+      |> Poison.decode!
+
+      object = data["object"]
+      |> Map.put("id", activity.data["object"]["id"])
+
+      data = data
+      |> Map.put("object", object)
+      |> Map.put("actor", activity.data["actor"])
+
+      {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data)
+
+      refute Repo.get(Activity, activity.id)
+    end
   end
 
   describe "prepare outgoing" do
@@ -256,18 +273,5 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do
       refute Repo.get(WebsubClientSubscription, ws.id)
       assert Repo.get(WebsubClientSubscription, ws2.id)
     end
-
-    test "it deletes all websub server subscriptions with the server as callback" do
-      subscription = %WebsubClientSubscription{topic: "https://niu.moe/users/rye.atom"}
-      {:ok, ws} = Repo.insert(subscription)
-
-      subscription = %WebsubClientSubscription{topic: "https://niu.moe/users/pasty.atom"}
-      {:ok, ws2} = Repo.insert(subscription)
-
-      Transmogrifier.maybe_retire_websub("https://niu.moe/users/rye")
-
-      refute Repo.get(WebsubClientSubscription, ws.id)
-      assert Repo.get(WebsubClientSubscription, ws2.id)
-    end
   end
 end