Fix tootctl self-destruct not sending Delete activities for recently-suspended accounts (#16688)
* Do not block existing users' emails on self-destruct That is wasteful and unintuitive * Do not close registrations when running tootctl self-destruct with --dry-run * Close registrations on self-destruct regardless of known remote accounts * Fix tootctl self-destruct not sending Deletes for recently-suspended accounts * Suspend local users even if no remote account is known * Do not show scary confirmation text if ran with --dry-run
This commit is contained in:
		
							parent
							
								
									216570ad98
								
							
						
					
					
						commit
						959f7fc580
					
				
							
								
								
									
										14
									
								
								lib/cli.rb
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								lib/cli.rb
									
									
									
									
									
								
							@ -94,17 +94,22 @@ module Mastodon
 | 
			
		||||
 | 
			
		||||
      exit(1) unless prompt.ask('Type in the domain of the server to confirm:', required: true) == Rails.configuration.x.local_domain
 | 
			
		||||
 | 
			
		||||
      unless options[:dry_run]
 | 
			
		||||
        prompt.warn('This operation WILL NOT be reversible. It can also take a long time.')
 | 
			
		||||
        prompt.warn('While the data won\'t be erased locally, the server will be in a BROKEN STATE afterwards.')
 | 
			
		||||
        prompt.warn('A running Sidekiq process is required. Do not shut it down until queues clear.')
 | 
			
		||||
 | 
			
		||||
        exit(1) if prompt.no?('Are you sure you want to proceed?')
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      inboxes   = Account.inboxes
 | 
			
		||||
      processed = 0
 | 
			
		||||
      dry_run   = options[:dry_run] ? ' (DRY RUN)' : ''
 | 
			
		||||
 | 
			
		||||
      Setting.registrations_mode = 'none' unless options[:dry_run]
 | 
			
		||||
 | 
			
		||||
      if inboxes.empty?
 | 
			
		||||
        Account.local.without_suspended.in_batches.update_all(suspended_at: Time.now.utc, suspension_origin: :local) unless options[:dry_run]
 | 
			
		||||
        prompt.ok('It seems like your server has not federated with anything')
 | 
			
		||||
        prompt.ok('You can shut it down and delete it any time')
 | 
			
		||||
        return
 | 
			
		||||
@ -112,9 +117,7 @@ module Mastodon
 | 
			
		||||
 | 
			
		||||
      prompt.warn('Do NOT interrupt this process...')
 | 
			
		||||
 | 
			
		||||
      Setting.registrations_mode = 'none'
 | 
			
		||||
 | 
			
		||||
      Account.local.without_suspended.find_each do |account|
 | 
			
		||||
      delete_account = ->(account) do
 | 
			
		||||
        payload = ActiveModelSerializers::SerializableResource.new(
 | 
			
		||||
          account,
 | 
			
		||||
          serializer: ActivityPub::DeleteActorSerializer,
 | 
			
		||||
@ -128,12 +131,15 @@ module Mastodon
 | 
			
		||||
            [json, account.id, inbox_url]
 | 
			
		||||
          end
 | 
			
		||||
 | 
			
		||||
          account.suspend!
 | 
			
		||||
          account.suspend!(block_email: false)
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        processed += 1
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      Account.local.without_suspended.find_each { |account| delete_account.call(account) }
 | 
			
		||||
      Account.local.suspended.joins(:deletion_request).find_each { |account| delete_account.call(account) }
 | 
			
		||||
 | 
			
		||||
      prompt.ok("Queued #{inboxes.size * processed} items into Sidekiq for #{processed} accounts#{dry_run}")
 | 
			
		||||
      prompt.ok('Wait until Sidekiq processes all items, then you can shut everything down and delete the data')
 | 
			
		||||
    rescue TTY::Reader::InputInterrupt
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user