cms_scanner 0.0.8 → 0.0.9

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: aac165e869ae94f8a2cb8bd95e8107a36285f0e8
4
- data.tar.gz: 3743606bde96d403842d7e300d963a61338d8bf2
3
+ metadata.gz: a28cd6b9f81a6ae0f5627f4bcf0fcf16ce537699
4
+ data.tar.gz: 7224d7f858361411d24e4843cc6b24fe59678d94
5
5
  SHA512:
6
- metadata.gz: fff92236db3a3b7ce157f97e84d693918de1554fba25d7421b83b6dcdbe2d54c3ecf23d9605671ea8f07b255b3292f4d441ba6ff5efca110c4648548e72d918b
7
- data.tar.gz: c66dbaa122048b7334f7f1310ad017cadbbc62cf01c53d1325c41b756867b485e6eb7f0ea5f6460c2a8118ae800fe979badcea6c2614a1452d856c7ecc81d92f
6
+ metadata.gz: b67163e8a50467815e068def06a621266c39e9b42c99e8622fed4ba45849c6bb42f452bce35d4a83d9744565df431e1230da6afddfe6a65e3552e490480844f1
7
+ data.tar.gz: 0a87c104f27cb7e035d8fce4bc670b2f3267106a3696a9cfb4b75580c146749d7ae368d60a8a9f56b5f21d4c3d5611428496b22cc803a2169fe6d9dfcfad485d
@@ -7,6 +7,7 @@ rvm:
7
7
  - 2.1.3
8
8
  - 2.1.4
9
9
  - 2.1.5
10
+ - 2.2.0
10
11
  - ruby-head
11
12
  matrix:
12
13
  allow_failures:
data/Gemfile CHANGED
@@ -2,5 +2,5 @@ source 'https://rubygems.org'
2
2
  gemspec
3
3
 
4
4
  group :test do
5
- gem 'coveralls', require: false
5
+ gem 'coveralls', '~> 0.7', require: false
6
6
  end
data/LICENSE CHANGED
@@ -1,14 +1,19 @@
1
- Copyright (C) 2014 - WPScanTeam
1
+ Copyright (C) 2014-2015 - WPScanTeam
2
2
 
3
- This program is free software: you can redistribute it and/or modify
4
- it under the terms of the GNU General Public License as published by
5
- the Free Software Foundation, either version 3 of the License, or
6
- (at your option) any later version.
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
7
9
 
8
- This program is distributed in the hope that it will be useful,
9
- but WITHOUT ANY WARRANTY; without even the implied warranty of
10
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
- GNU General Public License for more details.
10
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
12
12
 
13
- You should have received a copy of the GNU General Public License
14
- along with this program. If not, see <http://www.gnu.org/licenses/>.
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
+ SOFTWARE.
@@ -14,22 +14,22 @@ Gem::Specification.new do |s|
14
14
  s.summary = 'Experimental CMSScanner'
15
15
  s.description = 'Experimental CMSScanner'
16
16
  s.homepage = 'https://github.com/wpscanteam/CMSScanner'
17
- s.license = 'GPL-3.0'
17
+ s.license = 'MIT'
18
18
 
19
19
  s.files = `git ls-files -z`.split("\x0")
20
20
  s.executables = s.files.grep(/^bin\//) { |f| File.basename(f) }
21
21
  s.test_files = s.files.grep(/^(test|spec|features)\//)
22
22
  s.require_path = 'lib'
23
23
 
24
- s.add_dependency 'opt_parse_validator', '~> 0.0.4'
25
- s.add_dependency 'typhoeus', '~> 0.6.9'
24
+ s.add_dependency 'opt_parse_validator', '~> 0.0.5'
25
+ s.add_dependency 'typhoeus', '~> 0.7'
26
26
  s.add_dependency 'nokogiri', '~> 1.6.3'
27
27
  s.add_dependency 'addressable', '~> 2.3.6'
28
28
  s.add_dependency 'activesupport', '~> 4.1'
29
29
 
30
- s.add_development_dependency 'rake'
30
+ s.add_development_dependency 'rake', '~> 10.4'
31
31
  s.add_development_dependency 'rspec', '~> 3.1'
32
- s.add_development_dependency 'rspec-its'
32
+ s.add_development_dependency 'rspec-its', '~> 1.1'
33
33
  s.add_development_dependency 'bundler', '~> 1.6'
34
34
  s.add_development_dependency 'rubocop', '~> 0.28'
35
35
  s.add_development_dependency 'webmock', '>= 1.18'
@@ -0,0 +1,81 @@
1
+ module CMSScanner
2
+ module Finders
3
+ # Confidence
4
+ class Confidence < Numeric
5
+ attr_reader :value
6
+
7
+ def initialize(value)
8
+ @value = value
9
+ end
10
+
11
+ # @param [ Integer, Confidence ] other
12
+ #
13
+ # TODO: rework the formula which is weak when the value to add is < the current confidence
14
+ # e.g: 90 + 50 + 30 => 82
15
+ #
16
+ # @return [ Confidence ] A new Confidence
17
+ def +(other)
18
+ return Confidence.new(100) if @value == 100
19
+
20
+ to_add = other_value(other)
21
+ new_value = (@value + to_add) / 1.5
22
+ new_value = 100 if new_value > 100 || to_add == 100
23
+
24
+ Confidence.new(new_value.floor)
25
+ end
26
+
27
+ #
28
+ ## Convenient Methods
29
+ #
30
+ #:nocov:
31
+ def to_s
32
+ @value.to_s
33
+ end
34
+
35
+ def to_json
36
+ @value.to_json
37
+ end
38
+
39
+ # @param [ Integer, Confidence ] other
40
+ def other_value(other)
41
+ other.is_a?(Confidence) ? other.value : other
42
+ end
43
+
44
+ # @param [ Integer, Confidence ] other
45
+ def ==(other)
46
+ @value == other_value(other)
47
+ end
48
+
49
+ # @param [ Integer, Confidence ] other
50
+ def eql?(other)
51
+ @value.eql?(other_value(other))
52
+ end
53
+
54
+ # @param [ Integer, Confidence ] other
55
+ def <(other)
56
+ @value < other_value(other)
57
+ end
58
+
59
+ # @param [ Integer, Confidence ] other
60
+ def <=(other)
61
+ @value <= other_value(other)
62
+ end
63
+
64
+ # @param [ Integer, Confidence ] other
65
+ def >(other)
66
+ @value > other_value(other)
67
+ end
68
+
69
+ # @param [ Integer, Confidence ] other
70
+ def >=(other)
71
+ @value >= other_value(other)
72
+ end
73
+
74
+ # @param [ Integer, Confidence ] other
75
+ def <=>(other)
76
+ @value <=> other_value(other)
77
+ end
78
+ #:nocov:
79
+ end
80
+ end
81
+ end
@@ -1,9 +1,11 @@
1
+ require 'cms_scanner/finders/finder/smart_url_checker'
2
+
1
3
  module CMSScanner
2
4
  module Finders
3
5
  # Finder
4
6
  class Finder
5
7
  # Constants for common found_by
6
- DIRECT_ACCESS = 'Direct Access (aggressive detection)'
8
+ DIRECT_ACCESS = 'Direct Access (Aggressive Detection)'
7
9
 
8
10
  attr_accessor :target
9
11
 
@@ -20,7 +22,8 @@ module CMSScanner
20
22
  end
21
23
 
22
24
  def found_by
23
- "#{self.class.to_s.demodulize} (#{caller_locations(1, 1)[0].label} detection)"
25
+ "#{self.class.to_s.demodulize.underscore.titleize} " \
26
+ "(#{caller_locations(1, 1)[0].label.capitalize} Detection)"
24
27
  end
25
28
  end
26
29
  end
@@ -0,0 +1,74 @@
1
+ require 'cms_scanner/finders/finder/smart_url_checker/findings'
2
+
3
+ module CMSScanner
4
+ module Finders
5
+ class Finder
6
+ # Smart URL Checker
7
+ module SmartURLChecker
8
+ # @param [ Array<String> ] urls
9
+ # @param [ Hash ] opts
10
+ #
11
+ # @return []
12
+ def process_urls(_urls, _opts = {})
13
+ fail NotImplementedError
14
+ end
15
+
16
+ # @param [ Hash ] opts
17
+ #
18
+ # @return [ Array<Finding> ]
19
+ def passive(opts = {})
20
+ process_urls(passive_urls(opts), opts)
21
+ end
22
+
23
+ # @param [ Hash ] opts
24
+ #
25
+ # @return [ Array<String> ]
26
+ def passive_urls(_opts = {})
27
+ urls = []
28
+ homepage = NS::Browser.get_and_follow_location(target.url).html
29
+
30
+ homepage.xpath(passive_urls_xpath).each do |node|
31
+ url = node['href'].strip
32
+ # case of relative URLs
33
+ url = target.url(url) unless url =~ /\Ahttps?:/i
34
+
35
+ next unless target.in_scope?(url)
36
+
37
+ urls << url
38
+ end
39
+
40
+ urls.uniq
41
+ end
42
+
43
+ # @return [ String ]
44
+ def passive_urls_xpath
45
+ fail NotImplementedError
46
+ end
47
+
48
+ # @param [ Hash ] opts
49
+ #
50
+ # @return [ Array<Finding> ]
51
+ def aggressive(opts = {})
52
+ # To avoid scanning the same twice
53
+ urls = aggressive_urls(opts)
54
+ urls -= passive_urls(opts) if opts[:mode] == :mixed
55
+
56
+ process_urls(urls, opts)
57
+ end
58
+
59
+ # @param [ Hash ] opts
60
+ #
61
+ # @return [ Array<String> ]
62
+ def aggressive_urls(_opts = {})
63
+ fail NotImplementedError
64
+ end
65
+
66
+ # @return [ String ]
67
+ def found_by
68
+ "#{self.class.to_s.demodulize.underscore.titleize} " \
69
+ "(#{caller_locations[7].label.capitalize} Detection)"
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,29 @@
1
+ module CMSScanner
2
+ module Finders
3
+ class Finder
4
+ module SmartURLChecker
5
+ # Findings
6
+ class Findings < Array
7
+ def <<(finding)
8
+ each do |f|
9
+ next unless f == finding && f.found_by == finding.found_by
10
+
11
+ # This makes sure entries added are unique
12
+ # and prevent pages redirecting to the same one to be added twice
13
+ entries_to_add = finding.interesting_entries - f.interesting_entries
14
+ return self if entries_to_add.empty?
15
+
16
+ entries_to_add.each { |entry| f.interesting_entries << entry }
17
+
18
+ f.confidence += finding.confidence
19
+
20
+ return self
21
+ end
22
+
23
+ super(finding) if finding # prevent nil values to be added
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -1,3 +1,5 @@
1
+ require 'cms_scanner/finders/confidence'
2
+
1
3
  module CMSScanner
2
4
  module Finders
3
5
  # Finding
@@ -22,9 +24,14 @@ module CMSScanner
22
24
  @interesting_entries ||= []
23
25
  end
24
26
 
25
- # @return [ Integer ]
27
+ # @return [ Confidence ]
26
28
  def confidence
27
- @confidence ||= 0
29
+ @confidence ||= Confidence.new(0)
30
+ end
31
+
32
+ # @param [ Integer, Confidence ] value
33
+ def confidence=(value)
34
+ @confidence = value.is_a?(Confidence) ? value : Confidence.new(value)
28
35
  end
29
36
 
30
37
  # @param [ Hash ] opts
@@ -3,27 +3,19 @@ module CMSScanner
3
3
  # Findings container
4
4
  class Findings < Array
5
5
  # Override to include the confirmed_by logic
6
- def <<(other)
6
+ #
7
+ # @param [ Finding ] finding
8
+ def <<(finding)
7
9
  each do |found|
8
- next unless found == other
10
+ next unless found == finding
9
11
 
10
- found.confirmed_by << other
11
-
12
- confidence = (found.confidence + other.confidence) / 1.5
13
- confidence = 100 if confidence > 100 || other.confidence == 100
14
-
15
- found.confidence = confidence.floor unless found.confidence == 100
12
+ found.confirmed_by << finding
13
+ found.confidence += finding.confidence
16
14
 
17
15
  return self
18
16
  end
19
17
 
20
- super(other)
21
- end
22
-
23
- # Append the elements of other into self AND returns self
24
- # This is not the default behaviour of Array#+ but it's intended
25
- def +(other)
26
- other.each { |f| self << f }
18
+ super(finding)
27
19
  end
28
20
  end
29
21
  end
@@ -17,7 +17,9 @@ module CMSScanner
17
17
  def run(opts = {})
18
18
  each do |finder|
19
19
  symbols_from_mode(opts[:mode]).each do |symbol|
20
- findings + [*finder.send(symbol, opts)]
20
+ [*finder.send(symbol, opts)].each do |found|
21
+ findings << found
22
+ end
21
23
  end
22
24
  end
23
25
 
@@ -1,4 +1,4 @@
1
1
  # Version
2
2
  module CMSScanner
3
- VERSION = '0.0.8'
3
+ VERSION = '0.0.9'
4
4
  end
@@ -57,7 +57,7 @@ describe CMSScanner::Finders::InterestingFile::FantasticoFileslist do
57
57
  @expected = CMSScanner::FantasticoFileslist.new(
58
58
  file,
59
59
  confidence: 100,
60
- found_by: 'FantasticoFileslist (aggressive detection)'
60
+ found_by: 'Fantastico Fileslist (Aggressive Detection)'
61
61
  )
62
62
  end
63
63
  end
@@ -28,7 +28,7 @@ describe CMSScanner::Finders::InterestingFile::Headers do
28
28
 
29
29
  context 'when headers' do
30
30
  it 'returns the result' do
31
- opts = { confidence: 100, found_by: 'Headers (passive detection)' }
31
+ opts = { confidence: 100, found_by: 'Headers (Passive Detection)' }
32
32
  @expected = CMSScanner::Headers.new(url, opts)
33
33
  end
34
34
  end
@@ -46,7 +46,7 @@ describe CMSScanner::Finders::InterestingFile::RobotsTxt do
46
46
  it 'returns the InterestingFile result' do
47
47
  @expected = CMSScanner::RobotsTxt.new(robots_txt,
48
48
  confidence: 100,
49
- found_by: 'RobotsTxt (aggressive detection)')
49
+ found_by: 'Robots Txt (Aggressive Detection)')
50
50
  end
51
51
  end
52
52
  end
@@ -44,7 +44,7 @@ describe CMSScanner::Finders::InterestingFile::SearchReplaceDB2 do
44
44
  @expected = CMSScanner::InterestingFile.new(
45
45
  file,
46
46
  confidence: 100,
47
- found_by: 'SearchReplaceDB2 (aggressive detection)'
47
+ found_by: 'Search Replace Db2 (Aggressive Detection)'
48
48
  )
49
49
  end
50
50
  end
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+
3
+ describe CMSScanner::Finders::Confidence do
4
+ subject(:confidence) { described_class.new(number) }
5
+
6
+ describe '#new' do
7
+ let(:number) { 10 }
8
+
9
+ its(:value) { should eq 10 }
10
+ end
11
+
12
+ describe '#+' do
13
+ context 'when the confidence is already at 100' do
14
+ let(:number) { 100 }
15
+
16
+ it 'returns 100' do
17
+ expect(confidence + 50).to eq 100
18
+ end
19
+ end
20
+
21
+ context 'when the confidence is below 100' do
22
+ context 'when it reaches 100' do
23
+ let(:number) { 90 }
24
+
25
+ it 'returns 100' do
26
+ expect(confidence + 50 + 80).to eq 100
27
+ end
28
+ end
29
+
30
+ context 'when it satys below 100' do
31
+ let(:number) { 50 }
32
+
33
+ it 'returns the new value' do
34
+ expect(confidence + 50).to eq 66
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ describe CMSScanner::Finders::Finder::SmartURLChecker::Findings do
4
+ subject(:findings) { described_class.new }
5
+
6
+ describe '<<' do
7
+ xit
8
+ end
9
+ end
@@ -3,45 +3,34 @@ require 'dummy_finding'
3
3
 
4
4
  describe CMSScanner::Finders::Findings do
5
5
  subject(:findings) { described_class.new }
6
- let(:dummy) { CMSScanner::DummyFinding }
6
+ let(:finding) { CMSScanner::DummyFinding }
7
7
 
8
8
  describe '#<<' do
9
9
  after { expect(findings).to eq @expected }
10
10
 
11
- context 'when empty array' do
11
+ context 'when no findings already in' do
12
12
  it 'adds it' do
13
- findings << 'empty-test'
14
- @expected = %w(empty-test)
13
+ findings << finding.new('empty-test')
14
+ @expected = [finding.new('empty-test')]
15
15
  end
16
16
  end
17
17
 
18
- context 'when not empty' do
19
- let(:confirmed) { dummy.new('confirmed') }
18
+ context 'when findings already in' do
19
+ let(:confirmed) { finding.new('confirmed') }
20
20
 
21
- before { findings << dummy.new('test') << confirmed }
21
+ before { findings << finding.new('test') << confirmed }
22
22
 
23
23
  it 'adds a confirmed result correctly' do
24
24
  confirmed_dup = confirmed.dup
25
25
  confirmed_dup.confidence = 100
26
26
 
27
- findings << dummy.new('test2')
27
+ findings << finding.new('test2')
28
28
  findings << confirmed_dup
29
29
 
30
30
  confirmed.confirmed_by = confirmed_dup
31
31
 
32
- @expected = [] << dummy.new('test') << confirmed << dummy.new('test2')
32
+ @expected = [] << finding.new('test') << confirmed << finding.new('test2')
33
33
  end
34
34
  end
35
35
  end
36
-
37
- describe '#+' do
38
- after { expect(findings).to eq @expected }
39
-
40
- it 'adds it/them' do
41
- # Dummy assignement to avoid the 'Operator used in void context'
42
- _ = findings + %w(test1 test2)
43
-
44
- @expected = %w(test1 test2)
45
- end
46
- end
47
36
  end
@@ -10,8 +10,8 @@ describe CMSScanner::Finders::IndependentFinders do
10
10
  let(:expected_aggressive) { finding.new('test', found_by: 'override', confidence: 100) }
11
11
  let(:expected_passive) do
12
12
  [
13
- finding.new('test', found_by: 'DummyFinder (passive detection)'),
14
- finding.new('spotted', found_by: 'NoAggressiveResult (passive detection)', confidence: 10)
13
+ finding.new('test', found_by: 'Dummy Finder (Passive Detection)'),
14
+ finding.new('spotted', found_by: 'No Aggressive Result (Passive Detection)', confidence: 10)
15
15
  ]
16
16
  end
17
17
 
@@ -45,7 +45,7 @@ describe CMSScanner::Finders::UniqueFinders do
45
45
  expect(finders[1]).to receive(:aggressive).ordered
46
46
  expect(finders[2]).to receive(:aggressive).ordered.and_return(dummy2_aggressive)
47
47
 
48
- @expected = finding.new('v1', confidence: 100, found_by: 'Dummy (passive detection)')
48
+ @expected = finding.new('v1', confidence: 100, found_by: 'Dummy (Passive Detection)')
49
49
  @expected.confirmed_by << finding.new('v1', confidence: 100, found_by: 'override')
50
50
  @expected.confirmed_by << finding.new('v1', confidence: 90)
51
51
  end
@@ -62,7 +62,7 @@ describe CMSScanner::Finders::UniqueFinders do
62
62
  finders.each { |f| expect(f).to_not receive(:aggressive) }
63
63
 
64
64
  @expected = finding.new('v2', confidence: 10,
65
- found_by: 'NoAggressive (passive detection)')
65
+ found_by: 'No Aggressive (Passive Detection)')
66
66
  end
67
67
  end
68
68
 
@@ -95,7 +95,7 @@ describe CMSScanner::Finders::UniqueFinders do
95
95
  expect(finders[1]).to_not receive(:aggressive)
96
96
  expect(finders[2]).to_not receive(:aggressive)
97
97
 
98
- @expected = finding.new('v1', confidence: 100, found_by: 'Dummy (passive detection)')
98
+ @expected = finding.new('v1', confidence: 100, found_by: 'Dummy (Passive Detection)')
99
99
  @expected.confirmed_by << finding.new('v1', confidence: 100, found_by: 'override')
100
100
  end
101
101
  end
@@ -111,7 +111,7 @@ describe CMSScanner::Finders::UniqueFinders do
111
111
  finders.each { |f| expect(f).to_not receive(:aggressive) }
112
112
 
113
113
  @expected = finding.new('v2', confidence: 10,
114
- found_by: 'NoAggressive (passive detection)')
114
+ found_by: 'No Aggressive (Passive Detection)')
115
115
  end
116
116
  end
117
117
 
@@ -12,7 +12,7 @@ shared_examples CMSScanner::Finders::Finding do
12
12
  end
13
13
  end
14
14
 
15
- describe '#confidence' do
15
+ describe '#confidence, #confidence=' do
16
16
  its(:confidence) { should eql 0 }
17
17
 
18
18
  context 'when already set' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cms_scanner
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - WPScanTeam - Erwan Le Rousseau
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-17 00:00:00.000000000 Z
11
+ date: 2015-01-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: opt_parse_validator
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.0.4
19
+ version: 0.0.5
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.0.4
26
+ version: 0.0.5
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: typhoeus
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.6.9
33
+ version: '0.7'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.6.9
40
+ version: '0.7'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: nokogiri
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -84,16 +84,16 @@ dependencies:
84
84
  name: rake
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ">="
87
+ - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '0'
89
+ version: '10.4'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ">="
94
+ - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '0'
96
+ version: '10.4'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rspec
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -112,16 +112,16 @@ dependencies:
112
112
  name: rspec-its
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - ">="
115
+ - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: '0'
117
+ version: '1.1'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - ">="
122
+ - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: '0'
124
+ version: '1.1'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: bundler
127
127
  requirement: !ruby/object:Gem::Requirement
@@ -239,7 +239,10 @@ files:
239
239
  - lib/cms_scanner/controllers.rb
240
240
  - lib/cms_scanner/errors/auth_errors.rb
241
241
  - lib/cms_scanner/finders.rb
242
+ - lib/cms_scanner/finders/confidence.rb
242
243
  - lib/cms_scanner/finders/finder.rb
244
+ - lib/cms_scanner/finders/finder/smart_url_checker.rb
245
+ - lib/cms_scanner/finders/finder/smart_url_checker/findings.rb
243
246
  - lib/cms_scanner/finders/finding.rb
244
247
  - lib/cms_scanner/finders/findings.rb
245
248
  - lib/cms_scanner/finders/independent_finder.rb
@@ -319,6 +322,8 @@ files:
319
322
  - spec/lib/cms_scanner_spec.rb
320
323
  - spec/lib/controller_spec.rb
321
324
  - spec/lib/controllers_spec.rb
325
+ - spec/lib/finders/confidence_spec.rb
326
+ - spec/lib/finders/finder/smart_url_checker/findings_spec.rb
322
327
  - spec/lib/finders/findings_spec.rb
323
328
  - spec/lib/finders/independent_finders_spec.rb
324
329
  - spec/lib/finders/unique_finder_spec.rb
@@ -354,7 +359,7 @@ files:
354
359
  - spec/spec_helper.rb
355
360
  homepage: https://github.com/wpscanteam/CMSScanner
356
361
  licenses:
357
- - GPL-3.0
362
+ - MIT
358
363
  metadata: {}
359
364
  post_install_message:
360
365
  rdoc_options: []
@@ -372,7 +377,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
372
377
  version: '0'
373
378
  requirements: []
374
379
  rubyforge_project:
375
- rubygems_version: 2.2.2
380
+ rubygems_version: 2.4.5
376
381
  signing_key:
377
382
  specification_version: 4
378
383
  summary: Experimental CMSScanner
@@ -435,6 +440,8 @@ test_files:
435
440
  - spec/lib/cms_scanner_spec.rb
436
441
  - spec/lib/controller_spec.rb
437
442
  - spec/lib/controllers_spec.rb
443
+ - spec/lib/finders/confidence_spec.rb
444
+ - spec/lib/finders/finder/smart_url_checker/findings_spec.rb
438
445
  - spec/lib/finders/findings_spec.rb
439
446
  - spec/lib/finders/independent_finders_spec.rb
440
447
  - spec/lib/finders/unique_finder_spec.rb