module Arachni::Element::Capabilities::Submittable
@author Tasos “Zapotek” Laskos <tasos.laskos@arachni-scanner.com>
Public Class Methods
# File lib/arachni/element/capabilities/submittable.rb, line 15 def initialize( options ) super self.method ||= options[:method] || :get self.action ||= options[:action] || self.url end
Public Instance Methods
@note Ex. ‘href’ for links, ‘action’ for forms, etc.
@return [String]
URI to which the element points and should be audited against.
# File lib/arachni/element/capabilities/submittable.rb, line 51 def action @action.freeze end
@see action
# File lib/arachni/element/capabilities/submittable.rb, line 56 def action=( url ) @action = self.url ? to_absolute( url, self.url ) : normalize_url( url ) end
# File lib/arachni/element/capabilities/submittable.rb, line 114 def dup new = super new.method = self.method new.action = self.action new end
@return [Arachni::HTTP]
# File lib/arachni/element/capabilities/submittable.rb, line 102 def http HTTP::Client end
Must be implemented by the including class and perform the appropriate HTTP
request (get/post/whatever) for the current element.
Invoked by {#submit} to submit the object.
@param [Hash] opts @param [Block] block
Callback to be passed the HTTP response.
@return [HTTP::Request]
@see submit
@abstract
# File lib/arachni/element/capabilities/submittable.rb, line 97 def http_request( opts, &block ) fail NotImplementedError end
@note Differences in input values will be taken into consideration.
@return [String]
String uniquely identifying self.
# File lib/arachni/element/capabilities/submittable.rb, line 110 def id "#{type}:#{method}:#{action}:#{inputtable_id}" end
Should represent a method in {Arachni::Check::HTTP}.
Ex. get, post, cookie, header
@see Arachni::Check::HTTP
@return [Symbol]
HTTP request method for the element.
# File lib/arachni/element/capabilities/submittable.rb, line 35 def method( *args ) return super( *args ) if args.any? @method.freeze end
@see method
# File lib/arachni/element/capabilities/submittable.rb, line 42 def method=( method ) @method = method.to_s.downcase.to_sym end
@return [Platform]
Applicable platforms for the {#action} resource.
# File lib/arachni/element/capabilities/submittable.rb, line 23 def platforms Platform::Manager[@action] end
@note Sets ‘self` as the {HTTP::Request#performer}.
Submits ‘self` to the {#action} URL with the appropriate {Capabilities::Inputtable#inputs parameters}.
@param [Hash] options @param [Block] block
Callback to be passed the {HTTP::Response}.
@see http_request
# File lib/arachni/element/capabilities/submittable.rb, line 70 def submit( options = {}, &block ) options = options.dup options[:parameters] = @inputs.dup options[:follow_location] = true if !options.include?( :follow_location ) @auditor ||= options.delete( :auditor ) options[:performer] ||= self options[:raw_parameters] ||= raw_inputs http_request( options, &block ) end
# File lib/arachni/element/capabilities/submittable.rb, line 121 def to_h (defined?( super ) ? super : {}).merge( url: url, action: action, method: method ) end