Handle incoming deletes.
This commit is contained in:
parent
1377b2e569
commit
d2ad99298e
|
@ -138,6 +138,21 @@ def handle_incoming(%{"type" => "Update", "object" => %{"type" => "Person"} = ob
|
||||||
end
|
end
|
||||||
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
|
# TODO
|
||||||
# Accept
|
# Accept
|
||||||
# Undo
|
# Undo
|
||||||
|
|
33
test/fixtures/mastodon-delete.json
vendored
Normal file
33
test/fixtures/mastodon-delete.json
vendored
Normal file
|
@ -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"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -148,6 +148,23 @@ test "it works for incoming update activities" do
|
||||||
assert user.info["banner"]["url"] == [%{"href" => "https://cd.niu.moe/accounts/headers/000/033/323/original/850b3448fa5fd477.png"}]
|
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>"
|
assert user.bio == "<p>Some bio</p>"
|
||||||
end
|
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
|
end
|
||||||
|
|
||||||
describe "prepare outgoing" do
|
describe "prepare outgoing" do
|
||||||
|
@ -256,18 +273,5 @@ test "it deletes all websub client subscripitions with the user as topic" do
|
||||||
refute Repo.get(WebsubClientSubscription, ws.id)
|
refute Repo.get(WebsubClientSubscription, ws.id)
|
||||||
assert Repo.get(WebsubClientSubscription, ws2.id)
|
assert Repo.get(WebsubClientSubscription, ws2.id)
|
||||||
end
|
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
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue