class ThreatExpert::Submit

Public Instance Methods

submit(filename, email, headers={}) click to toggle source
# File lib/threatexpert/submit.rb, line 10
def submit(filename, email, headers={})
        uri = URI.parse(@@submiturl)
        http = Net::HTTP.new(uri.host, uri.port)
        headers['User-Agent'] ||= "Ruby/#{RUBY_VERSION} threatexpert gem version #{ThreatExpert::VERSION} (https://github.com/chrislee35/threatexpert)"
        headers['Referer'] ||= @@submiturl
        resp, data = http.get(uri.path, headers)
        cookie = resp.header["set-cookie"] if resp.header["set-cookie"]
        
        doc = Nokogiri::HTML.parse(data)
        forms = doc.xpath('//form')
        inputs = forms[0].xpath('//input')
        params = {}
        inputs.each do |input|
                name = input['name']
                value = input['value']
                if name =~ /Agree/
                        params[name] = 1
                elsif name =~ /Upload/
                        file = File.open(filename)
                        params[name] = UploadIO.new(file, "application/octet-stream", File.basename(filename))
                elsif name =~ /Email/
                        params[name] = email
                elsif name =~ /btnSubmit/
                        params[name+".x"] = rand(100)
                        params[name+".y"] = rand(27)
                else
                        params[name] = value
                end
        end
        
        headers['Referer'] = @@submiturl
        request = Net::HTTP::Post::Multipart.new(uri.path, params)
        headers.each do |name,value|
                request.add_field(name, value)
        end
        response = http.request(request)
        if response.body =~ /The file has been accepted/
                true
        else
                false
        end
end