cms_scanner 0.0.8 → 0.0.9

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: 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