diff --git a/app/jobs/onceoff/fix_invalid_upload_extensions.rb b/app/jobs/onceoff/fix_invalid_upload_extensions.rb deleted file mode 100644 index a5a6f98921faf..0000000000000 --- a/app/jobs/onceoff/fix_invalid_upload_extensions.rb +++ /dev/null @@ -1,9 +0,0 @@ -# frozen_string_literal: true - -module Jobs - class FixInvalidUploadExtensions < ::Jobs::Onceoff - def execute_onceoff(args) - UploadFixer.fix_all_extensions - end - end -end diff --git a/lib/tasks/uploads.rake b/lib/tasks/uploads.rake index 3680307404f2c..b76fde48d3cc8 100644 --- a/lib/tasks/uploads.rake +++ b/lib/tasks/uploads.rake @@ -507,10 +507,6 @@ task "uploads:analyze", %i[cache_path limit] => :environment do |_, args| puts "Duration: #{Time.zone.now - now} seconds" end -task "uploads:fix_incorrect_extensions" => :environment do - UploadFixer.fix_all_extensions -end - task "uploads:recover_from_tombstone" => :environment do Rake::Task["uploads:recover"].invoke end diff --git a/lib/upload_fixer.rb b/lib/upload_fixer.rb deleted file mode 100644 index 799824b689537..0000000000000 --- a/lib/upload_fixer.rb +++ /dev/null @@ -1,80 +0,0 @@ -# frozen_string_literal: true - -class UploadFixer - def self.fix_all_extensions - Upload - .where("uploads.extension IS NOT NULL") - .find_each { |upload| fix_extension_on_upload(upload) } - end - - def self.fix_extension_on_upload(upload) - is_external = Discourse.store.external? - previous_url = upload.url.dup - - source = - if is_external - "https:#{previous_url}" - else - Discourse.store.path_for(upload) - end - - correct_extension = FastImage.type(source).to_s.downcase - current_extension = upload.extension.to_s.downcase - - if correct_extension.present? - correct_extension = "jpg" if correct_extension == "jpeg" - current_extension = "jpg" if current_extension == "jpeg" - - if correct_extension != current_extension - new_filename = change_extension(upload.original_filename, correct_extension) - - new_url = change_extension(previous_url, correct_extension) - - if is_external - new_url = "/#{new_url}" - source = Discourse.store.get_path_for_upload(upload) - destination = change_extension(source, correct_extension) - - Discourse.store.copy_file(previous_url, source, destination) - - upload.update!( - original_filename: new_filename, - url: new_url, - extension: correct_extension, - ) - - DbHelper.remap(previous_url, upload.url) - Discourse.store.remove_file(previous_url, source) - else - destination = change_extension(source, correct_extension) - FileUtils.copy(source, destination) - - upload.update!( - original_filename: new_filename, - url: new_url, - extension: correct_extension, - ) - - DbHelper.remap(previous_url, upload.url) - - tombstone_path = source.sub("/uploads/", "/uploads/tombstone/") - FileUtils.mkdir_p(File.dirname(tombstone_path)) - - FileUtils.move(source, tombstone_path) - end - end - end - rescue => e - STDERR.puts "Skipping upload: failed to correct extension on upload id: #{upload.id} #{current_extension} => #{correct_extension}" - STDERR.puts e - end - - private - - def self.change_extension(path, extension) - pathname = Pathname.new(path) - dirname = pathname.dirname.to_s != "." ? "#{pathname.dirname}/" : "" - basename = File.basename(path, File.extname(path)) - "#{dirname}#{basename}.#{extension}" - end -end