Use Tombstone and _:atomUri in Delete activities as fallback (#4704)
This commit is contained in:
		
							parent
							
								
									6025762ba2
								
							
						
					
					
						commit
						b2e1379427
					
				
					 2 changed files with 21 additions and 6 deletions
				
			
		| 
						 | 
					@ -3,6 +3,7 @@
 | 
				
			||||||
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…
	
		Reference in a new issue