Class: FileScanJob

Inherits:
ApplicationJob
  • Object
show all
Defined in:
lib/generators/rails_template18f/active_storage/templates/app/jobs/file_scan_job.rb

Instance Method Summary collapse

Instance Method Details

#connectionObject



25
26
27
28
29
30
31
32
# File 'lib/generators/rails_template18f/active_storage/templates/app/jobs/file_scan_job.rb', line 25

def connection
  @connection ||= Faraday.new(
    url: ENV["CLAMAV_API_URL"],
    ssl: {verify: false}
  ) do |f|
    f.request :multipart
  end
end

#perform(file_upload) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/generators/rails_template18f/active_storage/templates/app/jobs/file_scan_job.rb', line 4

def perform(file_upload)
  return if file_upload.nil? || file_upload.clean?
  file_upload.open do |file|
    payload = {file: Faraday::Multipart::FilePart.new(
      file,
      file_upload.content_type,
      file_upload.filename
    )}
    response = connection.post("/scan", payload)
    if response.success?
      file_upload.update_columns scan_status: "scanned", updated_at: Time.now
    else
      logger.error "File Scan for #{file_upload.id} failed: #{response.body}"
      file_upload.update_columns scan_status: "quarantined", updated_at: Time.now
    end
  end
rescue => ex
  file_upload&.update_columns scan_status: "scan_failed", updated_at: Time.now
  raise ex
end