Class: Msf::OptBase
- Inherits:
-
Object
- Object
- Msf::OptBase
- Defined in:
- lib/msf/core/opt_base.rb
Overview
The base class for all options.
Direct Known Subclasses
OptAddress, OptAddressRange, OptBool, OptEnum, OptFloat, OptInt, OptMeterpreterDebugLogging, OptPath, OptRaw, OptRegexp, OptRhosts, OptString
Instance Attribute Summary collapse
-
#advanced ⇒ Object
Whether or not this is an advanced option.
-
#aliases ⇒ Object
Aliases for this option for backward compatibility.
-
#conditions ⇒ Object
The list of potential conditions.
-
#default ⇒ Object
The default value of the option.
-
#desc ⇒ Object
The description of the option.
-
#enums ⇒ Object
The list of potential valid values.
-
#evasion ⇒ Object
Whether or not this is an evasion option.
-
#max_length ⇒ Object
The max length of the input value.
-
#name ⇒ Object
The name of the option.
-
#owner ⇒ Object
The module or entity that owns this option.
-
#regex ⇒ Object
A optional regex to validate the option value.
-
#required ⇒ Object
Whether or not the option is required.
Instance Method Summary collapse
-
#advanced? ⇒ Boolean
Returns true if this is an advanced option.
-
#display_value(value) ⇒ Object
Returns a string representing a user-friendly display of the chosen value.
-
#empty_required_value?(value) ⇒ Boolean
Returns true if the value supplied is nil and it’s required to be a valid value.
-
#evasion? ⇒ Boolean
Returns true if this is an evasion option.
-
#initialize(in_name, attrs = [], required: false, desc: nil, default: nil, conditions: [], enums: [], regex: nil, aliases: [], max_length: nil) ⇒ OptBase
constructor
Initializes a named option with the supplied attribute array.
-
#invalid_value_length?(value) ⇒ Boolean
Returns true if the value supplied is longer then the max allowed length.
-
#normalize(value) ⇒ Object
Normalizes the supplied value to conform with the type that the option is conveying.
-
#required? ⇒ Boolean
Returns true if this is a required option.
-
#type?(in_type) ⇒ Boolean
Returns true if the supplied type is equivalent to this option’s type.
-
#valid?(value, check_empty: true) ⇒ Boolean
If it’s required and the value is nil or empty, then it’s not valid.
-
#validate_on_assignment? ⇒ Boolean
Returns true if this option can be validated on assignment.
Constructor Details
#initialize(in_name, attrs = [], required: false, desc: nil, default: nil, conditions: [], enums: [], regex: nil, aliases: [], max_length: nil) ⇒ OptBase
Initializes a named option with the supplied attribute array. The array is composed of three values.
attrs = required (boolean type) attrs = description (string) attrs = default value attrs = possible enum values attrs = Regex to validate the option
Attrs can also be specified explicitly via named parameters, or attrs can also be a string as standin for the required description field.
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/msf/core/opt_base.rb', line 27 def initialize(in_name, attrs = [], required: false, desc: nil, default: nil, conditions: [], enums: [], regex: nil, aliases: [], max_length: nil) self.name = in_name self.advanced = false self.evasion = false self.aliases = aliases self.max_length = max_length self.conditions = conditions if attrs.is_a?(String) || attrs.length == 0 self.required = required self.desc = attrs.is_a?(String) ? attrs : desc self.enums = [ *(enums) ].map { |x| x.to_s } if default.nil? && enums.length > 0 self.default = enums[0] else self.default = default end regex_temp = regex else if attrs[0].nil? self.required = required else self.required = attrs[0] end self.desc = attrs[1] || desc self.default = attrs[2] || default self.enums = attrs[3] || enums self.enums = [ *(self.enums) ].map { |x| x.to_s } regex_temp = attrs[4] || regex end unless max_length.nil? self.desc += " Max parameter length: #{max_length} characters" end if regex_temp # convert to string regex_temp = regex_temp.to_s if regex_temp.is_a? Regexp # remove start and end character, they will be added later regex_temp = regex_temp.sub(/^\^/, '').sub(/\$$/, '') # Add start and end marker to match the whole regex regex_temp = "^#{regex_temp}$" begin Regexp.compile(regex_temp) self.regex = regex_temp rescue RegexpError, TypeError => e raise("Invalid Regex #{regex_temp}: #{e}") end end end |
Instance Attribute Details
#advanced ⇒ Object
Whether or not this is an advanced option.
183 184 185 |
# File 'lib/msf/core/opt_base.rb', line 183 def advanced @advanced end |
#aliases ⇒ Object
Aliases for this option for backward compatibility
207 208 209 |
# File 'lib/msf/core/opt_base.rb', line 207 def aliases @aliases end |
#conditions ⇒ Object
The list of potential conditions
195 196 197 |
# File 'lib/msf/core/opt_base.rb', line 195 def conditions @conditions end |
#default ⇒ Object
The default value of the option.
175 176 177 |
# File 'lib/msf/core/opt_base.rb', line 175 def default @default end |
#desc ⇒ Object
The description of the option.
171 172 173 |
# File 'lib/msf/core/opt_base.rb', line 171 def desc @desc end |
#enums ⇒ Object
The list of potential valid values
199 200 201 |
# File 'lib/msf/core/opt_base.rb', line 199 def enums @enums end |
#evasion ⇒ Object
Whether or not this is an evasion option.
187 188 189 |
# File 'lib/msf/core/opt_base.rb', line 187 def evasion @evasion end |
#max_length ⇒ Object
The max length of the input value
211 212 213 |
# File 'lib/msf/core/opt_base.rb', line 211 def max_length @max_length end |
#name ⇒ Object
The name of the option.
163 164 165 |
# File 'lib/msf/core/opt_base.rb', line 163 def name @name end |
#owner ⇒ Object
The module or entity that owns this option.
191 192 193 |
# File 'lib/msf/core/opt_base.rb', line 191 def owner @owner end |
#regex ⇒ Object
A optional regex to validate the option value
203 204 205 |
# File 'lib/msf/core/opt_base.rb', line 203 def regex @regex end |
#required ⇒ Object
Whether or not the option is required.
167 168 169 |
# File 'lib/msf/core/opt_base.rb', line 167 def required @required end |
Instance Method Details
#advanced? ⇒ Boolean
Returns true if this is an advanced option.
89 90 91 |
# File 'lib/msf/core/opt_base.rb', line 89 def advanced? advanced end |
#display_value(value) ⇒ Object
Returns a string representing a user-friendly display of the chosen value
147 148 149 |
# File 'lib/msf/core/opt_base.rb', line 147 def display_value(value) value.to_s end |
#empty_required_value?(value) ⇒ Boolean
Returns true if the value supplied is nil and it’s required to be a valid value
132 133 134 |
# File 'lib/msf/core/opt_base.rb', line 132 def empty_required_value?(value) required? && value.nil? end |
#evasion? ⇒ Boolean
Returns true if this is an evasion option.
96 97 98 |
# File 'lib/msf/core/opt_base.rb', line 96 def evasion? evasion end |
#invalid_value_length?(value) ⇒ Boolean
Returns true if the value supplied is longer then the max allowed length
154 155 156 157 158 |
# File 'lib/msf/core/opt_base.rb', line 154 def invalid_value_length?(value) if !value.nil? && !max_length.nil? value.length > max_length end end |
#normalize(value) ⇒ Object
Normalizes the supplied value to conform with the type that the option is conveying.
140 141 142 |
# File 'lib/msf/core/opt_base.rb', line 140 def normalize(value) value end |
#required? ⇒ Boolean
Returns true if this is a required option.
82 83 84 |
# File 'lib/msf/core/opt_base.rb', line 82 def required? required end |
#type?(in_type) ⇒ Boolean
Returns true if the supplied type is equivalent to this option’s type.
103 104 105 |
# File 'lib/msf/core/opt_base.rb', line 103 def type?(in_type) type == in_type end |
#valid?(value, check_empty: true) ⇒ Boolean
If it’s required and the value is nil or empty, then it’s not valid.
117 118 119 120 121 122 123 124 125 126 |
# File 'lib/msf/core/opt_base.rb', line 117 def valid?(value, check_empty: true) if check_empty && required? # required variable not set return false if (value.nil? || value.to_s.empty?) end if regex && !value.nil? return !!value.match(regex) end true end |
#validate_on_assignment? ⇒ Boolean
Returns true if this option can be validated on assignment
110 111 112 |
# File 'lib/msf/core/opt_base.rb', line 110 def validate_on_assignment? true end |