Class: Arachni::OptionGroups::Input

Inherits:
Arachni::OptionGroup show all
Defined in:
lib/arachni/option_groups/input.rb

Overview

Holds options, and provides functionality, related to filling in inputs by name.

Author:

Constant Summary collapse

DEFAULT_VALUES =

System default input values.

{
    /name/i    => 'arachni_name',
    /user/i    => 'arachni_user',
    /usr/i     => 'arachni_user',
    /pass/i    => '5543!%arachni_secret',
    /txt/i     => 'arachni_text',
    /num/i     => '132',
    /amount/i  => '100',
    /mail/i    => '[email protected]',
    /account/i => '12',
    /id/i      => '1',
}
DEFAULT =
'1'

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Arachni::OptionGroup

#==, attr_accessor, #attributes, attributes, defaults, #defaults, #hash, inherited, #initialize, #merge, set_defaults, #to_hash, #to_rpc_data, #update, #validate

Constructor Details

This class inherits a constructor from Arachni::OptionGroup

Instance Attribute Details

#default_valuesHash<Regexp => String>

Returns Default values for #values.

See Also:



42
43
44
# File 'lib/arachni/option_groups/input.rb', line 42

def default_values
  @default_values
end

#forceBool



50
51
52
# File 'lib/arachni/option_groups/input.rb', line 50

def force
  @force
end

#valuesHash<Regexp => String, #call>



36
37
38
# File 'lib/arachni/option_groups/input.rb', line 36

def values
  @values
end

#without_defaultsBool



46
47
48
# File 'lib/arachni/option_groups/input.rb', line 46

def without_defaults
  @without_defaults
end

Instance Method Details

#effective_valuesHash<Regexp => String>



103
104
105
# File 'lib/arachni/option_groups/input.rb', line 103

def effective_values
    without_defaults? ? @values : default_values.merge( @values )
end

#fill(parameters) ⇒ Hash

Note:

If #force? it will fill-in even non-empty inputs.

Tries to fill a hash with values of appropriate type based on the key of the parameter.



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/arachni/option_groups/input.rb', line 68

def fill( parameters )
    parameters = parameters.dup

    parameters.each do |k, v|
        next if !force? && !v.to_s.empty?

        value = value_for_name( k, false )

        # Don't overwrite the default values of the parameters unless we've
        # fot a value, even if #force? is in effect.
        if parameters[k].to_s.empty?
            parameters[k] = value || DEFAULT
        elsif value
            parameters[k] = value
        end
    end

    parameters
end

#force?Bool



121
122
123
# File 'lib/arachni/option_groups/input.rb', line 121

def force?
    !!@force
end

#format_values(values) ⇒ Object



136
137
138
139
140
141
142
143
144
145
146
# File 'lib/arachni/option_groups/input.rb', line 136

def format_values( values )
    return if !values

    values.inject({}) do |h, (regexp, value)|
        regexp = regexp.is_a?( Regexp ) ?
            regexp :
            Regexp.new( regexp.to_s, Regexp::IGNORECASE )
        h.merge!( regexp => value )
        h
    end
end

#to_hObject



148
149
150
151
152
153
154
155
156
# File 'lib/arachni/option_groups/input.rb', line 148

def to_h
    h = super
    [:values, :default_values].each do |k|
        # We can't have blocks in there...
        h[k] = h[k].select{ |_, v| v.is_a? String }.
            inject({}) { |h2, (k2, v)| h2.merge k2.source => v }
    end
    h
end

#update_values_from_file(location) ⇒ Object



109
110
111
# File 'lib/arachni/option_groups/input.rb', line 109

def update_values_from_file( location )
    @values.merge!( format_values( YAML.load_file( location ) ) )
end

#value_for_name(name, use_default = true) ⇒ String?



93
94
95
96
97
98
99
# File 'lib/arachni/option_groups/input.rb', line 93

def value_for_name( name, use_default = true )
    effective_values.each do |k, v|
        return v.respond_to?( :call ) ? v.call( name ).to_s : v if name =~ k
    end

    use_default ? DEFAULT : nil
end

#without_defaults?Bool



115
116
117
# File 'lib/arachni/option_groups/input.rb', line 115

def without_defaults?
    !!@without_defaults
end