Set unknown attachment type when adding domain blocks (#2605)
Follow-up to #2599. When a domain block with `reject_media` is added or `rake mastodon:media:remove_remote` is invoked, mastodon deletes the locally cached attachments and avatars but does not reflect that change in the database, causing the `file` fields to still have values. This change persists the deletion in the database and sets the attachment type to unknown. This also introduces a one-off rake task that sets all attachments without a local file to the "unknown" type. The upgrade notes for the next release should contain a post-upgrade step with `rake mastodon:media:set_unknown`.
This commit is contained in:
		
				
					committed by
					
						
						Eugen Rochko
					
				
			
			
				
	
			
			
			
						parent
						
							27301312a6
						
					
				
				
					commit
					197af5de70
				
			@@ -39,12 +39,15 @@ class BlockDomainService < BaseService
 | 
				
			|||||||
    blocked_domain_accounts.find_each do |account|
 | 
					    blocked_domain_accounts.find_each do |account|
 | 
				
			||||||
      account.avatar.destroy
 | 
					      account.avatar.destroy
 | 
				
			||||||
      account.header.destroy
 | 
					      account.header.destroy
 | 
				
			||||||
 | 
					      account.save
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def clear_account_attachments
 | 
					  def clear_account_attachments
 | 
				
			||||||
    media_from_blocked_domain.find_each do |attachment|
 | 
					    media_from_blocked_domain.find_each do |attachment|
 | 
				
			||||||
      attachment.file.destroy
 | 
					      attachment.file.destroy
 | 
				
			||||||
 | 
					      attachment.type = :unknown
 | 
				
			||||||
 | 
					      attachment.save
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -53,8 +53,18 @@ namespace :mastodon do
 | 
				
			|||||||
    task remove_remote: :environment do
 | 
					    task remove_remote: :environment do
 | 
				
			||||||
      MediaAttachment.where.not(remote_url: '').where('created_at < ?', 1.week.ago).find_each do |media|
 | 
					      MediaAttachment.where.not(remote_url: '').where('created_at < ?', 1.week.ago).find_each do |media|
 | 
				
			||||||
        media.file.destroy
 | 
					        media.file.destroy
 | 
				
			||||||
 | 
					        media.type = :unknown
 | 
				
			||||||
 | 
					        media.save
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    desc 'Set unknown attachment type for remote-only attachments'
 | 
				
			||||||
 | 
					    task set_unknown: :environment do
 | 
				
			||||||
 | 
					      Rails.logger.debug 'Setting unknown attachment type for remote-only attachments...'
 | 
				
			||||||
 | 
					      # rubocop:disable Rails/SkipsModelValidations
 | 
				
			||||||
 | 
					      MediaAttachment.where(file_file_name: nil).where.not(type: :unknown).in_batches.update_all(type: :unknown)
 | 
				
			||||||
 | 
					      Rails.logger.debug 'Done!'
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  namespace :push do
 | 
					  namespace :push do
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user