Fix deletes not being signed in authorized fetch mode (#17484)
Fix #17483
This commit is contained in:
		@@ -1,13 +1,21 @@
 | 
			
		||||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
module Payloadable
 | 
			
		||||
  # @param [ActiveModelSerializers::Model] record
 | 
			
		||||
  # @param [ActiveModelSerializers::Serializer] serializer
 | 
			
		||||
  # @param [Hash] options
 | 
			
		||||
  # @option options [Account] :signer
 | 
			
		||||
  # @option options [String] :sign_with
 | 
			
		||||
  # @option options [Boolean] :always_sign
 | 
			
		||||
  # @return [Hash]
 | 
			
		||||
  def serialize_payload(record, serializer, options = {})
 | 
			
		||||
    signer    = options.delete(:signer)
 | 
			
		||||
    sign_with = options.delete(:sign_with)
 | 
			
		||||
    payload   = ActiveModelSerializers::SerializableResource.new(record, options.merge(serializer: serializer, adapter: ActivityPub::Adapter)).as_json
 | 
			
		||||
    object    = record.respond_to?(:virtual_object) ? record.virtual_object : record
 | 
			
		||||
    signer      = options.delete(:signer)
 | 
			
		||||
    sign_with   = options.delete(:sign_with)
 | 
			
		||||
    always_sign = options.delete(:always_sign)
 | 
			
		||||
    payload     = ActiveModelSerializers::SerializableResource.new(record, options.merge(serializer: serializer, adapter: ActivityPub::Adapter)).as_json
 | 
			
		||||
    object      = record.respond_to?(:virtual_object) ? record.virtual_object : record
 | 
			
		||||
 | 
			
		||||
    if (object.respond_to?(:sign?) && object.sign?) && signer && signing_enabled?
 | 
			
		||||
    if (object.respond_to?(:sign?) && object.sign?) && signer && (always_sign || signing_enabled?)
 | 
			
		||||
      ActivityPub::LinkedDataSignature.new(payload).sign!(signer, sign_with: sign_with)
 | 
			
		||||
    else
 | 
			
		||||
      payload
 | 
			
		||||
 
 | 
			
		||||
@@ -265,7 +265,7 @@ class DeleteAccountService < BaseService
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def delete_actor_json
 | 
			
		||||
    @delete_actor_json ||= Oj.dump(serialize_payload(@account, ActivityPub::DeleteActorSerializer, signer: @account))
 | 
			
		||||
    @delete_actor_json ||= Oj.dump(serialize_payload(@account, ActivityPub::DeleteActorSerializer, signer: @account, always_sign: true))
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def delivery_inboxes
 | 
			
		||||
 
 | 
			
		||||
@@ -95,7 +95,7 @@ class RemoveStatusService < BaseService
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def signed_activity_json
 | 
			
		||||
    @signed_activity_json ||= Oj.dump(serialize_payload(@status, @status.reblog? ? ActivityPub::UndoAnnounceSerializer : ActivityPub::DeleteSerializer, signer: @account))
 | 
			
		||||
    @signed_activity_json ||= Oj.dump(serialize_payload(@status, @status.reblog? ? ActivityPub::UndoAnnounceSerializer : ActivityPub::DeleteSerializer, signer: @account, always_sign: true))
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def remove_reblogs
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user