Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 15 additions & 6 deletions lib/relevance/tarantula/crawler.rb
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ def crawl(url = "/")
@times_to_crawl.times do |num|
queue_link url

begin
begin
do_crawl num
rescue CrawlTimeout => e
puts
Expand Down Expand Up @@ -98,7 +98,7 @@ def do_crawl(number)
end

def crawl_the_queue(number = 0)
while (request = @crawl_queue.pop)
while (request = @crawl_queue.shift)
request.crawl
blip(number)
end
Expand Down Expand Up @@ -140,14 +140,14 @@ def grab_log!
def make_result(options)
defaults = {
:log => grab_log!,
:test_name => test_name
:test_name => test_name
}
Result.new(defaults.merge(options)).freeze
end

def handle_form_results(form, response)
handlers.each do |h|
save_result h.handle(Result.new(:method => form.method,
save_result h.handle(Result.new(:method => form.meth,
:url => form.action,
:response => response,
:log => grab_log!,
Expand Down Expand Up @@ -189,7 +189,7 @@ def transform_url(url)
def queue_link(dest, referrer = nil)
dest = Link.new(dest, self, referrer)
return if should_skip_link?(dest)
@crawl_queue << dest
append_to_queue(dest)
@links_queued << dest
dest
end
Expand All @@ -201,12 +201,21 @@ def queue_form(form, referrer = nil)
fs.action = transform_url(fs.action)
return if should_skip_form_submission?(fs)
@referrers[fs.action] = referrer if referrer
@crawl_queue << fs
append_to_queue(fs)
@form_signatures_queued << fs.signature
end
end
end

# append delete requests to the end of the queue, all others just before the first delete request
def append_to_queue(request)
if request.meth.to_s != 'delete' && index = @crawl_queue.index {|r| r.meth.to_s == 'delete' }
@crawl_queue.insert(index, request)
else
@crawl_queue << request
end
end

def report_dir
File.join(rails_root, "tmp", "tarantula")
end
Expand Down
8 changes: 4 additions & 4 deletions lib/relevance/tarantula/form_submission.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ module Tarantula

class FormSubmission
include Relevance::Tarantula
attr_accessor :method, :action, :data, :attack, :form
attr_accessor :meth, :action, :data, :attack, :form

class << self
def attacks
Expand All @@ -24,15 +24,15 @@ def attacks=(atts)

def initialize(form, attack = Relevance::Tarantula::BasicAttack.new)
@form = form
@method = form.method
@meth = form.method
@action = form.action
@attack = attack
@data = mutate_selects(form).merge(mutate_text_areas(form)).merge(mutate_inputs(form))
end

def crawl
begin
response = form.crawler.submit(method, action, data)
response = form.crawler.submit(meth, action, data)
log "Response #{response.code} for #{self}"
rescue ActiveRecord::RecordNotFound => e
log "Skipping #{action}, presumed ok that record is missing"
Expand All @@ -47,7 +47,7 @@ def self.mutate(form)
end

def to_s
"#{action} #{method} #{data.inspect} #{attack.inspect}"
"#{action} #{meth} #{data.inspect} #{attack.inspect}"
end

# a form's signature is what makes it unique (e.g. action + fields)
Expand Down
4 changes: 2 additions & 2 deletions lib/relevance/tarantula/link.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ def method_javascript_function(method, url = '', href = nil)
"var f = document.createElement('form'); f.style.display = 'none'; " +
"this.parentNode.appendChild(f); f.method = 'POST'; f.action = #{action};"

unless method == :post
unless method == 'post'
submit_function << "var m = document.createElement('input'); m.setAttribute('type', 'hidden'); "
submit_function << "m.setAttribute('name', '_method'); m.setAttribute('value', '#{method}'); f.appendChild(m);"
end
Expand Down Expand Up @@ -71,7 +71,7 @@ def meth
(@tag &&
[:put, :delete, :post, :patch].detect do |m| # post should be last since it's least specific
@tag['onclick'] =~ METHOD_REGEXPS[m] ||
@tag['data-method'] == m.to_s.downcase
@tag['data-method'] == m.to_s
end) ||
:get
end
Expand Down
Loading