cms_scanner 0.0.37.12 → 0.0.38.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 92c1a1bc745065a29c4770a7ff9143749f5373ea
4
- data.tar.gz: 3ee76b460d6cd72f72aa03eb0beb095e367aa663
3
+ metadata.gz: a268201443a7ffead0d0a0d4070cd8ae295081bd
4
+ data.tar.gz: f6b9f3e7e3779b6f05759d556d2c1da282db2ddd
5
5
  SHA512:
6
- metadata.gz: 756dd179151bbf8a904b1a8ee2a206e39b9a76cbe8891a3cabc80b71670cb87550385709246bb5c67f82309cb9f675c03ee622cc2116fccf038442820aac5ab9
7
- data.tar.gz: 45eacba22c283773bf2cb8eb8e7dcc0694fa263a54d5932b6e6d2bf2a3adc0437de2d7db2566b9aab9903ccdc7c8a6836542a267d400b637000c5ce1b25a58f6
6
+ metadata.gz: 927269d831ec38b8615c92a0c29fafb3c2eb27e827140368d01d2e522a3440c3751df0cefac16e063e5d039ea6decfbdac23be0abb19ac0409cc311ed143e5b3
7
+ data.tar.gz: 313fa9f6958d7838f88744d7cb29db154be90f408cfccbbc960a2b202490a71145da0ec404272bff1944c44b0874bb0ec36066cda0d9d8ad6d2f835e64e6df3b
@@ -29,13 +29,13 @@ module CMSScanner
29
29
 
30
30
  case res.code
31
31
  when 0
32
- fail TargetDownError, res
32
+ raise TargetDownError, res
33
33
  when 401
34
- fail HTTPAuthRequiredError
34
+ raise HTTPAuthRequiredError
35
35
  when 403
36
- fail AccessForbiddenError
36
+ raise AccessForbiddenError
37
37
  when 407
38
- fail ProxyAuthRequiredError
38
+ raise ProxyAuthRequiredError
39
39
  end
40
40
 
41
41
  # Checks for redirects
@@ -44,7 +44,7 @@ module CMSScanner
44
44
 
45
45
  return if target.in_scope?(effective_url)
46
46
 
47
- fail HTTPRedirectError, effective_url unless parsed_options[:ignore_main_redirect]
47
+ raise HTTPRedirectError, effective_url unless parsed_options[:ignore_main_redirect]
48
48
 
49
49
  target.homepage_res = res
50
50
  end
@@ -12,7 +12,7 @@ module CMSScanner
12
12
  def aggressive(_opts = {})
13
13
  res = NS::Browser.get(url)
14
14
 
15
- return unless res && res.code == 200 && !res.body.empty?
15
+ return unless res&.code == 200 && !res.body.empty?
16
16
  return unless res.headers && res.headers['Content-Type'] =~ %r{\Atext/plain}
17
17
 
18
18
  NS::FantasticoFileslist.new(url, confidence: 70, found_by: found_by)
@@ -12,7 +12,7 @@ module CMSScanner
12
12
  def aggressive(_opts = {})
13
13
  res = NS::Browser.get(url)
14
14
 
15
- return unless res && res.code == 200 && res.body =~ /(?:user-agent|(?:dis)?allow):/i
15
+ return unless res&.code == 200 && res.body =~ /(?:user-agent|(?:dis)?allow):/i
16
16
 
17
17
  NS::RobotsTxt.new(url, confidence: 100, found_by: found_by)
18
18
  end
@@ -12,7 +12,7 @@ module CMSScanner
12
12
  def aggressive(_opts = {})
13
13
  res = NS::Browser.get(url)
14
14
 
15
- return unless res && res.code == 200 && res.body =~ /by interconnect/i
15
+ return unless res&.code == 200 && res.body =~ /by interconnect/i
16
16
 
17
17
  NS::InterestingFinding.new(url, confidence: 100,
18
18
  found_by: found_by,
@@ -46,7 +46,7 @@ module CMSScanner
46
46
 
47
47
  res = NS::Browser.get(potential_url)
48
48
 
49
- next unless res && res.body =~ /XML-RPC server accepts POST requests only/i
49
+ next unless res&.body =~ /XML-RPC server accepts POST requests only/i
50
50
 
51
51
  return NS::XMLRPC.new(potential_url,
52
52
  confidence: 100,
@@ -4,7 +4,7 @@ module CMSScanner
4
4
  # @return [ Hash ] The headers
5
5
  def entries
6
6
  res = NS::Browser.get(url)
7
- return [] unless res && res.headers
7
+ return [] unless res&.headers
8
8
  res.headers
9
9
  end
10
10
 
@@ -21,7 +21,7 @@ module CMSScanner
21
21
  def entries
22
22
  res = NS::Browser.get(url)
23
23
 
24
- return [] unless res && res.headers['Content-Type'] =~ %r{\Atext/plain;}i
24
+ return [] unless res && res.headers['Content-Type'] =~ %r{\Atext/plain;}i # rubocop:disable Style/SafeNavigation
25
25
 
26
26
  res.body.split("\n").reject { |s| s.strip.empty? }
27
27
  end
@@ -34,7 +34,7 @@ module CMSScanner
34
34
  other = self.class.new(other) unless other.is_a?(self.class) # handle potential '.1' version
35
35
 
36
36
  Gem::Version.new(number) <=> Gem::Version.new(other.number)
37
- rescue
37
+ rescue ArgumentError
38
38
  false
39
39
  end
40
40
 
data/cms_scanner.gemspec CHANGED
@@ -1,4 +1,3 @@
1
- # coding: utf-8
2
1
  lib = File.expand_path('../lib', __FILE__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
3
 
@@ -8,7 +7,7 @@ Gem::Specification.new do |s|
8
7
  s.name = 'cms_scanner'
9
8
  s.version = CMSScanner::VERSION
10
9
  s.platform = Gem::Platform::RUBY
11
- s.required_ruby_version = '>= 2.2.2'
10
+ s.required_ruby_version = '>= 2.3'
12
11
  s.authors = ['WPScanTeam']
13
12
  s.email = ['team@wpscan.org']
14
13
  s.summary = 'CMS Scanner Framework (experimental)'
@@ -32,24 +31,24 @@ Gem::Specification.new do |s|
32
31
  s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
33
32
  s.require_path = 'lib'
34
33
 
35
- s.add_dependency 'typhoeus', '~> 1.3.0'
36
34
  s.add_dependency 'nokogiri', '~> 1.8.0'
37
- s.add_dependency 'yajl-ruby', '~> 1.3.0' # Better JSON parser regarding memory usage
35
+ s.add_dependency 'opt_parse_validator', '~> 0.0.14.0'
38
36
  s.add_dependency 'public_suffix', '~> 3.0.0'
39
37
  s.add_dependency 'ruby-progressbar', '~> 1.9.0'
40
- s.add_dependency 'opt_parse_validator', '~> 0.0.13.11'
38
+ s.add_dependency 'typhoeus', '~> 1.3.0'
39
+ s.add_dependency 'yajl-ruby', '~> 1.3.0' # Better JSON parser regarding memory usage
41
40
 
42
41
  # Already required by opt_parse_validator
43
42
  # so version restriction loosen to avoid potential future conflicts
44
- s.add_dependency 'addressable', '~> 2.5'
45
43
  s.add_dependency 'activesupport', '~> 5.0'
44
+ s.add_dependency 'addressable', '~> 2.5'
46
45
 
46
+ s.add_development_dependency 'bundler', '~> 1.6'
47
+ s.add_development_dependency 'coveralls', '~> 0.8.0'
47
48
  s.add_development_dependency 'rake', '~> 12.0'
48
49
  s.add_development_dependency 'rspec', '~> 3.7.0'
49
50
  s.add_development_dependency 'rspec-its', '~> 1.2.0'
50
- s.add_development_dependency 'bundler', '~> 1.6'
51
- s.add_development_dependency 'rubocop', '~> 0.50.0'
52
- s.add_development_dependency 'webmock', '~> 1.22.0'
51
+ s.add_development_dependency 'rubocop', '~> 0.51.0'
53
52
  s.add_development_dependency 'simplecov', '~> 0.14.0' # Can't update to 0.15 as it breaks coveralls dep
54
- s.add_development_dependency 'coveralls', '~> 0.8.0'
53
+ s.add_development_dependency 'webmock', '~> 3.1.0'
55
54
  end
data/lib/cms_scanner.rb CHANGED
@@ -103,11 +103,11 @@ module CMSScanner
103
103
  @run_error = e
104
104
 
105
105
  formatter.output('@usage', msg: e.message)
106
- rescue Interrupt, StandardError => e
106
+ rescue StandardError, SignalException => e
107
107
  @run_error = e
108
108
 
109
109
  formatter.output('@scan_aborted',
110
- reason: e.message,
110
+ reason: e.is_a?(Interrupt) ? 'Canceled by User' : e.message,
111
111
  trace: e.backtrace,
112
112
  verbose: controllers.first.parsed_options[:verbose])
113
113
  ensure
@@ -44,7 +44,7 @@ module CMSScanner
44
44
  #
45
45
  # @param [ Integer ] number
46
46
  def max_threads=(number)
47
- @max_threads = number.to_i > 0 && throttle.zero? ? number.to_i : 1
47
+ @max_threads = number.to_i.positive? && throttle.zero? ? number.to_i : 1
48
48
 
49
49
  hydra.max_concurrency = @max_threads
50
50
  end
@@ -79,11 +79,11 @@ module CMSScanner
79
79
  def throttle=(value)
80
80
  @throttle = value.to_i.abs / 1000.0
81
81
 
82
- self.max_threads = 1 if @throttle > 0
82
+ self.max_threads = 1 if @throttle.positive?
83
83
  end
84
84
 
85
85
  def trottle!
86
- sleep(throttle) if throttle > 0
86
+ sleep(throttle) if throttle.positive?
87
87
  end
88
88
  end
89
89
  end
@@ -34,7 +34,7 @@ module CMSScanner
34
34
  return if expired_entry?(key)
35
35
 
36
36
  serializer.load(File.read(file_path))
37
- rescue
37
+ rescue StandardError
38
38
  nil
39
39
  end
40
40
 
@@ -42,7 +42,7 @@ module CMSScanner
42
42
  # @param [ Mixed ] data_to_store
43
43
  # @param [ Integer ] cache_ttl
44
44
  def write_entry(key, data_to_store, cache_ttl)
45
- return unless cache_ttl.to_i > 0
45
+ return unless cache_ttl.to_i.positive?
46
46
 
47
47
  File.write(entry_path(key), serializer.dump(data_to_store))
48
48
  File.write(entry_expiration_path(key), Time.now.to_i + cache_ttl)
@@ -68,7 +68,9 @@ module CMSScanner
68
68
  #
69
69
  # @return [ Boolean ]
70
70
  def expired_entry?(key)
71
- File.read(entry_expiration_path(key)).to_i <= Time.now.to_i rescue true
71
+ File.read(entry_expiration_path(key)).to_i <= Time.now.to_i
72
+ rescue StandardError
73
+ true
72
74
  end
73
75
  end
74
76
  end
@@ -47,13 +47,15 @@ module CMSScanner
47
47
  @hydra ||= browser.hydra
48
48
  end
49
49
 
50
- def found_by
50
+ # @param [ String, Symbol ] klass
51
+ # @return [ String ]
52
+ def found_by(klass = self)
51
53
  caller_locations.each do |call|
52
54
  label = call.label
53
55
 
54
56
  next unless %w[aggressive passive].include? label
55
57
 
56
- return "#{titleize} (#{label.capitalize} Detection)"
58
+ return "#{klass.titleize} (#{label.capitalize} Detection)"
57
59
  end
58
60
  nil
59
61
  end
@@ -10,7 +10,7 @@ module CMSScanner
10
10
  #
11
11
  # @return []
12
12
  def process_urls(_urls, _opts = {})
13
- fail NotImplementedError
13
+ raise NotImplementedError
14
14
  end
15
15
 
16
16
  # @param [ Hash ] opts
@@ -29,7 +29,7 @@ module CMSScanner
29
29
 
30
30
  # @return [ String ]
31
31
  def passive_urls_xpath
32
- fail NotImplementedError
32
+ raise NotImplementedError
33
33
  end
34
34
 
35
35
  # @param [ Hash ] opts
@@ -47,7 +47,7 @@ module CMSScanner
47
47
  #
48
48
  # @return [ Array<String> ]
49
49
  def aggressive_urls(_opts = {})
50
- fail NotImplementedError
50
+ raise NotImplementedError
51
51
  end
52
52
  end
53
53
  end
@@ -38,6 +38,7 @@ module CMSScanner
38
38
  FINDING_OPTS.each { |opt| send("#{opt}=", opts[opt]) if opts.key?(opt) }
39
39
  end
40
40
 
41
+ # TODO: maybe also check for interesting_entries and confirmed_by ?
41
42
  def eql?(other)
42
43
  self == other && confidence == other.confidence && found_by == other.found_by
43
44
  end
@@ -109,11 +109,11 @@ module CMSScanner
109
109
  if tpl[0, 1] == '@' # Global Template
110
110
  tpl = tpl.delete('@')
111
111
  else
112
- fail 'The controller_name can not be nil' unless controller_name
112
+ raise 'The controller_name can not be nil' unless controller_name
113
113
  tpl = "#{controller_name}/#{tpl}"
114
114
  end
115
115
 
116
- fail "Wrong tpl format: '#{tpl}'" unless tpl =~ %r{\A[\w/_]+\z}
116
+ raise "Wrong tpl format: '#{tpl}'" unless tpl =~ %r{\A[\w/_]+\z}
117
117
 
118
118
  views_directories.reverse_each do |dir|
119
119
  formats.each do |format|
@@ -123,7 +123,7 @@ module CMSScanner
123
123
  end
124
124
  end
125
125
 
126
- fail "View not found for #{format}/#{tpl}"
126
+ raise "View not found for #{format}/#{tpl}"
127
127
  end
128
128
 
129
129
  # @return [ Array<String> ] The directories to look into for views
@@ -35,16 +35,17 @@ module CMSScanner
35
35
  false
36
36
  end
37
37
 
38
+ # @param [ String ] xpath
38
39
  # @param [ Regexp ] pattern
39
40
  # @param [ Typhoeus::Response, String ] page
40
41
  #
41
- # @return [ Array<Array<MatchData, Nokogiri::XML::Comment>> ]
42
- # @yield [ MatchData, Nokogiri::XML::Comment ]
43
- def comments_from_page(pattern, page = nil)
42
+ # @return [ Array<Array<MatchData, Nokogiri::XML::Element>> ]
43
+ # @yield [ MatchData, Nokogiri::XML::Element ]
44
+ def xpath_pattern_from_page(xpath, pattern, page = nil)
44
45
  page = NS::Browser.get(url(page)) unless page.is_a?(Typhoeus::Response)
45
46
  matches = []
46
47
 
47
- page.html.xpath('//comment()').each do |node|
48
+ page.html.xpath(xpath).each do |node|
48
49
  next unless node.text.strip =~ pattern
49
50
 
50
51
  yield Regexp.last_match, node if block_given?
@@ -55,6 +56,28 @@ module CMSScanner
55
56
  matches
56
57
  end
57
58
 
59
+ # @param [ Regexp ] pattern
60
+ # @param [ Typhoeus::Response, String ] page
61
+ #
62
+ # @return [ Array<Array<MatchData, Nokogiri::XML::Comment>> ]
63
+ # @yield [ MatchData, Nokogiri::XML::Comment ]
64
+ def comments_from_page(pattern, page = nil)
65
+ xpath_pattern_from_page('//comment()', pattern, page) do |match, node|
66
+ yield match, node if block_given?
67
+ end
68
+ end
69
+
70
+ # @param [ Regexp ] pattern
71
+ # @param [ Typhoeus::Response, String ] page
72
+ #
73
+ # @return [ Array<Array<MatchData, Nokogiri::XML::Element>> ]
74
+ # @yield [ MatchData, Nokogiri::XML::Element ]
75
+ def javascripts_from_page(pattern, page = nil)
76
+ xpath_pattern_from_page('//script', pattern, page) do |match, node|
77
+ yield match, node if block_given?
78
+ end
79
+ end
80
+
58
81
  # @param [ Typhoeus::Response, String ] page
59
82
  # @param [ String ] xpath
60
83
  # @param [ Array<String> ] attributes
@@ -72,7 +95,13 @@ module CMSScanner
72
95
 
73
96
  next unless attr_value && !attr_value.empty?
74
97
 
75
- tag_uri = uri.join(attr_value.strip) rescue next
98
+ tag_uri = begin
99
+ uri.join(attr_value.strip)
100
+ rescue StandardError
101
+ # Skip potential malformed URLs etc.
102
+ next
103
+ end
104
+
76
105
  tag_uri_string = tag_uri.to_s
77
106
 
78
107
  next unless tag_uri.host
@@ -11,7 +11,7 @@ module CMSScanner
11
11
  # @return [ Boolean ] true if the url given is in scope
12
12
  def in_scope?(url)
13
13
  scope.include?(Addressable::URI.parse(url.strip).host)
14
- rescue
14
+ rescue StandardError
15
15
  false
16
16
  end
17
17
 
@@ -1,4 +1,4 @@
1
1
  # Version
2
2
  module CMSScanner
3
- VERSION = '0.0.37.12'.freeze
3
+ VERSION = '0.0.38.0'.freeze
4
4
  end
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cms_scanner
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.37.12
4
+ version: 0.0.38.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - WPScanTeam
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-28 00:00:00.000000000 Z
11
+ date: 2017-11-07 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: typhoeus
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: 1.3.0
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: 1.3.0
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: nokogiri
29
15
  requirement: !ruby/object:Gem::Requirement
@@ -39,19 +25,19 @@ dependencies:
39
25
  - !ruby/object:Gem::Version
40
26
  version: 1.8.0
41
27
  - !ruby/object:Gem::Dependency
42
- name: yajl-ruby
28
+ name: opt_parse_validator
43
29
  requirement: !ruby/object:Gem::Requirement
44
30
  requirements:
45
31
  - - "~>"
46
32
  - !ruby/object:Gem::Version
47
- version: 1.3.0
33
+ version: 0.0.14.0
48
34
  type: :runtime
49
35
  prerelease: false
50
36
  version_requirements: !ruby/object:Gem::Requirement
51
37
  requirements:
52
38
  - - "~>"
53
39
  - !ruby/object:Gem::Version
54
- version: 1.3.0
40
+ version: 0.0.14.0
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: public_suffix
57
43
  requirement: !ruby/object:Gem::Requirement
@@ -81,33 +67,33 @@ dependencies:
81
67
  - !ruby/object:Gem::Version
82
68
  version: 1.9.0
83
69
  - !ruby/object:Gem::Dependency
84
- name: opt_parse_validator
70
+ name: typhoeus
85
71
  requirement: !ruby/object:Gem::Requirement
86
72
  requirements:
87
73
  - - "~>"
88
74
  - !ruby/object:Gem::Version
89
- version: 0.0.13.11
75
+ version: 1.3.0
90
76
  type: :runtime
91
77
  prerelease: false
92
78
  version_requirements: !ruby/object:Gem::Requirement
93
79
  requirements:
94
80
  - - "~>"
95
81
  - !ruby/object:Gem::Version
96
- version: 0.0.13.11
82
+ version: 1.3.0
97
83
  - !ruby/object:Gem::Dependency
98
- name: addressable
84
+ name: yajl-ruby
99
85
  requirement: !ruby/object:Gem::Requirement
100
86
  requirements:
101
87
  - - "~>"
102
88
  - !ruby/object:Gem::Version
103
- version: '2.5'
89
+ version: 1.3.0
104
90
  type: :runtime
105
91
  prerelease: false
106
92
  version_requirements: !ruby/object:Gem::Requirement
107
93
  requirements:
108
94
  - - "~>"
109
95
  - !ruby/object:Gem::Version
110
- version: '2.5'
96
+ version: 1.3.0
111
97
  - !ruby/object:Gem::Dependency
112
98
  name: activesupport
113
99
  requirement: !ruby/object:Gem::Requirement
@@ -123,89 +109,103 @@ dependencies:
123
109
  - !ruby/object:Gem::Version
124
110
  version: '5.0'
125
111
  - !ruby/object:Gem::Dependency
126
- name: rake
112
+ name: addressable
127
113
  requirement: !ruby/object:Gem::Requirement
128
114
  requirements:
129
115
  - - "~>"
130
116
  - !ruby/object:Gem::Version
131
- version: '12.0'
117
+ version: '2.5'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '2.5'
125
+ - !ruby/object:Gem::Dependency
126
+ name: bundler
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '1.6'
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
- version: '12.0'
138
+ version: '1.6'
139
139
  - !ruby/object:Gem::Dependency
140
- name: rspec
140
+ name: coveralls
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
143
  - - "~>"
144
144
  - !ruby/object:Gem::Version
145
- version: 3.7.0
145
+ version: 0.8.0
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
150
  - - "~>"
151
151
  - !ruby/object:Gem::Version
152
- version: 3.7.0
152
+ version: 0.8.0
153
153
  - !ruby/object:Gem::Dependency
154
- name: rspec-its
154
+ name: rake
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
157
  - - "~>"
158
158
  - !ruby/object:Gem::Version
159
- version: 1.2.0
159
+ version: '12.0'
160
160
  type: :development
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
164
  - - "~>"
165
165
  - !ruby/object:Gem::Version
166
- version: 1.2.0
166
+ version: '12.0'
167
167
  - !ruby/object:Gem::Dependency
168
- name: bundler
168
+ name: rspec
169
169
  requirement: !ruby/object:Gem::Requirement
170
170
  requirements:
171
171
  - - "~>"
172
172
  - !ruby/object:Gem::Version
173
- version: '1.6'
173
+ version: 3.7.0
174
174
  type: :development
175
175
  prerelease: false
176
176
  version_requirements: !ruby/object:Gem::Requirement
177
177
  requirements:
178
178
  - - "~>"
179
179
  - !ruby/object:Gem::Version
180
- version: '1.6'
180
+ version: 3.7.0
181
181
  - !ruby/object:Gem::Dependency
182
- name: rubocop
182
+ name: rspec-its
183
183
  requirement: !ruby/object:Gem::Requirement
184
184
  requirements:
185
185
  - - "~>"
186
186
  - !ruby/object:Gem::Version
187
- version: 0.50.0
187
+ version: 1.2.0
188
188
  type: :development
189
189
  prerelease: false
190
190
  version_requirements: !ruby/object:Gem::Requirement
191
191
  requirements:
192
192
  - - "~>"
193
193
  - !ruby/object:Gem::Version
194
- version: 0.50.0
194
+ version: 1.2.0
195
195
  - !ruby/object:Gem::Dependency
196
- name: webmock
196
+ name: rubocop
197
197
  requirement: !ruby/object:Gem::Requirement
198
198
  requirements:
199
199
  - - "~>"
200
200
  - !ruby/object:Gem::Version
201
- version: 1.22.0
201
+ version: 0.51.0
202
202
  type: :development
203
203
  prerelease: false
204
204
  version_requirements: !ruby/object:Gem::Requirement
205
205
  requirements:
206
206
  - - "~>"
207
207
  - !ruby/object:Gem::Version
208
- version: 1.22.0
208
+ version: 0.51.0
209
209
  - !ruby/object:Gem::Dependency
210
210
  name: simplecov
211
211
  requirement: !ruby/object:Gem::Requirement
@@ -221,19 +221,19 @@ dependencies:
221
221
  - !ruby/object:Gem::Version
222
222
  version: 0.14.0
223
223
  - !ruby/object:Gem::Dependency
224
- name: coveralls
224
+ name: webmock
225
225
  requirement: !ruby/object:Gem::Requirement
226
226
  requirements:
227
227
  - - "~>"
228
228
  - !ruby/object:Gem::Version
229
- version: 0.8.0
229
+ version: 3.1.0
230
230
  type: :development
231
231
  prerelease: false
232
232
  version_requirements: !ruby/object:Gem::Requirement
233
233
  requirements:
234
234
  - - "~>"
235
235
  - !ruby/object:Gem::Version
236
- version: 0.8.0
236
+ version: 3.1.0
237
237
  description: Framework to provide an easy way to implement CMS Scanners
238
238
  email:
239
239
  - team@wpscan.org
@@ -358,7 +358,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
358
358
  requirements:
359
359
  - - ">="
360
360
  - !ruby/object:Gem::Version
361
- version: 2.2.2
361
+ version: '2.3'
362
362
  required_rubygems_version: !ruby/object:Gem::Requirement
363
363
  requirements:
364
364
  - - ">="