Fix sending spurious Rejects when processing remote account deletion (#15104)
* Fix sending spurious Rejects when processing remote account deletion * Make skip_side_effects imply skip_activitypub
This commit is contained in:
		
							parent
							
								
									df1653174b
								
							
						
					
					
						commit
						2f6831f318
					
				
					 4 changed files with 8 additions and 4 deletions
				
			
		|  | @ -13,7 +13,7 @@ class ActivityPub::Activity::Delete < ActivityPub::Activity | |||
| 
 | ||||
|   def delete_person | ||||
|     lock_or_return("delete_in_progress:#{@account.id}") do | ||||
|       DeleteAccountService.new.call(@account, reserve_username: false) | ||||
|       DeleteAccountService.new.call(@account, reserve_username: false, skip_activitypub: true) | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|  |  | |||
|  | @ -41,6 +41,7 @@ class DeleteAccountService < BaseService | |||
|   # @option [Boolean] :reserve_email Keep user record. Only applicable for local accounts | ||||
|   # @option [Boolean] :reserve_username Keep account record | ||||
|   # @option [Boolean] :skip_side_effects Side effects are ActivityPub and streaming API payloads | ||||
|   # @option [Boolean] :skip_activitypub Skip sending ActivityPub payloads. Implied by :skip_side_effects | ||||
|   # @option [Time]    :suspended_at Only applicable when :reserve_username is true | ||||
|   def call(account, **options) | ||||
|     @account = account | ||||
|  | @ -52,6 +53,8 @@ class DeleteAccountService < BaseService | |||
|       @options[:skip_side_effects] = true | ||||
|     end | ||||
| 
 | ||||
|     @options[:skip_activitypub] = true if @options[:skip_side_effects] | ||||
| 
 | ||||
|     reject_follows! | ||||
|     purge_user! | ||||
|     purge_profile! | ||||
|  | @ -62,7 +65,7 @@ class DeleteAccountService < BaseService | |||
|   private | ||||
| 
 | ||||
|   def reject_follows! | ||||
|     return if @account.local? || !@account.activitypub? | ||||
|     return if @account.local? || !@account.activitypub? || @options[:skip_activitypub] | ||||
| 
 | ||||
|     # When deleting a remote account, the account obviously doesn't | ||||
|     # actually become deleted on its origin server, i.e. unlike a | ||||
|  |  | |||
|  | @ -145,7 +145,7 @@ class ResolveAccountService < BaseService | |||
|   end | ||||
| 
 | ||||
|   def queue_deletion! | ||||
|     AccountDeletionWorker.perform_async(@account.id, reserve_username: false) | ||||
|     AccountDeletionWorker.perform_async(@account.id, reserve_username: false, skip_activitypub: true) | ||||
|   end | ||||
| 
 | ||||
|   def lock_options | ||||
|  |  | |||
|  | @ -7,7 +7,8 @@ class AccountDeletionWorker | |||
| 
 | ||||
|   def perform(account_id, options = {}) | ||||
|     reserve_username = options.with_indifferent_access.fetch(:reserve_username, true) | ||||
|     DeleteAccountService.new.call(Account.find(account_id), reserve_username: reserve_username, reserve_email: false) | ||||
|     skip_activitypub = options.with_indifferent_access.fetch(:skip_activitypub, false) | ||||
|     DeleteAccountService.new.call(Account.find(account_id), reserve_username: reserve_username, skip_activitypub: skip_activitypub, reserve_email: false) | ||||
|   rescue ActiveRecord::RecordNotFound | ||||
|     true | ||||
|   end | ||||
|  |  | |||
		Reference in a new issue