diff options
author | Roger Braun <roger@rogerbraun.net> | 2017-08-01 17:05:07 +0200 |
---|---|---|
committer | Roger Braun <roger@rogerbraun.net> | 2017-08-01 17:05:07 +0200 |
commit | f226f46a097b6b87a87ce1ead07383e8f83ad8ea (patch) | |
tree | a40146cb739690124fe44397dda6953129649cb5 /lib | |
parent | 558ab6e74e631842e39002dffdb99a2867b5acbd (diff) | |
download | pleroma-f226f46a097b6b87a87ce1ead07383e8f83ad8ea.tar.gz |
Add basic incoming deletions.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pleroma/activity.ex | 8 | ||||
-rw-r--r-- | lib/pleroma/web/ostatus/handlers/delete_handler.ex | 14 | ||||
-rw-r--r-- | lib/pleroma/web/ostatus/ostatus.ex | 4 |
3 files changed, 23 insertions, 3 deletions
diff --git a/lib/pleroma/activity.ex b/lib/pleroma/activity.ex index 40e14005b..0b7188aba 100644 --- a/lib/pleroma/activity.ex +++ b/lib/pleroma/activity.ex @@ -15,9 +15,13 @@ defmodule Pleroma.Activity do where: fragment("(?)->>'id' = ?", activity.data, ^to_string(ap_id))) end + def all_by_object_ap_id_q(ap_id) do + from activity in Activity, + where: fragment("(?)->'object'->>'id' = ?", activity.data, ^to_string(ap_id)) + end + def all_by_object_ap_id(ap_id) do - Repo.all(from activity in Activity, - where: fragment("(?)->'object'->>'id' = ?", activity.data, ^to_string(ap_id))) + Repo.all(all_by_object_ap_id_q(ap_id)) end def get_create_activity_by_object_ap_id(ap_id) do diff --git a/lib/pleroma/web/ostatus/handlers/delete_handler.ex b/lib/pleroma/web/ostatus/handlers/delete_handler.ex new file mode 100644 index 000000000..2e5f9469b --- /dev/null +++ b/lib/pleroma/web/ostatus/handlers/delete_handler.ex @@ -0,0 +1,14 @@ +defmodule Pleroma.Web.OStatus.DeleteHandler do + require Logger + alias Pleroma.Web.{XML, OStatus} + alias Pleroma.{Activity, Object, Repo} + + def handle_delete(entry, doc \\ nil) do + with id <- XML.string_from_xpath("//id", entry), + object when not is_nil(object) <- Object.get_by_ap_id(id) do + Repo.delete(object) + Repo.delete_all(Activity.all_by_object_ap_id_q(id)) + nil + end + end +end diff --git a/lib/pleroma/web/ostatus/ostatus.ex b/lib/pleroma/web/ostatus/ostatus.ex index d9a5924dc..469d4031c 100644 --- a/lib/pleroma/web/ostatus/ostatus.ex +++ b/lib/pleroma/web/ostatus/ostatus.ex @@ -9,7 +9,7 @@ defmodule Pleroma.Web.OStatus do alias Pleroma.Web.ActivityPub.ActivityPub alias Pleroma.Web.ActivityPub.Utils alias Pleroma.Web.{WebFinger, Websub} - alias Pleroma.Web.OStatus.{FollowHandler, NoteHandler} + alias Pleroma.Web.OStatus.{FollowHandler, NoteHandler, DeleteHandler} def feed_path(user) do "#{user.ap_id}/feed.atom" @@ -34,6 +34,8 @@ defmodule Pleroma.Web.OStatus do try do case verb do + 'http://activitystrea.ms/schema/1.0/delete' -> + with {:ok, activity} <- DeleteHandler.handle_delete(entry, doc), do: activity 'http://activitystrea.ms/schema/1.0/follow' -> with {:ok, activity} <- FollowHandler.handle(entry, doc), do: activity 'http://activitystrea.ms/schema/1.0/share' -> |