Module: Arachni::Element::Capabilities::Refreshable

Included in:
Form, Link
Defined in:
lib/arachni/element/capabilities/refreshable.rb

Overview

Author:

  • Tasos “Zapotek” Laskos <tasos.laskos@arachni-scanner.com>

Instance Method Summary collapse

Instance Method Details

#refresh(http_opts = {}, &block) ⇒ Form

Refreshes the form's inputs and re-applies user updates.

The way it works is by requesting the Base#url, parsing the response and updating the form with the fresh form's inputs.

Parameters:

  • http_opts (Hash) (defaults to: {})

    HTTP options to pass to the request.

  • block (Block)

    If a block is given the request will be async and the block will be called with the updated form.

Returns:



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/arachni/element/capabilities/refreshable.rb', line 26

def refresh( http_opts = {}, &block )
    updated = nil
    http.get( url.to_s, http_opts.merge( mode: block_given? ? :async : :sync ) ) do |res|

        # Find the original version of self in the response.
        f = self.class.from_response( res ).
            find { |f| f.refresh_id == refresh_id }

        if !f
            block.call if block_given?
            next
        end

        # get user updates
        updates = changes
        # update the form's inputs with the fresh ones and re-apply the user changes
        updated = update( f.inputs ).update( updates )
        block.call( updated ) if block_given?
    end
    updated
end

#refresh_idString

This method is abstract.

Returns Unique string identifying this element while disregarding any applied runtime modifications (usually to its Inputtable#inputs).

Basically, a modified element and a fresh element should both return the same value while uniquely identifying the pair.

Returns:

  • (String)

    Unique string identifying this element while disregarding any applied runtime modifications (usually to its Inputtable#inputs).

    Basically, a modified element and a fresh element should both return the same value while uniquely identifying the pair.



56
57
58
# File 'lib/arachni/element/capabilities/refreshable.rb', line 56

def refresh_id
    "#{action}:#{type}:#{default_inputs.keys.sort}"
end