Use Tombstone and _:atomUri in Delete activities as fallback (#4704)
This commit is contained in:
		| @ -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) | ||||
|  | ||||
| @ -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 | ||||
|  | ||||
		Reference in New Issue
	
	Block a user