cms_scanner 0.0.18 → 0.0.19
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 +4 -4
- data/app/controllers/core.rb +4 -3
- data/app/views/cli/core/finished.erb +1 -0
- data/app/views/json/core/finished.erb +1 -0
- data/cms_scanner.gemspec +13 -3
- data/lib/cms_scanner.rb +14 -2
- data/lib/cms_scanner/finders/finder.rb +16 -7
- data/lib/cms_scanner/finders/finder/enumerator.rb +4 -28
- data/lib/cms_scanner/finders/finder/fingerprinter.rb +60 -0
- data/lib/cms_scanner/finders/finding.rb +1 -1
- data/lib/cms_scanner/target/scope.rb +4 -1
- data/lib/cms_scanner/target/server/generic.rb +1 -1
- data/lib/cms_scanner/typhoeus/hydra.rb +10 -0
- data/lib/cms_scanner/version.rb +1 -1
- metadata +5 -203
- data/.gitignore +0 -7
- data/.rspec +0 -2
- data/.rubocop.yml +0 -10
- data/.travis.yml +0 -17
- data/Gemfile +0 -6
- data/Rakefile +0 -9
- data/spec/app/controllers/core_spec.rb +0 -167
- data/spec/app/controllers/interesting_files_spec.rb +0 -70
- data/spec/app/finders/interesting_files/fantastico_fileslist_spec.rb +0 -66
- data/spec/app/finders/interesting_files/headers_spec.rb +0 -36
- data/spec/app/finders/interesting_files/robots_txt_spec.rb +0 -54
- data/spec/app/finders/interesting_files/search_replace_db_2_spec.rb +0 -53
- data/spec/app/finders/interesting_files/xml_rpc_spec.rb +0 -136
- data/spec/app/finders/interesting_files_spec.rb +0 -12
- data/spec/app/formatters/cli_no_colour_spec.rb +0 -14
- data/spec/app/formatters/cli_spec.rb +0 -30
- data/spec/app/formatters/json_spec.rb +0 -30
- data/spec/app/models/fantastico_fileslist_spec.rb +0 -31
- data/spec/app/models/headers_spec.rb +0 -51
- data/spec/app/models/interesting_file_spec.rb +0 -69
- data/spec/app/models/robots_txt_spec.rb +0 -27
- data/spec/app/models/version_spec.rb +0 -51
- data/spec/app/models/xml_rpc_spec.rb +0 -46
- data/spec/app/views_spec.rb +0 -35
- data/spec/cache/.gitignore +0 -4
- data/spec/dummy_finding.rb +0 -25
- data/spec/dummy_independent_finders.rb +0 -26
- data/spec/dummy_unique_finders.rb +0 -33
- data/spec/fixtures/finders/interesting_files/fantastico_fileslist/fantastico_fileslist.txt +0 -12
- data/spec/fixtures/finders/interesting_files/file.txt +0 -4
- data/spec/fixtures/finders/interesting_files/headers/interesting.txt +0 -16
- data/spec/fixtures/finders/interesting_files/headers/no_interesting.txt +0 -12
- data/spec/fixtures/finders/interesting_files/robots_txt/robots.txt +0 -10
- data/spec/fixtures/finders/interesting_files/search_replace_db_2/searchreplacedb2.php +0 -188
- data/spec/fixtures/finders/interesting_files/xml_rpc/homepage_in_scope_pingback.html +0 -7
- data/spec/fixtures/finders/interesting_files/xml_rpc/homepage_out_of_scope_pingback.html +0 -7
- data/spec/fixtures/finders/interesting_files/xml_rpc/xmlrpc.php +0 -1
- data/spec/fixtures/output.txt +0 -0
- data/spec/fixtures/target/comments.html +0 -29
- data/spec/fixtures/target/platform/php/debug_log/debug.log +0 -2
- data/spec/fixtures/target/platform/php/fpd/wp_rss_functions.php +0 -2
- data/spec/fixtures/target/scope/index.html +0 -23
- data/spec/fixtures/target/server/apache/directory_listing/2.2.16.html +0 -15
- data/spec/fixtures/target/server/generic/server/apache/basic.txt +0 -5
- data/spec/fixtures/target/server/generic/server/iis/basic.txt +0 -6
- data/spec/fixtures/target/server/generic/server/not_detected.txt +0 -3
- data/spec/fixtures/target/server/iis/directory_listing/no_parent.html +0 -3
- data/spec/fixtures/target/server/iis/directory_listing/with_parent.html +0 -3
- data/spec/fixtures/views/base/ctrl/local.erb +0 -1
- data/spec/fixtures/views/base/ctrl/test.erb +0 -3
- data/spec/fixtures/views/base/global.erb +0 -1
- data/spec/fixtures/views/base/test.erb +0 -2
- data/spec/fixtures/views/based_format/test.erb +0 -1
- data/spec/fixtures/views/json/render_me.erb +0 -4
- data/spec/lib/browser_spec.rb +0 -140
- data/spec/lib/cache/file_store_spec.rb +0 -100
- data/spec/lib/cache/typhoeus_spec.rb +0 -28
- data/spec/lib/cms_scanner_spec.rb +0 -49
- data/spec/lib/controller_spec.rb +0 -30
- data/spec/lib/controllers_spec.rb +0 -48
- data/spec/lib/finders/confidence_spec.rb +0 -39
- data/spec/lib/finders/finder/enumerator_spec.rb +0 -89
- data/spec/lib/finders/finder/smart_url_checker/findings_spec.rb +0 -39
- data/spec/lib/finders/finder/smart_url_checker_spec.rb +0 -50
- data/spec/lib/finders/finder_spec.rb +0 -11
- data/spec/lib/finders/findings_spec.rb +0 -36
- data/spec/lib/finders/independent_finders_spec.rb +0 -134
- data/spec/lib/finders/same_type_finder_spec.rb +0 -24
- data/spec/lib/finders/same_type_finders_spec.rb +0 -126
- data/spec/lib/finders/unique_finder_spec.rb +0 -24
- data/spec/lib/finders/unique_finders_spec.rb +0 -222
- data/spec/lib/formatter_spec.rb +0 -145
- data/spec/lib/public_suffix/domain_spec.rb +0 -49
- data/spec/lib/sub_scanner_spec.rb +0 -45
- data/spec/lib/target/hashes_spec.rb +0 -90
- data/spec/lib/target/platforms_spec.rb +0 -13
- data/spec/lib/target/scope_spec.rb +0 -103
- data/spec/lib/target/servers_spec.rb +0 -13
- data/spec/lib/target_spec.rb +0 -69
- data/spec/lib/vulnerability/references_spec.rb +0 -75
- data/spec/lib/vulnerability_spec.rb +0 -27
- data/spec/lib/web_site_spec.rb +0 -121
- data/spec/output/core/finished.cli_no_colour +0 -3
- data/spec/output/core/finished.json +0 -5
- data/spec/output/core/started.cli_no_colour +0 -3
- data/spec/output/core/started.json +0 -5
- data/spec/output/interesting_files/empty.cli_no_colour +0 -2
- data/spec/output/interesting_files/empty.json +0 -5
- data/spec/output/interesting_files/findings.cli_no_colour +0 -30
- data/spec/output/interesting_files/findings.json +0 -75
- data/spec/shared_examples.rb +0 -11
- data/spec/shared_examples/browser_actions.rb +0 -30
- data/spec/shared_examples/finding.rb +0 -54
- data/spec/shared_examples/formatter_buffer.rb +0 -6
- data/spec/shared_examples/formatter_class_methods.rb +0 -26
- data/spec/shared_examples/independent_finder.rb +0 -31
- data/spec/shared_examples/target/platform/php.rb +0 -56
- data/spec/shared_examples/target/server/apache.rb +0 -32
- data/spec/shared_examples/target/server/generic.rb +0 -33
- data/spec/shared_examples/target/server/iis.rb +0 -37
- data/spec/shared_examples/views/core.rb +0 -26
- data/spec/shared_examples/views/interesting_files.rb +0 -36
- data/spec/spec_helper.rb +0 -43
data/spec/lib/controller_spec.rb
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe CMSScanner::Controller do
|
|
4
|
-
subject(:controller) { described_class::Base.new }
|
|
5
|
-
|
|
6
|
-
context 'when parsed_options' do
|
|
7
|
-
before { described_class::Base.parsed_options = parsed_options }
|
|
8
|
-
|
|
9
|
-
let(:parsed_options) { { url: 'http://example.com/' } }
|
|
10
|
-
|
|
11
|
-
its(:parsed_options) { should eq(parsed_options) }
|
|
12
|
-
its(:formatter) { should be_a CMSScanner::Formatter::Cli }
|
|
13
|
-
its(:user_interaction?) { should be true }
|
|
14
|
-
its(:target) { should be_a CMSScanner::Target }
|
|
15
|
-
its('target.scope.domains') { should eq [PublicSuffix.parse('example.com')] }
|
|
16
|
-
|
|
17
|
-
context 'when output option' do
|
|
18
|
-
let(:parsed_options) { super().merge(output: '/tmp/spec.txt') }
|
|
19
|
-
|
|
20
|
-
its(:user_interaction?) { should be false }
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
describe '#render' do
|
|
24
|
-
it 'calls the formatter#render' do
|
|
25
|
-
expect(controller.formatter).to receive(:render).with('test', { verbose: nil }, 'base')
|
|
26
|
-
controller.render('test')
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
module CMSScanner
|
|
4
|
-
module Controller
|
|
5
|
-
class Spec < Base
|
|
6
|
-
end
|
|
7
|
-
end
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
describe CMSScanner::Controllers do
|
|
11
|
-
subject(:controllers) { described_class.new }
|
|
12
|
-
let(:controller_mod) { CMSScanner::Controller }
|
|
13
|
-
|
|
14
|
-
describe '#<<' do
|
|
15
|
-
its(:size) { should be 0 }
|
|
16
|
-
|
|
17
|
-
context 'when controllers are added' do
|
|
18
|
-
before { controllers << controller_mod::Spec.new << controller_mod::Base.new }
|
|
19
|
-
|
|
20
|
-
its(:size) { should be 2 }
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
context 'when a controller is added twice' do
|
|
24
|
-
before { 2.times { controllers << controller_mod::Spec.new } }
|
|
25
|
-
|
|
26
|
-
its(:size) { should be 1 }
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
it 'returns self' do
|
|
30
|
-
expect(controllers << controller_mod::Spec.new).to be_a described_class
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
describe '#run' do
|
|
35
|
-
it 'runs the before_scan, run and after_scan methods of each controller' do
|
|
36
|
-
spec = controller_mod::Spec.new
|
|
37
|
-
base = controller_mod::Base.new
|
|
38
|
-
|
|
39
|
-
controllers << base << spec
|
|
40
|
-
|
|
41
|
-
[base, spec].each { |c| expect(c).to receive(:before_scan).ordered }
|
|
42
|
-
[base, spec].each { |c| expect(c).to receive(:run).ordered }
|
|
43
|
-
[spec, base].each { |c| expect(c).to receive(:after_scan).ordered }
|
|
44
|
-
|
|
45
|
-
controllers.run
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
end
|
|
@@ -1,39 +0,0 @@
|
|
|
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
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe CMSScanner::Finders::Finder::Enumerator do
|
|
4
|
-
# Dummy class to test the module
|
|
5
|
-
class DummyFinder < CMSScanner::Finders::Finder
|
|
6
|
-
include CMSScanner::Finders::Finder::Enumerator
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
subject(:finder) { DummyFinder.new(target) }
|
|
10
|
-
let(:target) { CMSScanner::Target.new('http://e.org') }
|
|
11
|
-
|
|
12
|
-
context 'when #target_urls not implemented' do
|
|
13
|
-
it 'raises errors' do
|
|
14
|
-
expect { finder.target_urls }.to raise_error NotImplementedError
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
describe '#progress_bar_title' do
|
|
19
|
-
it 'returns a space' do
|
|
20
|
-
expect(finder.progress_bar_title).to eql ' '
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
its(:browser) { should be_a CMSScanner::Browser }
|
|
25
|
-
|
|
26
|
-
its(:request_params) { should eql(cache_ttl: 0) }
|
|
27
|
-
|
|
28
|
-
its(:hydra) { should be_a Typhoeus::Hydra }
|
|
29
|
-
|
|
30
|
-
describe '#aggressive' do
|
|
31
|
-
before do
|
|
32
|
-
expect(finder).to receive(:target_urls).and_return(target_urls)
|
|
33
|
-
target_urls.each { |url, _| stub_request(:get, url).to_return(status: 200, body: 'rspec') }
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
let(:target_urls) do
|
|
37
|
-
{
|
|
38
|
-
target.url('1') => 1,
|
|
39
|
-
target.url('2') => 2
|
|
40
|
-
}
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
context 'when no opts' do
|
|
44
|
-
let(:opts) { {} }
|
|
45
|
-
|
|
46
|
-
context 'when response are the homepage or custom 404' do
|
|
47
|
-
before { expect(finder.target).to receive(:homepage_or_404?).twice.and_return(true) }
|
|
48
|
-
|
|
49
|
-
it 'does not yield anything' do
|
|
50
|
-
expect { |b| finder.enumerate(opts, &b) }.to_not yield_control
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
context 'when not the hompage or 404' do
|
|
55
|
-
before { expect(finder.target).to receive(:homepage_or_404?).twice }
|
|
56
|
-
|
|
57
|
-
it 'yield the expected items' do
|
|
58
|
-
expect { |b| finder.enumerate(opts, &b) }.to yield_successive_args(
|
|
59
|
-
[Typhoeus::Response, 1], [Typhoeus::Response, 2]
|
|
60
|
-
)
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
context 'when opts' do
|
|
66
|
-
context 'when :exclude_content' do
|
|
67
|
-
before { expect(finder.target).to receive(:homepage_or_404?).twice }
|
|
68
|
-
|
|
69
|
-
context 'when it matches' do
|
|
70
|
-
let(:opts) { { exclude_content: /spec/i } }
|
|
71
|
-
|
|
72
|
-
it 'does not yield anything' do
|
|
73
|
-
expect { |b| finder.enumerate(opts, &b) }.to_not yield_control
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
context 'when it does not match' do
|
|
78
|
-
let(:opts) { { exclude_content: /not/i } }
|
|
79
|
-
|
|
80
|
-
it 'yield the expected items' do
|
|
81
|
-
expect { |b| finder.enumerate(opts, &b) }.to yield_successive_args(
|
|
82
|
-
[Typhoeus::Response, 1], [Typhoeus::Response, 2]
|
|
83
|
-
)
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
end
|
|
87
|
-
end
|
|
88
|
-
end
|
|
89
|
-
end
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
require 'dummy_finding'
|
|
3
|
-
|
|
4
|
-
describe CMSScanner::Finders::Finder::SmartURLChecker::Findings do
|
|
5
|
-
subject(:findings) { described_class.new }
|
|
6
|
-
let(:finding) { CMSScanner::DummyFinding }
|
|
7
|
-
|
|
8
|
-
describe '#<<' do
|
|
9
|
-
after { expect(findings).to eq @expected }
|
|
10
|
-
|
|
11
|
-
context 'when no findings already in' do
|
|
12
|
-
it 'adds it' do
|
|
13
|
-
findings << finding.new('empty-test')
|
|
14
|
-
@expected = [finding.new('empty-test')]
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
context 'when findings already in' do
|
|
19
|
-
let(:confirmed) { finding.new('confirmed', interesting_entries: entries) }
|
|
20
|
-
let(:entries) { %w(e1 e2) }
|
|
21
|
-
|
|
22
|
-
before { findings << finding.new('test') << confirmed }
|
|
23
|
-
|
|
24
|
-
it 'adds a confirmed result correctly' do
|
|
25
|
-
confirmed_dup = confirmed.dup
|
|
26
|
-
confirmed_dup.confidence = 100
|
|
27
|
-
confirmed_dup.interesting_entries = %w(e2 e3)
|
|
28
|
-
|
|
29
|
-
findings << confirmed_dup
|
|
30
|
-
|
|
31
|
-
confirmed.confirmed_by = confirmed_dup
|
|
32
|
-
|
|
33
|
-
@expected = [] << finding.new('test') << confirmed
|
|
34
|
-
|
|
35
|
-
expect(findings[1].interesting_entries).to eql(%w(e1 e2 e3))
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
end
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe CMSScanner::Finders::Finder::SmartURLChecker do
|
|
4
|
-
# Dummy class to test the module
|
|
5
|
-
class DummyFinder < CMSScanner::Finders::Finder
|
|
6
|
-
include CMSScanner::Finders::Finder::SmartURLChecker
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
subject(:finder) { DummyFinder.new(target) }
|
|
10
|
-
let(:target) { CMSScanner::Target.new('http://e.org') }
|
|
11
|
-
|
|
12
|
-
before { stub_request(:get, target.url) }
|
|
13
|
-
|
|
14
|
-
context 'when methods are not implemented' do
|
|
15
|
-
it 'raises errors' do
|
|
16
|
-
expect { finder.process_urls([]) }.to raise_error NotImplementedError
|
|
17
|
-
expect { finder.passive }.to raise_error NotImplementedError
|
|
18
|
-
expect { finder.aggressive_urls }.to raise_error NotImplementedError
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
describe '#aggressive' do
|
|
23
|
-
before { expect(finder).to receive(:aggressive_urls).and_return(%w(u1 u2 u3)) }
|
|
24
|
-
|
|
25
|
-
after do
|
|
26
|
-
expect(finder).to receive(:process_urls).with(@expected_urls, mode: mode)
|
|
27
|
-
finder.aggressive(mode: mode)
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
context 'when :mode = :mixed' do
|
|
31
|
-
before { expect(finder).to receive(:passive_urls).and_return(%w(u2)) }
|
|
32
|
-
|
|
33
|
-
let(:mode) { :mixed }
|
|
34
|
-
|
|
35
|
-
it 'calls #process_urls with the correct argument' do
|
|
36
|
-
@expected_urls = %w(u1 u3)
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
[:passive, :aggressive].each do |m|
|
|
41
|
-
context "when :mode = #{m}" do
|
|
42
|
-
let(:mode) { m }
|
|
43
|
-
|
|
44
|
-
it 'calls #process_urls with the correct argument' do
|
|
45
|
-
@expected_urls = %w(u1 u2 u3)
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
end
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe CMSScanner::Finders::Finder do
|
|
4
|
-
subject(:finder) { described_class.new('target') }
|
|
5
|
-
|
|
6
|
-
describe '#progress_bar' do
|
|
7
|
-
it 'returns a ProgressBar::Base' do
|
|
8
|
-
expect(finder.progress_bar(12)).to be_a ProgressBar::Base
|
|
9
|
-
end
|
|
10
|
-
end
|
|
11
|
-
end
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
require 'dummy_finding'
|
|
3
|
-
|
|
4
|
-
describe CMSScanner::Finders::Findings do
|
|
5
|
-
subject(:findings) { described_class.new }
|
|
6
|
-
let(:finding) { CMSScanner::DummyFinding }
|
|
7
|
-
|
|
8
|
-
describe '#<<' do
|
|
9
|
-
after { expect(findings).to eq @expected }
|
|
10
|
-
|
|
11
|
-
context 'when no findings already in' do
|
|
12
|
-
it 'adds it' do
|
|
13
|
-
findings << finding.new('empty-test')
|
|
14
|
-
@expected = [finding.new('empty-test')]
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
context 'when findings already in' do
|
|
19
|
-
let(:confirmed) { finding.new('confirmed') }
|
|
20
|
-
|
|
21
|
-
before { findings << finding.new('test') << confirmed }
|
|
22
|
-
|
|
23
|
-
it 'adds a confirmed result correctly' do
|
|
24
|
-
confirmed_dup = confirmed.dup
|
|
25
|
-
confirmed_dup.confidence = 100
|
|
26
|
-
|
|
27
|
-
findings << finding.new('test2')
|
|
28
|
-
findings << confirmed_dup
|
|
29
|
-
|
|
30
|
-
confirmed.confirmed_by = confirmed_dup
|
|
31
|
-
|
|
32
|
-
@expected = [] << finding.new('test') << confirmed << finding.new('test2')
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
require 'dummy_independent_finders'
|
|
3
|
-
|
|
4
|
-
describe CMSScanner::Finders::IndependentFinders do
|
|
5
|
-
subject(:finders) { described_class.new }
|
|
6
|
-
|
|
7
|
-
describe '#run' do
|
|
8
|
-
let(:target) { 'target' }
|
|
9
|
-
let(:finding) { CMSScanner::DummyFinding }
|
|
10
|
-
let(:expected_aggressive) { finding.new('test', found_by: 'override', confidence: 100) }
|
|
11
|
-
let(:expected_passive) do
|
|
12
|
-
[
|
|
13
|
-
finding.new('test', found_by: 'Dummy Finder (Passive Detection)'),
|
|
14
|
-
finding.new('spotted', found_by: 'No Aggressive Result (Passive Detection)', confidence: 10)
|
|
15
|
-
]
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
before do
|
|
19
|
-
finders <<
|
|
20
|
-
CMSScanner::Finders::Independent::DummyFinder.new(target) <<
|
|
21
|
-
CMSScanner::Finders::Independent::NoAggressiveResult.new(target)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
describe 'method calls order' do
|
|
25
|
-
after { finders.run(mode: mode) }
|
|
26
|
-
|
|
27
|
-
[:passive, :aggressive].each do |current_mode|
|
|
28
|
-
context "when #{current_mode} mode" do
|
|
29
|
-
let(:mode) { current_mode }
|
|
30
|
-
|
|
31
|
-
it "calls the #{current_mode} method on each finder" do
|
|
32
|
-
finders.each do |f|
|
|
33
|
-
expect(f).to receive(current_mode).with(hash_including(found: [])).ordered
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
context 'when :mixed mode' do
|
|
40
|
-
let(:mode) { :mixed }
|
|
41
|
-
|
|
42
|
-
it 'calls :passive then :aggressive on each finder' do
|
|
43
|
-
finders.each do |finder|
|
|
44
|
-
[:passive, :aggressive].each do |method|
|
|
45
|
-
expect(finder).to receive(method).with(hash_including(found: [])).ordered
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
describe 'returned results' do
|
|
53
|
-
before do
|
|
54
|
-
@found = finders.run(mode: mode)
|
|
55
|
-
|
|
56
|
-
expect(@found).to be_a(CMSScanner::Finders::Findings)
|
|
57
|
-
|
|
58
|
-
@found.each { |f| expect(f).to be_a finding }
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
context 'when :passive mode' do
|
|
62
|
-
let(:mode) { :passive }
|
|
63
|
-
|
|
64
|
-
it 'returns 2 results' do
|
|
65
|
-
expect(@found.size).to eq 2
|
|
66
|
-
expect(@found.first).to eql expected_passive.first
|
|
67
|
-
expect(@found.last).to eql expected_passive.last
|
|
68
|
-
end
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
context 'when :aggressive mode' do
|
|
72
|
-
let(:mode) { :aggressive }
|
|
73
|
-
|
|
74
|
-
it 'returns 1 result' do
|
|
75
|
-
expect(@found.size).to eq 1
|
|
76
|
-
expect(@found.first).to eql expected_aggressive
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
context 'when :mixed mode' do
|
|
81
|
-
let(:mode) { :mixed }
|
|
82
|
-
|
|
83
|
-
it 'returns 2 results' do
|
|
84
|
-
# As the first passive is confirmed by the expected_aggressive, the confidence
|
|
85
|
-
# increases and should be 100% due to the expected_aggressive.confidence
|
|
86
|
-
first_passive = expected_passive.first.dup
|
|
87
|
-
first_passive.confidence = 100
|
|
88
|
-
|
|
89
|
-
expect(@found.size).to eq 2
|
|
90
|
-
expect(@found.first).to eql first_passive
|
|
91
|
-
expect(@found.first.confirmed_by).to eql [expected_aggressive]
|
|
92
|
-
expect(@found.last).to eql expected_passive.last
|
|
93
|
-
end
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
context 'when multiple results returned' do
|
|
97
|
-
xit
|
|
98
|
-
end
|
|
99
|
-
end
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
describe '#symbols_from_mode' do
|
|
103
|
-
after { expect(finders.symbols_from_mode(@mode)).to eq @expected }
|
|
104
|
-
|
|
105
|
-
context 'when :mixed' do
|
|
106
|
-
it 'returns [:passive, :aggressive]' do
|
|
107
|
-
@mode = :mixed
|
|
108
|
-
@expected = [:passive, :aggressive]
|
|
109
|
-
end
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
context 'when :passive or :aggresssive' do
|
|
113
|
-
[:passive, :aggressive].each do |symbol|
|
|
114
|
-
it 'returns it in an array' do
|
|
115
|
-
@mode = symbol
|
|
116
|
-
@expected = [*symbol]
|
|
117
|
-
end
|
|
118
|
-
end
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
context 'otherwise' do
|
|
122
|
-
it 'returns []' do
|
|
123
|
-
@mode = :unallowed
|
|
124
|
-
@expected = []
|
|
125
|
-
end
|
|
126
|
-
end
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
describe '#findings' do
|
|
130
|
-
it 'returns a Findings object' do
|
|
131
|
-
expect(finders.findings).to be_a CMSScanner::Finders::Findings
|
|
132
|
-
end
|
|
133
|
-
end
|
|
134
|
-
end
|