Push 3
Remove HTTPParty from depends, gonna use the NET/HTTP library from the STDLib, even though it needs more coding to make work. Replace HTTPParty code with NET/HTTP code. Move opswat_client and virus_total_client into their own directories for organization
This commit is contained in:
parent
a841b4bce7
commit
4c2f190bed
2
Gemfile
2
Gemfile
|
@ -8,6 +8,4 @@ gem 'sequel', '~> 5.77'
|
|||
|
||||
gem 'sqlite3', '~> 1.7'
|
||||
|
||||
gem 'httpparty', '~> 0.2.0'
|
||||
|
||||
gem 'dotenv', '~> 2.8'
|
||||
|
|
47
lib/api_clients/virus_total/virus_total_client.rb
Normal file
47
lib/api_clients/virus_total/virus_total_client.rb
Normal file
|
@ -0,0 +1,47 @@
|
|||
# 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
|
|
@ -1,18 +0,0 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'httparty'
|
||||
require 'yaml'
|
||||
|
||||
# Main class for handling communication with the Virus Total 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/'
|
||||
|
||||
def self.scan_url(url)
|
||||
response = HTTParty.post("#{BASE_URL}urls",
|
||||
headers: { 'x-apikey' => API_KEY },
|
||||
body: { url: })
|
||||
# TODO: Implement proper response handling
|
||||
{ is_safe: response.ok? } # Placeholder: Implement based on actual API response
|
||||
end
|
||||
end
|
|
@ -1,13 +1,16 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'httparty'
|
||||
require_relative 'api_clients/virus_total_client'
|
||||
require_relative 'api_clients/virus_total/virus_total_client'
|
||||
require_relative 'api_clients/opswat/opswat_client'
|
||||
|
||||
# Main class for sending files/links to the security vendors, and getting the response.
|
||||
class VirusScanner
|
||||
def self.scan_file(url)
|
||||
response = VirusTotalClient.scan_url(url)
|
||||
# TODO: Implement proper return
|
||||
response['is_safe']
|
||||
def self.scan_file_with_virustotal(file_path)
|
||||
VirusTotalClient.scan_file(file_path)
|
||||
end
|
||||
|
||||
def self.scan_file_with_opswat(file_path)
|
||||
OpswatClient.scan_file(file_path)
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue
Block a user