# frozen_string_literal: true require 'net/http' require 'uri' require 'json' require 'yaml' # main class for communication with the VirusTotal API v3 class VirusTotalClient API_KEY = YAML.load_file(File.join(__dir__, '../../config/api_keys.yml'))['virus_total'] BASE_URL = 'https://www.virustotal.com/api/v3/' # Method to scan URLs def self.scan_url(url) uri = URI("#{BASE_URL}urls") request = Net::HTTP::Post.new(uri) request['x-apikey'] = API_KEY request['Content-Type'] = 'application/json' request.body = { url: }.to_json response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http| http.request(request) end # TODO: Implement proper response handling JSON.parse(response.body) end # method to upload files to scan def self.scan_file(file_path) uri = URI("#{BASE_URL}files") request = Net::HTTP::Post.new(uri) request['x-apikey'] = API_KEY request['accept'] = 'application/json' request['Content-Type'] = 'multipart/form-data' form_data = [['file', File.open(file_path)]] request.set_form form_data, 'multipart/form-data' response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http| http.request(request) end # TODO: Implement proper response handling JSON.parse(response.body) # Simplified example; adjust based on actual needs end end