cms_scanner 0.0.37.12 → 0.0.38.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
  - - ">="