metasploit_data_models 0.24.4 → 0.24.5
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/.rspec +3 -3
- data/.travis.yml +3 -6
- data/CONTRIBUTING.md +52 -10
- data/Gemfile +8 -1
- data/Rakefile +0 -23
- data/app/models/mdm/api_key.rb +1 -41
- data/app/models/mdm/client.rb +1 -41
- data/app/models/mdm/cred.rb +19 -107
- data/app/models/mdm/event.rb +1 -48
- data/app/models/mdm/exploit_attempt.rb +16 -65
- data/app/models/mdm/exploited_host.rb +1 -28
- data/app/models/mdm/host_detail.rb +1 -45
- data/app/models/mdm/host_tag.rb +8 -6
- data/app/models/mdm/listener.rb +1 -53
- data/app/models/mdm/macro.rb +0 -42
- data/app/models/mdm/mod_ref.rb +0 -21
- data/app/models/mdm/module/action.rb +0 -15
- data/app/models/mdm/module/arch.rb +0 -10
- data/app/models/mdm/module/author.rb +0 -16
- data/app/models/mdm/module/mixin.rb +0 -13
- data/app/models/mdm/module/platform.rb +0 -11
- data/app/models/mdm/module/target.rb +0 -18
- data/app/models/mdm/nexpose_console.rb +4 -82
- data/app/models/mdm/profile.rb +0 -36
- data/app/models/mdm/route.rb +5 -17
- data/app/models/mdm/session_event.rb +1 -33
- data/app/models/mdm/tag.rb +10 -49
- data/app/models/mdm/task.rb +45 -94
- data/app/models/mdm/task_cred.rb +0 -29
- data/app/models/mdm/task_host.rb +0 -25
- data/app/models/mdm/task_service.rb +0 -25
- data/app/models/mdm/task_session.rb +0 -25
- data/app/models/mdm/user.rb +6 -188
- data/app/models/mdm/vuln_attempt.rb +12 -37
- data/app/models/mdm/vuln_detail.rb +5 -139
- data/app/models/mdm/vuln_ref.rb +1 -4
- data/app/models/mdm/web_form.rb +1 -35
- data/app/models/mdm/web_page.rb +1 -70
- data/app/models/mdm/web_site.rb +1 -51
- data/app/models/mdm/wmap_request.rb +0 -85
- data/app/models/mdm/wmap_target.rb +0 -40
- data/app/models/mdm/workspace.rb +14 -152
- data/app/models/metasploit_data_models/automatic_exploitation.rb +16 -0
- data/app/models/metasploit_data_models/automatic_exploitation/match.rb +24 -19
- data/app/models/metasploit_data_models/automatic_exploitation/match_result.rb +5 -33
- data/app/models/metasploit_data_models/automatic_exploitation/match_set.rb +4 -22
- data/app/models/metasploit_data_models/automatic_exploitation/run.rb +3 -13
- data/app/models/metasploit_data_models/ip_address/v4/segmented.rb +1 -1
- data/app/models/metasploit_data_models/module_run.rb +1 -1
- data/app/models/metasploit_data_models/search/visitor/where.rb +1 -1
- data/app/validators/ip_format_validator.rb +0 -4
- data/app/validators/parameters_validator.rb +0 -12
- data/app/validators/password_is_strong_validator.rb +1 -10
- data/lib/mdm/host/operating_system_normalization.rb +10 -7
- data/lib/metasploit_data_models.rb +0 -4
- data/lib/metasploit_data_models/engine.rb +0 -2
- data/lib/metasploit_data_models/serialized_prefs.rb +0 -6
- data/lib/metasploit_data_models/version.rb +10 -24
- data/lib/tasks/yard.rake +33 -0
- data/metasploit_data_models.gemspec +2 -9
- data/spec/app/models/mdm/api_key_spec.rb +3 -1
- data/spec/app/models/mdm/client_spec.rb +11 -9
- data/spec/app/models/mdm/cred_spec.rb +54 -42
- data/spec/app/models/mdm/event_spec.rb +23 -21
- data/spec/app/models/mdm/exploit_attempt_spec.rb +21 -19
- data/spec/app/models/mdm/exploited_host_spec.rb +13 -11
- data/spec/app/models/mdm/host_detail_spec.rb +17 -15
- data/spec/app/models/mdm/host_spec.rb +260 -261
- data/spec/app/models/mdm/host_tag_spec.rb +8 -6
- data/spec/app/models/mdm/listener_spec.rb +32 -30
- data/spec/app/models/mdm/loot_spec.rb +23 -21
- data/spec/app/models/mdm/macro_spec.rb +3 -1
- data/spec/app/models/mdm/mod_ref_spec.rb +3 -1
- data/spec/app/models/mdm/module/action_spec.rb +12 -10
- data/spec/app/models/mdm/module/arch_spec.rb +12 -10
- data/spec/app/models/mdm/module/author_spec.rb +17 -22
- data/spec/app/models/mdm/module/detail_spec.rb +75 -184
- data/spec/app/models/mdm/module/mixin_spec.rb +12 -10
- data/spec/app/models/mdm/module/platform_spec.rb +12 -10
- data/spec/app/models/mdm/module/ref_spec.rb +12 -10
- data/spec/app/models/mdm/module/target_spec.rb +15 -13
- data/spec/app/models/mdm/nexpose_console_spec.rb +37 -35
- data/spec/app/models/mdm/note_spec.rb +25 -23
- data/spec/app/models/mdm/profile_spec.rb +3 -1
- data/spec/app/models/mdm/ref_spec.rb +12 -10
- data/spec/app/models/mdm/route_spec.rb +8 -6
- data/spec/app/models/mdm/service_spec.rb +40 -38
- data/spec/app/models/mdm/session_event_spec.rb +12 -10
- data/spec/app/models/mdm/session_spec.rb +15 -13
- data/spec/app/models/mdm/tag_spec.rb +29 -29
- data/spec/app/models/mdm/task_cred_spec.rb +11 -9
- data/spec/app/models/mdm/task_host_spec.rb +11 -9
- data/spec/app/models/mdm/task_service_spec.rb +11 -9
- data/spec/app/models/mdm/task_session_spec.rb +9 -7
- data/spec/app/models/mdm/task_spec.rb +29 -27
- data/spec/app/models/mdm/user_spec.rb +19 -17
- data/spec/app/models/mdm/vuln_attempt_spec.rb +16 -14
- data/spec/app/models/mdm/vuln_detail_spec.rb +28 -26
- data/spec/app/models/mdm/vuln_ref_spec.rb +10 -8
- data/spec/app/models/mdm/vuln_spec.rb +26 -24
- data/spec/app/models/mdm/web_form_spec.rb +13 -11
- data/spec/app/models/mdm/web_page_spec.rb +21 -19
- data/spec/app/models/mdm/web_site_spec.rb +23 -21
- data/spec/app/models/mdm/web_vuln_spec.rb +65 -63
- data/spec/app/models/mdm/wmap_request_spec.rb +3 -1
- data/spec/app/models/mdm/wmap_target_spec.rb +3 -1
- data/spec/app/models/mdm/workspace_spec.rb +100 -97
- data/spec/app/models/metasploit_data_models/automatic_exploitation/match_result_spec.rb +5 -3
- data/spec/app/models/metasploit_data_models/automatic_exploitation/match_set_spec.rb +15 -13
- data/spec/app/models/metasploit_data_models/automatic_exploitation/match_spec.rb +3 -1
- data/spec/app/models/metasploit_data_models/automatic_exploitation/run_spec.rb +3 -1
- data/spec/app/models/metasploit_data_models/ip_address/v4/cidr_spec.rb +12 -10
- data/spec/app/models/metasploit_data_models/ip_address/v4/nmap_spec.rb +6 -4
- data/spec/app/models/metasploit_data_models/ip_address/v4/range_spec.rb +23 -21
- data/spec/app/models/metasploit_data_models/ip_address/v4/segment/nmap/list_spec.rb +11 -9
- data/spec/app/models/metasploit_data_models/ip_address/v4/segment/nmap/range_spec.rb +23 -21
- data/spec/app/models/metasploit_data_models/ip_address/v4/segment/segmented_spec.rb +6 -4
- data/spec/app/models/metasploit_data_models/ip_address/v4/segment/single_spec.rb +15 -22
- data/spec/app/models/metasploit_data_models/ip_address/v4/single_spec.rb +6 -4
- data/spec/app/models/metasploit_data_models/module_run_spec.rb +3 -1
- data/spec/app/models/metasploit_data_models/search/operation/ip_address_spec.rb +20 -18
- data/spec/app/models/metasploit_data_models/search/operation/port/number_spec.rb +8 -6
- data/spec/app/models/metasploit_data_models/search/operation/port/range_spec.rb +10 -8
- data/spec/app/models/metasploit_data_models/search/operation/range_spec.rb +10 -8
- data/spec/app/models/metasploit_data_models/search/operator/ip_address_spec.rb +4 -2
- data/spec/app/models/metasploit_data_models/search/operator/multitext_spec.rb +10 -8
- data/spec/app/models/metasploit_data_models/search/operator/port/list_spec.rb +8 -6
- data/spec/app/models/metasploit_data_models/search/visitor/attribute_spec.rb +11 -9
- data/spec/app/models/metasploit_data_models/search/visitor/includes_spec.rb +7 -5
- data/spec/app/models/metasploit_data_models/search/visitor/joins_spec.rb +19 -17
- data/spec/app/models/metasploit_data_models/search/visitor/method_spec.rb +7 -5
- data/spec/app/models/metasploit_data_models/search/visitor/relation_spec.rb +23 -61
- data/spec/app/models/metasploit_data_models/search/visitor/where_spec.rb +10 -8
- data/spec/app/validators/parameters_validator_spec.rb +29 -29
- data/spec/app/validators/password_is_strong_validator_spec.rb +46 -54
- data/spec/dummy/db/structure.sql +3403 -0
- data/spec/factories/mdm/module/details.rb +1 -1
- data/spec/lib/base64_serializer_spec.rb +19 -19
- data/spec/lib/metasploit_data_models/ip_address/cidr_spec.rb +12 -18
- data/spec/lib/metasploit_data_models/ip_address/range_spec.rb +6 -4
- data/spec/lib/metasploit_data_models/match/child_spec.rb +4 -2
- data/spec/lib/metasploit_data_models/match/parent_spec.rb +6 -4
- data/spec/lib/metasploit_data_models/version_spec.rb +141 -3
- data/spec/spec_helper.rb +12 -86
- data/spec/support/shared/examples/mdm/module/detail/does_not_support_stance_with_mtype.rb +2 -2
- data/spec/support/shared/examples/mdm/module/detail/supports_stance_with_mtype.rb +4 -4
- data/spec/support/shared/examples/metasploit_data_models/search/operation/ipaddress/match.rb +2 -2
- data/spec/support/shared/examples/metasploit_data_models/search/visitor/includes/visit/with_children.rb +5 -5
- data/spec/support/shared/examples/metasploit_data_models/search/visitor/includes/visit/with_metasploit_model_search_operation_base.rb +5 -5
- data/spec/support/shared/examples/metasploit_data_models/search/visitor/where/visit/with_equality.rb +3 -3
- data/spec/support/shared/examples/metasploit_data_models/search/visitor/where/visit/with_metasploit_model_search_group_base.rb +6 -7
- metadata +9 -67
- data/CHANGELOG.md +0 -6
- data/RELEASING.md +0 -88
- data/UPGRADING.md +0 -1
- data/lib/metasploit_data_models/automatic_exploitation.rb +0 -25
- data/spec/lib/metasploit_data_models_spec.rb +0 -4
|
@@ -1,23 +1,25 @@
|
|
|
1
|
-
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Mdm::TaskCred do
|
|
2
4
|
it_should_behave_like 'Metasploit::Concern.run'
|
|
3
5
|
|
|
4
6
|
context 'factory' do
|
|
5
7
|
it 'should be valid' do
|
|
6
8
|
task_cred = FactoryGirl.build(:mdm_task_cred)
|
|
7
|
-
|
|
9
|
+
task_cred.should be_valid
|
|
8
10
|
end
|
|
9
11
|
end
|
|
10
12
|
|
|
11
13
|
context 'database' do
|
|
12
14
|
|
|
13
15
|
context 'timestamps'do
|
|
14
|
-
it {
|
|
15
|
-
it {
|
|
16
|
+
it { should have_db_column(:created_at).of_type(:datetime).with_options(:null => false) }
|
|
17
|
+
it { should have_db_column(:updated_at).of_type(:datetime).with_options(:null => false) }
|
|
16
18
|
end
|
|
17
19
|
|
|
18
20
|
context 'columns' do
|
|
19
|
-
it {
|
|
20
|
-
it {
|
|
21
|
+
it { should have_db_column(:task_id).of_type(:integer).with_options(:null => false) }
|
|
22
|
+
it { should have_db_column(:cred_id).of_type(:integer).with_options(:null => false) }
|
|
21
23
|
end
|
|
22
24
|
end
|
|
23
25
|
|
|
@@ -34,8 +36,8 @@ RSpec.describe Mdm::TaskCred, type: :model do
|
|
|
34
36
|
end
|
|
35
37
|
|
|
36
38
|
context "Associations" do
|
|
37
|
-
it {
|
|
38
|
-
it {
|
|
39
|
+
it { should belong_to(:task).class_name('Mdm::Task') }
|
|
40
|
+
it { should belong_to(:cred).class_name('Mdm::Cred') }
|
|
39
41
|
end
|
|
40
42
|
|
|
41
43
|
context "validations" do
|
|
@@ -44,7 +46,7 @@ RSpec.describe Mdm::TaskCred, type: :model do
|
|
|
44
46
|
cred = FactoryGirl.build(:mdm_cred)
|
|
45
47
|
FactoryGirl.create(:mdm_task_cred, :task => task, :cred => cred)
|
|
46
48
|
task_cred2 = FactoryGirl.build(:mdm_task_cred, :task => task, :cred => cred)
|
|
47
|
-
|
|
49
|
+
task_cred2.should_not be_valid
|
|
48
50
|
end
|
|
49
51
|
end
|
|
50
52
|
|
|
@@ -1,23 +1,25 @@
|
|
|
1
|
-
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Mdm::TaskHost do
|
|
2
4
|
it_should_behave_like 'Metasploit::Concern.run'
|
|
3
5
|
|
|
4
6
|
context 'factory' do
|
|
5
7
|
it 'should be valid' do
|
|
6
8
|
task_host = FactoryGirl.build(:mdm_task_host)
|
|
7
|
-
|
|
9
|
+
task_host.should be_valid
|
|
8
10
|
end
|
|
9
11
|
end
|
|
10
12
|
|
|
11
13
|
context 'database' do
|
|
12
14
|
|
|
13
15
|
context 'timestamps'do
|
|
14
|
-
it {
|
|
15
|
-
it {
|
|
16
|
+
it { should have_db_column(:created_at).of_type(:datetime).with_options(:null => false) }
|
|
17
|
+
it { should have_db_column(:updated_at).of_type(:datetime).with_options(:null => false) }
|
|
16
18
|
end
|
|
17
19
|
|
|
18
20
|
context 'columns' do
|
|
19
|
-
it {
|
|
20
|
-
it {
|
|
21
|
+
it { should have_db_column(:task_id).of_type(:integer).with_options(:null => false) }
|
|
22
|
+
it { should have_db_column(:host_id).of_type(:integer).with_options(:null => false) }
|
|
21
23
|
end
|
|
22
24
|
end
|
|
23
25
|
|
|
@@ -34,8 +36,8 @@ RSpec.describe Mdm::TaskHost, type: :model do
|
|
|
34
36
|
end
|
|
35
37
|
|
|
36
38
|
context "Associations" do
|
|
37
|
-
it {
|
|
38
|
-
it {
|
|
39
|
+
it { should belong_to(:task).class_name('Mdm::Task') }
|
|
40
|
+
it { should belong_to(:host).class_name('Mdm::Host') }
|
|
39
41
|
end
|
|
40
42
|
|
|
41
43
|
context "validations" do
|
|
@@ -44,7 +46,7 @@ RSpec.describe Mdm::TaskHost, type: :model do
|
|
|
44
46
|
host = FactoryGirl.build(:mdm_host)
|
|
45
47
|
FactoryGirl.create(:mdm_task_host, :task => task, :host => host)
|
|
46
48
|
task_host2 = FactoryGirl.build(:mdm_task_host, :task => task, :host => host)
|
|
47
|
-
|
|
49
|
+
task_host2.should_not be_valid
|
|
48
50
|
end
|
|
49
51
|
end
|
|
50
52
|
end
|
|
@@ -1,23 +1,25 @@
|
|
|
1
|
-
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Mdm::TaskService do
|
|
2
4
|
it_should_behave_like 'Metasploit::Concern.run'
|
|
3
5
|
|
|
4
6
|
context 'factory' do
|
|
5
7
|
it 'should be valid' do
|
|
6
8
|
task_service = FactoryGirl.build(:mdm_task_service)
|
|
7
|
-
|
|
9
|
+
task_service.should be_valid
|
|
8
10
|
end
|
|
9
11
|
end
|
|
10
12
|
|
|
11
13
|
context 'database' do
|
|
12
14
|
|
|
13
15
|
context 'timestamps'do
|
|
14
|
-
it {
|
|
15
|
-
it {
|
|
16
|
+
it { should have_db_column(:created_at).of_type(:datetime).with_options(:null => false) }
|
|
17
|
+
it { should have_db_column(:updated_at).of_type(:datetime).with_options(:null => false) }
|
|
16
18
|
end
|
|
17
19
|
|
|
18
20
|
context 'columns' do
|
|
19
|
-
it {
|
|
20
|
-
it {
|
|
21
|
+
it { should have_db_column(:task_id).of_type(:integer).with_options(:null => false) }
|
|
22
|
+
it { should have_db_column(:service_id).of_type(:integer).with_options(:null => false) }
|
|
21
23
|
end
|
|
22
24
|
end
|
|
23
25
|
|
|
@@ -34,8 +36,8 @@ RSpec.describe Mdm::TaskService, type: :model do
|
|
|
34
36
|
end
|
|
35
37
|
|
|
36
38
|
context "Associations" do
|
|
37
|
-
it {
|
|
38
|
-
it {
|
|
39
|
+
it { should belong_to(:task).class_name('Mdm::Task') }
|
|
40
|
+
it { should belong_to(:service).class_name('Mdm::Service') }
|
|
39
41
|
end
|
|
40
42
|
|
|
41
43
|
context "validations" do
|
|
@@ -44,7 +46,7 @@ RSpec.describe Mdm::TaskService, type: :model do
|
|
|
44
46
|
service = FactoryGirl.build(:mdm_service)
|
|
45
47
|
FactoryGirl.create(:mdm_task_service, :task => task, :service => service)
|
|
46
48
|
task_service2 = FactoryGirl.build(:mdm_task_service, :task => task, :service => service)
|
|
47
|
-
|
|
49
|
+
task_service2.should_not be_valid
|
|
48
50
|
end
|
|
49
51
|
end
|
|
50
52
|
end
|
|
@@ -1,23 +1,25 @@
|
|
|
1
|
-
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Mdm::TaskSession do
|
|
2
4
|
it_should_behave_like 'Metasploit::Concern.run'
|
|
3
5
|
|
|
4
6
|
context 'factory' do
|
|
5
7
|
it 'should be valid' do
|
|
6
8
|
task_session = FactoryGirl.build(:mdm_task_session)
|
|
7
|
-
|
|
9
|
+
task_session.should be_valid
|
|
8
10
|
end
|
|
9
11
|
end
|
|
10
12
|
|
|
11
13
|
context 'database' do
|
|
12
14
|
|
|
13
15
|
context 'timestamps'do
|
|
14
|
-
it {
|
|
15
|
-
it {
|
|
16
|
+
it { should have_db_column(:created_at).of_type(:datetime).with_options(:null => false) }
|
|
17
|
+
it { should have_db_column(:updated_at).of_type(:datetime).with_options(:null => false) }
|
|
16
18
|
end
|
|
17
19
|
|
|
18
20
|
context 'columns' do
|
|
19
|
-
it {
|
|
20
|
-
it {
|
|
21
|
+
it { should have_db_column(:task_id).of_type(:integer).with_options(:null => false) }
|
|
22
|
+
it { should have_db_column(:session_id).of_type(:integer).with_options(:null => false) }
|
|
21
23
|
end
|
|
22
24
|
end
|
|
23
25
|
|
|
@@ -39,7 +41,7 @@ RSpec.describe Mdm::TaskSession, type: :model do
|
|
|
39
41
|
session = FactoryGirl.build(:mdm_session)
|
|
40
42
|
FactoryGirl.create(:mdm_task_session, :task => task, :session => session)
|
|
41
43
|
task_session2 = FactoryGirl.build(:mdm_task_session, :task => task, :session => session)
|
|
42
|
-
|
|
44
|
+
task_session2.should_not be_valid
|
|
43
45
|
end
|
|
44
46
|
end
|
|
45
47
|
|
|
@@ -1,34 +1,36 @@
|
|
|
1
|
-
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Mdm::Task do
|
|
2
4
|
it_should_behave_like 'Metasploit::Concern.run'
|
|
3
5
|
|
|
4
6
|
context 'factory' do
|
|
5
7
|
it 'should be valid' do
|
|
6
8
|
task = FactoryGirl.build(:mdm_task)
|
|
7
|
-
|
|
9
|
+
task.should be_valid
|
|
8
10
|
end
|
|
9
11
|
end
|
|
10
12
|
|
|
11
13
|
context 'database' do
|
|
12
14
|
|
|
13
15
|
context 'timestamps'do
|
|
14
|
-
it {
|
|
15
|
-
it {
|
|
16
|
-
it {
|
|
16
|
+
it { should have_db_column(:created_at).of_type(:datetime).with_options(:null => false) }
|
|
17
|
+
it { should have_db_column(:updated_at).of_type(:datetime).with_options(:null => false) }
|
|
18
|
+
it { should have_db_column(:completed_at).of_type(:datetime) }
|
|
17
19
|
end
|
|
18
20
|
|
|
19
21
|
context 'columns' do
|
|
20
|
-
it {
|
|
21
|
-
it {
|
|
22
|
-
it {
|
|
23
|
-
it {
|
|
24
|
-
it {
|
|
25
|
-
it {
|
|
26
|
-
it {
|
|
27
|
-
it {
|
|
28
|
-
it {
|
|
29
|
-
it {
|
|
30
|
-
it {
|
|
31
|
-
it {
|
|
22
|
+
it { should have_db_column(:workspace_id).of_type(:integer).with_options(:null => false, :default =>1) }
|
|
23
|
+
it { should have_db_column(:created_by).of_type(:string) }
|
|
24
|
+
it { should have_db_column(:module).of_type(:string) }
|
|
25
|
+
it { should have_db_column(:path).of_type(:string) }
|
|
26
|
+
it { should have_db_column(:info).of_type(:string) }
|
|
27
|
+
it { should have_db_column(:description).of_type(:string) }
|
|
28
|
+
it { should have_db_column(:progress).of_type(:integer) }
|
|
29
|
+
it { should have_db_column(:options).of_type(:text) }
|
|
30
|
+
it { should have_db_column(:error).of_type(:text) }
|
|
31
|
+
it { should have_db_column(:result).of_type(:text) }
|
|
32
|
+
it { should have_db_column(:module_uuid).of_type(:string) }
|
|
33
|
+
it { should have_db_column(:settings).of_type(:binary) }
|
|
32
34
|
end
|
|
33
35
|
end
|
|
34
36
|
|
|
@@ -45,15 +47,15 @@ RSpec.describe Mdm::Task, type: :model do
|
|
|
45
47
|
end
|
|
46
48
|
|
|
47
49
|
context "Associations" do
|
|
48
|
-
it {
|
|
49
|
-
it {
|
|
50
|
-
it {
|
|
51
|
-
it {
|
|
52
|
-
it {
|
|
53
|
-
it {
|
|
54
|
-
it {
|
|
55
|
-
it {
|
|
56
|
-
it {
|
|
50
|
+
it { should have_many(:task_creds).class_name('Mdm::TaskCred').dependent(:destroy) }
|
|
51
|
+
it { should have_many(:creds).class_name('Mdm::Cred').through(:task_creds) }
|
|
52
|
+
it { should have_many(:task_sessions).class_name('Mdm::TaskSession').dependent(:destroy) }
|
|
53
|
+
it { should have_many(:sessions).class_name('Mdm::Session').through(:task_sessions) }
|
|
54
|
+
it { should have_many(:task_hosts).class_name('Mdm::TaskHost').dependent(:destroy) }
|
|
55
|
+
it { should have_many(:hosts).class_name('Mdm::Host').through(:task_hosts) }
|
|
56
|
+
it { should have_many(:task_services).class_name('Mdm::TaskService').dependent(:destroy) }
|
|
57
|
+
it { should have_many(:services).class_name('Mdm::Service').through(:task_services) }
|
|
58
|
+
it { should belong_to(:workspace).class_name('Mdm::Workspace') }
|
|
57
59
|
|
|
58
60
|
end
|
|
59
61
|
|
|
@@ -61,7 +63,7 @@ RSpec.describe Mdm::Task, type: :model do
|
|
|
61
63
|
context 'before_destroy' do
|
|
62
64
|
it 'should call #delete_file' do
|
|
63
65
|
task = FactoryGirl.create(:mdm_task)
|
|
64
|
-
|
|
66
|
+
task.should_receive(:delete_file)
|
|
65
67
|
task.destroy
|
|
66
68
|
end
|
|
67
69
|
end
|
|
@@ -1,37 +1,39 @@
|
|
|
1
|
-
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Mdm::User do
|
|
2
4
|
it_should_behave_like 'Metasploit::Concern.run'
|
|
3
5
|
|
|
4
6
|
context 'associations' do
|
|
5
|
-
it {
|
|
6
|
-
it {
|
|
7
|
-
it {
|
|
7
|
+
it { should have_many(:owned_workspaces).class_name('Mdm::Workspace') }
|
|
8
|
+
it { should have_many(:tags).class_name('Mdm::Tag') }
|
|
9
|
+
it { should have_and_belong_to_many(:workspaces).class_name('Mdm::Workspace') }
|
|
8
10
|
end
|
|
9
11
|
|
|
10
12
|
context 'database' do
|
|
11
13
|
|
|
12
14
|
context 'timestamps'do
|
|
13
|
-
it {
|
|
14
|
-
it {
|
|
15
|
+
it { should have_db_column(:created_at).of_type(:datetime).with_options(:null => false) }
|
|
16
|
+
it { should have_db_column(:updated_at).of_type(:datetime).with_options(:null => false) }
|
|
15
17
|
end
|
|
16
18
|
|
|
17
19
|
context 'columns' do
|
|
18
|
-
it {
|
|
19
|
-
it {
|
|
20
|
-
it {
|
|
21
|
-
it {
|
|
22
|
-
it {
|
|
23
|
-
it {
|
|
24
|
-
it {
|
|
25
|
-
it {
|
|
26
|
-
it {
|
|
27
|
-
it {
|
|
20
|
+
it { should have_db_column(:username).of_type(:string) }
|
|
21
|
+
it { should have_db_column(:crypted_password).of_type(:string) }
|
|
22
|
+
it { should have_db_column(:password_salt).of_type(:string) }
|
|
23
|
+
it { should have_db_column(:persistence_token).of_type(:string) }
|
|
24
|
+
it { should have_db_column(:fullname).of_type(:string) }
|
|
25
|
+
it { should have_db_column(:email).of_type(:string) }
|
|
26
|
+
it { should have_db_column(:phone).of_type(:string) }
|
|
27
|
+
it { should have_db_column(:company).of_type(:string) }
|
|
28
|
+
it { should have_db_column(:prefs).of_type(:string) }
|
|
29
|
+
it { should have_db_column(:admin).of_type(:boolean).with_options(:null => false, :default =>true) }
|
|
28
30
|
end
|
|
29
31
|
end
|
|
30
32
|
|
|
31
33
|
context 'factory' do
|
|
32
34
|
it 'should be valid' do
|
|
33
35
|
user = FactoryGirl.build(:mdm_user)
|
|
34
|
-
|
|
36
|
+
user.should be_valid
|
|
35
37
|
end
|
|
36
38
|
end
|
|
37
39
|
|
|
@@ -1,40 +1,42 @@
|
|
|
1
|
-
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Mdm::VulnAttempt do
|
|
2
4
|
it_should_behave_like 'Metasploit::Concern.run'
|
|
3
5
|
|
|
4
6
|
context 'association' do
|
|
5
|
-
it {
|
|
7
|
+
it { should belong_to(:vuln).class_name('Mdm::Vuln') }
|
|
6
8
|
end
|
|
7
9
|
|
|
8
10
|
context 'database' do
|
|
9
11
|
|
|
10
12
|
context 'timestamps'do
|
|
11
|
-
it {
|
|
13
|
+
it { should have_db_column(:attempted_at).of_type(:datetime) }
|
|
12
14
|
end
|
|
13
15
|
|
|
14
16
|
context 'columns' do
|
|
15
|
-
it {
|
|
16
|
-
it {
|
|
17
|
-
it {
|
|
18
|
-
it {
|
|
19
|
-
it {
|
|
20
|
-
it {
|
|
21
|
-
it {
|
|
22
|
-
it {
|
|
17
|
+
it { should have_db_column(:vuln_id).of_type(:integer) }
|
|
18
|
+
it { should have_db_column(:exploited).of_type(:boolean) }
|
|
19
|
+
it { should have_db_column(:fail_reason).of_type(:string) }
|
|
20
|
+
it { should have_db_column(:username).of_type(:string) }
|
|
21
|
+
it { should have_db_column(:module).of_type(:text) }
|
|
22
|
+
it { should have_db_column(:session_id).of_type(:integer) }
|
|
23
|
+
it { should have_db_column(:loot_id).of_type(:integer) }
|
|
24
|
+
it { should have_db_column(:fail_detail).of_type(:text) }
|
|
23
25
|
end
|
|
24
26
|
end
|
|
25
27
|
|
|
26
28
|
context 'validations' do
|
|
27
29
|
it 'should require a vuln_id' do
|
|
28
30
|
orphan_detail = FactoryGirl.build(:mdm_vuln_detail, :vuln => nil)
|
|
29
|
-
|
|
30
|
-
|
|
31
|
+
orphan_detail.should_not be_valid
|
|
32
|
+
orphan_detail.errors[:vuln_id].should include("can't be blank")
|
|
31
33
|
end
|
|
32
34
|
end
|
|
33
35
|
|
|
34
36
|
context 'factory' do
|
|
35
37
|
it 'should be valid' do
|
|
36
38
|
vuln_attempt = FactoryGirl.build(:mdm_vuln_attempt)
|
|
37
|
-
|
|
39
|
+
vuln_attempt.should be_valid
|
|
38
40
|
end
|
|
39
41
|
end
|
|
40
42
|
|
|
@@ -1,52 +1,54 @@
|
|
|
1
|
-
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Mdm::VulnDetail do
|
|
2
4
|
it_should_behave_like 'Metasploit::Concern.run'
|
|
3
5
|
|
|
4
6
|
context 'association' do
|
|
5
|
-
it {
|
|
7
|
+
it { should belong_to(:vuln).class_name('Mdm::Vuln') }
|
|
6
8
|
end
|
|
7
9
|
|
|
8
10
|
context 'database' do
|
|
9
11
|
|
|
10
12
|
context 'timestamps'do
|
|
11
|
-
it {
|
|
12
|
-
it {
|
|
13
|
-
it {
|
|
14
|
-
it {
|
|
13
|
+
it { should have_db_column(:nx_published).of_type(:datetime) }
|
|
14
|
+
it { should have_db_column(:nx_added).of_type(:datetime) }
|
|
15
|
+
it { should have_db_column(:nx_modified).of_type(:datetime) }
|
|
16
|
+
it { should have_db_column(:nx_vulnerable_since).of_type(:datetime) }
|
|
15
17
|
end
|
|
16
18
|
|
|
17
19
|
context 'columns' do
|
|
18
|
-
it {
|
|
19
|
-
it {
|
|
20
|
-
it {
|
|
21
|
-
it {
|
|
22
|
-
it {
|
|
23
|
-
it {
|
|
24
|
-
it {
|
|
25
|
-
it {
|
|
26
|
-
it {
|
|
27
|
-
it {
|
|
28
|
-
it {
|
|
29
|
-
it {
|
|
30
|
-
it {
|
|
31
|
-
it {
|
|
32
|
-
it {
|
|
33
|
-
it {
|
|
34
|
-
it {
|
|
20
|
+
it { should have_db_column(:vuln_id).of_type(:integer)}
|
|
21
|
+
it { should have_db_column(:cvss_score).of_type(:float) }
|
|
22
|
+
it { should have_db_column(:cvss_vector).of_type(:string) }
|
|
23
|
+
it { should have_db_column(:title).of_type(:string) }
|
|
24
|
+
it { should have_db_column(:description).of_type(:text) }
|
|
25
|
+
it { should have_db_column(:solution).of_type(:text) }
|
|
26
|
+
it { should have_db_column(:proof).of_type(:binary) }
|
|
27
|
+
it { should have_db_column(:nx_console_id).of_type(:integer) }
|
|
28
|
+
it { should have_db_column(:nx_device_id).of_type(:integer) }
|
|
29
|
+
it { should have_db_column(:nx_severity).of_type(:float) }
|
|
30
|
+
it { should have_db_column(:nx_pci_severity).of_type(:float) }
|
|
31
|
+
it { should have_db_column(:nx_tags).of_type(:text) }
|
|
32
|
+
it { should have_db_column(:nx_vuln_status).of_type(:text) }
|
|
33
|
+
it { should have_db_column(:nx_proof_key).of_type(:text) }
|
|
34
|
+
it { should have_db_column(:src).of_type(:string) }
|
|
35
|
+
it { should have_db_column(:nx_scan_id).of_type(:integer) }
|
|
36
|
+
it { should have_db_column(:nx_pci_compliance_status).of_type(:string) }
|
|
35
37
|
end
|
|
36
38
|
end
|
|
37
39
|
|
|
38
40
|
context 'validations' do
|
|
39
41
|
it 'should require a vuln_id' do
|
|
40
42
|
orphan_detail = FactoryGirl.build(:mdm_vuln_detail, :vuln => nil)
|
|
41
|
-
|
|
42
|
-
|
|
43
|
+
orphan_detail.should_not be_valid
|
|
44
|
+
orphan_detail.errors[:vuln_id].should include("can't be blank")
|
|
43
45
|
end
|
|
44
46
|
end
|
|
45
47
|
|
|
46
48
|
context 'factory' do
|
|
47
49
|
it 'should be valid' do
|
|
48
50
|
vuln_detail = FactoryGirl.build(:mdm_vuln_detail)
|
|
49
|
-
|
|
51
|
+
vuln_detail.should be_valid
|
|
50
52
|
end
|
|
51
53
|
end
|
|
52
54
|
|