Use Tombstone and _:atomUri in Delete activities as fallback (#4704)

master
Eugen Rochko 7 years ago committed by GitHub
parent 2a2698e450
commit 884b085f53
  1. 3
      app/lib/activitypub/activity/delete.rb
  2. 24
      app/serializers/activitypub/delete_serializer.rb

@ -2,7 +2,8 @@
class ActivityPub::Activity::Delete < ActivityPub::Activity class ActivityPub::Activity::Delete < ActivityPub::Activity
def perform 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? if status.nil?
delete_later!(object_uri) delete_later!(object_uri)

@ -1,8 +1,26 @@
# frozen_string_literal: true # frozen_string_literal: true
class ActivityPub::DeleteSerializer < ActiveModel::Serializer 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 attributes :id, :type, :actor
attribute :virtual_object, key: :object
has_one :object, serializer: TombstoneSerializer
def id def id
[ActivityPub::TagManager.instance.uri_for(object), '#delete'].join [ActivityPub::TagManager.instance.uri_for(object), '#delete'].join
@ -15,8 +33,4 @@ class ActivityPub::DeleteSerializer < ActiveModel::Serializer
def actor def actor
ActivityPub::TagManager.instance.uri_for(object.account) ActivityPub::TagManager.instance.uri_for(object.account)
end end
def virtual_object
ActivityPub::TagManager.instance.uri_for(object)
end
end end

Loading…
Cancel
Save