commit: 884b085f534b02c664bcddd3a2fefcad6d4e5cc4
parent: 2a2698e4501094ca52b8b166c2c51fab26ce7427
Author: Eugen Rochko <eugen@zeonfederated.com>
Date: Sat, 26 Aug 2017 16:10:35 +0200
Use Tombstone and _:atomUri in Delete activities as fallback (#4704)
Diffstat:
2 files changed, 21 insertions(+), 6 deletions(-)
diff --git a/app/lib/activitypub/activity/delete.rb b/app/lib/activitypub/activity/delete.rb
@@ -2,7 +2,8 @@
class ActivityPub::Activity::Delete < ActivityPub::Activity
def perform
- status = Status.find_by(uri: object_uri, account: @account)
+ status = Status.find_by(uri: object_uri, account: @account)
+ status ||= Status.find_by(uri: @object['_:atomUri'], account: @account) if @object.is_a?(Hash) && @object['_:atomUri'].present?
if status.nil?
delete_later!(object_uri)
diff --git a/app/serializers/activitypub/delete_serializer.rb b/app/serializers/activitypub/delete_serializer.rb
@@ -1,8 +1,26 @@
# frozen_string_literal: true
class ActivityPub::DeleteSerializer < ActiveModel::Serializer
+ class TombstoneSerializer < ActiveModel::Serializer
+ attributes :id, :type
+ attribute :atom_uri, key: '_:atomUri'
+
+ def id
+ ActivityPub::TagManager.instance.uri_for(object)
+ end
+
+ def type
+ 'Tombstone'
+ end
+
+ def atom_uri
+ ::TagManager.instance.uri_for(object)
+ end
+ end
+
attributes :id, :type, :actor
- attribute :virtual_object, key: :object
+
+ has_one :object, serializer: TombstoneSerializer
def id
[ActivityPub::TagManager.instance.uri_for(object), '#delete'].join
@@ -15,8 +33,4 @@ class ActivityPub::DeleteSerializer < ActiveModel::Serializer
def actor
ActivityPub::TagManager.instance.uri_for(object.account)
end
-
- def virtual_object
- ActivityPub::TagManager.instance.uri_for(object)
- end
end