@ -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
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 ( '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 ( '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.' )
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?' )
exit ( 1 ) if prompt . no? ( 'Are you sure you want to proceed?' )
end
inboxes = Account . inboxes
inboxes = Account . inboxes
processed = 0
processed = 0
dry_run = options [ :dry_run ] ? ' (DRY RUN)' : ''
dry_run = options [ :dry_run ] ? ' (DRY RUN)' : ''
Setting . registrations_mode = 'none' unless options [ :dry_run ]
if inboxes . empty?
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 ( 'It seems like your server has not federated with anything' )
prompt . ok ( 'You can shut it down and delete it any time' )
prompt . ok ( 'You can shut it down and delete it any time' )
return
return
@ -112,9 +117,7 @@ module Mastodon
prompt . warn ( 'Do NOT interrupt this process...' )
prompt . warn ( 'Do NOT interrupt this process...' )
Setting . registrations_mode = 'none'
delete_account = - > ( account ) do
Account . local . without_suspended . find_each do | account |
payload = ActiveModelSerializers :: SerializableResource . new (
payload = ActiveModelSerializers :: SerializableResource . new (
account ,
account ,
serializer : ActivityPub :: DeleteActorSerializer ,
serializer : ActivityPub :: DeleteActorSerializer ,
@ -128,12 +131,15 @@ module Mastodon
[ json , account . id , inbox_url ]
[ json , account . id , inbox_url ]
end
end
account . suspend!
account . suspend! ( block_email : false )
end
end
processed += 1
processed += 1
end
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 ( " 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' )
prompt . ok ( 'Wait until Sidekiq processes all items, then you can shut everything down and delete the data' )
rescue TTY :: Reader :: InputInterrupt
rescue TTY :: Reader :: InputInterrupt