2024-04-29 00:17:15 +02:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2019-05-02 11:37:35 +02:00
|
|
|
class VirusScannerJob < ApplicationJob
|
2020-09-03 11:00:59 +02:00
|
|
|
# If by the time the job runs the blob has been deleted, ignore the error
|
2020-07-13 14:31:21 +02:00
|
|
|
discard_on ActiveRecord::RecordNotFound
|
2020-09-03 11:00:59 +02:00
|
|
|
# If the file is deleted during the scan, ignore the error
|
|
|
|
discard_on ActiveStorage::FileNotFoundError
|
2021-03-11 18:36:25 +01:00
|
|
|
# If for some reason the file appears invalid, retry for a while
|
2021-04-06 14:59:12 +02:00
|
|
|
retry_on(ActiveStorage::IntegrityError, attempts: 5, wait: 5.seconds) do |job, _error|
|
|
|
|
blob = job.arguments.first
|
2022-12-22 18:20:58 +01:00
|
|
|
blob.update_columns(virus_scan_result: ActiveStorage::VirusScanner::INTEGRITY_ERROR, virus_scanned_at: Time.zone.now)
|
2021-04-06 14:59:12 +02:00
|
|
|
end
|
2021-03-11 18:36:25 +01:00
|
|
|
|
2019-05-02 11:37:35 +02:00
|
|
|
def perform(blob)
|
2022-12-22 18:20:58 +01:00
|
|
|
return if blob.virus_scanner.done?
|
2021-04-06 18:00:54 +02:00
|
|
|
|
2022-12-22 18:20:58 +01:00
|
|
|
blob.update_columns(ActiveStorage::VirusScanner.new(blob).attributes)
|
2021-04-06 18:00:54 +02:00
|
|
|
end
|
2019-05-02 11:37:35 +02:00
|
|
|
end
|