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
--- /dev/null
+{
+ "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"
+ }
+ ]
+}
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
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