class VirusTotal::Client::Base
Constants
- BASE_URL
- CONVERT_TABLE
- HOST
- VERSION
Attributes
key[R]
Public Class Methods
new(key: ENV["VIRUSTOTAL_API_KEY"])
click to toggle source
# File lib/virustotal/clients/base.rb, line 25 def initialize(key: ENV["VIRUSTOTAL_API_KEY"]) @key = key raise ArgumentError, "No key has been found or provided!" unless key? end
Private Instance Methods
_delete(path, params = {}, &block)
click to toggle source
# File lib/virustotal/clients/base.rb, line 131 def _delete(path, params = {}, &block) delete = Net::HTTP::Delete.new(url_for(path)) delete.body = JSON.generate(params) if params request(delete, &block) end
_get(path, params = {}, &block)
click to toggle source
# File lib/virustotal/clients/base.rb, line 98 def _get(path, params = {}, &block) uri = url_for(path) uri.query = URI.encode_www_form(params) get = Net::HTTP::Get.new(uri) request(get, &block) end
_patch(path, params = {}, &block)
click to toggle source
# File lib/virustotal/clients/base.rb, line 124 def _patch(path, params = {}, &block) patch = Net::HTTP::Patch.new(url_for(path)) patch.body = JSON.generate(params) if params request(patch, &block) end
_post(path, params = {}, &block)
click to toggle source
# File lib/virustotal/clients/base.rb, line 106 def _post(path, params = {}, &block) post = Net::HTTP::Post.new(url_for(path)) post.body = JSON.generate(params) request(post, &block) end
_post_with_file(path, file:, filename:, &block)
click to toggle source
# File lib/virustotal/clients/base.rb, line 113 def _post_with_file(path, file:, filename:, &block) post = Net::HTTP::Post.new(url_for(path)) data = [ ["file", file, { "filename": filename }], ] post.set_form(data, "multipart/form-data") request(post, &block) end
https_options()
click to toggle source
# File lib/virustotal/clients/base.rb, line 40 def https_options if proxy = ENV["HTTPS_PROXY"] || ENV["https_proxy"] uri = URI(proxy) { proxy_address: uri.hostname, proxy_port: uri.port, proxy_from_env: false, use_ssl: true } else { use_ssl: true } end end
key?()
click to toggle source
# File lib/virustotal/clients/base.rb, line 32 def key? !key.nil? end
klass()
click to toggle source
# File lib/virustotal/clients/base.rb, line 142 def klass self.class.to_s.split("::").last.to_s.downcase.to_sym end
name()
click to toggle source
# File lib/virustotal/clients/base.rb, line 146 def name CONVERT_TABLE.fetch klass end
raise_error(code, message)
click to toggle source
# File lib/virustotal/clients/base.rb, line 54 def raise_error(code, message) code = code.to_s.to_sym table = { "400": BadRequestError, "401": AuthenticationRequiredError, "403": ForbiddenError, "404": NotFoundError, "409": AlreadyExistsError, "429": QuotaExceededError, "503": TransientError, } raise Error, "Unsupported response code returned: #{code} - #{message}" unless table.key?(code) klass = table[code] raise klass, message end
request(req) { |json| ... }
click to toggle source
# File lib/virustotal/clients/base.rb, line 72 def request(req) Net::HTTP.start(HOST, 443, https_options) do |http| req["x-apikey"] = key response = http.request(req) code = response.code.to_i body = response.body json = JSON.parse(body) if response["Content-Type"].to_s.include?("application/json") message = json ? json.dig("message") : body case code when 200 if json yield json else yield body end when 302 yield response["Location"] else raise_error code, message end end end
to_id(id)
click to toggle source
# File lib/virustotal/clients/base.rb, line 138 def to_id(id) id end
url_for(path)
click to toggle source
# File lib/virustotal/clients/base.rb, line 36 def url_for(path) URI(BASE_URL + path) end