about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--app/serializers/activitypub/undo_announce_serializer.rb19
-rw-r--r--app/services/batched_remove_status_service.rb2
-rw-r--r--app/services/remove_status_service.rb2
3 files changed, 21 insertions, 2 deletions
diff --git a/app/serializers/activitypub/undo_announce_serializer.rb b/app/serializers/activitypub/undo_announce_serializer.rb
new file mode 100644
index 000000000..839847e22
--- /dev/null
+++ b/app/serializers/activitypub/undo_announce_serializer.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class ActivityPub::UndoAnnounceSerializer < ActiveModel::Serializer
+  attributes :id, :type, :actor
+
+  has_one :object, serializer: ActivityPub::ActivitySerializer
+
+  def id
+    [ActivityPub::TagManager.instance.uri_for(object.account), '#announces/', object.id, '/undo'].join
+  end
+
+  def type
+    'Undo'
+  end
+
+  def actor
+    ActivityPub::TagManager.instance.uri_for(object.account)
+  end
+end
diff --git a/app/services/batched_remove_status_service.rb b/app/services/batched_remove_status_service.rb
index c90f4401d..e9e22298d 100644
--- a/app/services/batched_remove_status_service.rb
+++ b/app/services/batched_remove_status_service.rb
@@ -140,7 +140,7 @@ class BatchedRemoveStatusService < BaseService
 
     @activity_json[status.id] = sign_json(status, ActiveModelSerializers::SerializableResource.new(
       status,
-      serializer: ActivityPub::DeleteSerializer,
+      serializer: status.reblog? ? ActivityPub::UndoAnnounceSerializer : ActivityPub::DeleteSerializer,
       adapter: ActivityPub::Adapter
     ).as_json)
   end
diff --git a/app/services/remove_status_service.rb b/app/services/remove_status_service.rb
index 62eea677f..434c9de84 100644
--- a/app/services/remove_status_service.rb
+++ b/app/services/remove_status_service.rb
@@ -81,7 +81,7 @@ class RemoveStatusService < BaseService
   def activity_json
     @activity_json ||= ActiveModelSerializers::SerializableResource.new(
       @status,
-      serializer: ActivityPub::DeleteSerializer,
+      serializer: @status.reblog? ? ActivityPub::UndoAnnounceSerializer : ActivityPub::DeleteSerializer,
       adapter: ActivityPub::Adapter
     ).as_json
   end