metasploit_data_models 0.17.3.pre.metasploit.pre.concern-java → 0.18.0-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CONTRIBUTING.md +164 -0
- data/README.md +6 -2
- data/app/models/mdm/host.rb +18 -0
- data/app/models/mdm/service.rb +12 -1
- data/app/models/metasploit_data_models/search/operation/port/number.rb +25 -0
- data/app/models/metasploit_data_models/search/operation/port/range.rb +79 -0
- data/app/models/metasploit_data_models/search/operation/range.rb +56 -0
- data/app/models/metasploit_data_models/search/operator/multitext.rb +73 -0
- data/app/models/metasploit_data_models/search/operator/port/list.rb +67 -0
- data/app/models/metasploit_data_models/search/visitor/attribute.rb +2 -1
- data/app/models/metasploit_data_models/search/visitor/includes.rb +3 -2
- data/app/models/metasploit_data_models/search/visitor/joins.rb +5 -3
- data/app/models/metasploit_data_models/search/visitor/method.rb +3 -2
- data/app/models/metasploit_data_models/search/visitor/where.rb +8 -2
- data/config/locales/en.yml +17 -1
- data/lib/metasploit_data_models.rb +1 -9
- data/lib/metasploit_data_models/version.rb +27 -6
- data/metasploit_data_models.gemspec +2 -2
- data/spec/app/models/metasploit_data_models/search/operation/port/number_spec.rb +41 -0
- data/spec/app/models/metasploit_data_models/search/operation/port/range_spec.rb +140 -0
- data/spec/app/models/metasploit_data_models/search/operation/range_spec.rb +235 -0
- data/spec/app/models/metasploit_data_models/search/operator/multitext_spec.rb +162 -0
- data/spec/app/models/metasploit_data_models/search/operator/port/list_spec.rb +164 -0
- data/spec/app/models/metasploit_data_models/search/visitor/attribute_spec.rb +48 -26
- data/spec/app/models/metasploit_data_models/search/visitor/includes_spec.rb +10 -7
- data/spec/app/models/metasploit_data_models/search/visitor/joins_spec.rb +44 -30
- data/spec/app/models/metasploit_data_models/search/visitor/method_spec.rb +16 -0
- data/spec/app/models/metasploit_data_models/search/visitor/relation_spec.rb +273 -65
- data/spec/app/models/metasploit_data_models/search/visitor/where_spec.rb +42 -2
- data/spec/factories/mdm/services.rb +1 -2
- data/spec/lib/metasploit_data_models/version_spec.rb +141 -0
- data/spec/support/shared/examples/metasploit_data_models/search/visitor/where/visit/with_metasploit_model_search_group_base.rb +1 -1
- metadata +28 -12
- data/lib/metasploit_data_models/models.rb +0 -21
- data/lib/metasploit_data_models/validators.rb +0 -19
@@ -30,12 +30,14 @@ describe MetasploitDataModels::Search::Visitor::Where do
|
|
30
30
|
|
31
31
|
arel_class_by_group_class = {
|
32
32
|
Metasploit::Model::Search::Group::Intersection => Arel::Nodes::And,
|
33
|
-
Metasploit::Model::Search::Group::Union => Arel::Nodes::Or
|
33
|
+
Metasploit::Model::Search::Group::Union => Arel::Nodes::Or,
|
34
|
+
Metasploit::Model::Search::Operation::Group::Intersection => Arel::Nodes::And,
|
35
|
+
Metasploit::Model::Search::Operation::Group::Union => Arel::Nodes::Or
|
34
36
|
}
|
35
37
|
|
36
38
|
arel_class_by_group_class.each do |group_class, arel_class|
|
37
39
|
context "with #{group_class}" do
|
38
|
-
it_should_behave_like 'MetasploitDataModels::Search::Visitor::Where#visit with Metasploit::Model::Search
|
40
|
+
it_should_behave_like 'MetasploitDataModels::Search::Visitor::Where#visit with Metasploit::Model::Search*::Group::Base',
|
39
41
|
:arel_class => arel_class do
|
40
42
|
let(:node_class) do
|
41
43
|
group_class
|
@@ -97,6 +99,44 @@ describe MetasploitDataModels::Search::Visitor::Where do
|
|
97
99
|
end
|
98
100
|
end
|
99
101
|
|
102
|
+
context 'with MetasploitDataModels::Search::Operation::Port::Range' do
|
103
|
+
let(:node) {
|
104
|
+
MetasploitDataModels::Search::Operation::Port::Range.new(
|
105
|
+
operator: operator,
|
106
|
+
value: value
|
107
|
+
)
|
108
|
+
}
|
109
|
+
|
110
|
+
let(:operator) {
|
111
|
+
MetasploitDataModels::Search::Operator::Port::List.new(
|
112
|
+
klass: Mdm::Service
|
113
|
+
)
|
114
|
+
}
|
115
|
+
|
116
|
+
let(:range) {
|
117
|
+
1..2
|
118
|
+
}
|
119
|
+
|
120
|
+
let(:value) {
|
121
|
+
"#{range.begin}-#{range.end}"
|
122
|
+
}
|
123
|
+
|
124
|
+
it 'should visit operation.operator with attribute_visitor' do
|
125
|
+
expect(visitor.attribute_visitor).to receive(:visit).with(operator).and_call_original
|
126
|
+
|
127
|
+
visit
|
128
|
+
end
|
129
|
+
|
130
|
+
it 'should call in on Arel::Attributes::Attribute from attribute_visitor' do
|
131
|
+
attribute = double('Visited Operator')
|
132
|
+
allow(visitor.attribute_visitor).to receive(:visit).with(operator).and_return(attribute)
|
133
|
+
|
134
|
+
expect(attribute).to receive(:in).with(range)
|
135
|
+
|
136
|
+
visit
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
100
140
|
context 'with Metasploit::Model::Search::Query#tree' do
|
101
141
|
let(:node) do
|
102
142
|
query.tree
|
@@ -9,14 +9,13 @@ FactoryGirl.define do
|
|
9
9
|
# Attributes
|
10
10
|
#
|
11
11
|
name { generate :mdm_service_name }
|
12
|
-
port
|
12
|
+
port { generate :port }
|
13
13
|
proto 'snmp'
|
14
14
|
state 'open'
|
15
15
|
|
16
16
|
factory :web_service do
|
17
17
|
proto 'tcp'
|
18
18
|
name { FactoryGirl.generate(:web_service_name) }
|
19
|
-
port { FactoryGirl.generate(:port) }
|
20
19
|
end
|
21
20
|
end
|
22
21
|
|
@@ -0,0 +1,141 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MetasploitDataModels::Version do
|
4
|
+
context 'CONSTANTS' do
|
5
|
+
context 'MAJOR' do
|
6
|
+
subject(:major) do
|
7
|
+
described_class::MAJOR
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'is 0 because the API is not locked yet' do
|
11
|
+
expect(major).to eq(0)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
context 'MINOR' do
|
16
|
+
subject(:minor) do
|
17
|
+
described_class::MINOR
|
18
|
+
end
|
19
|
+
|
20
|
+
it { should be_a Integer }
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'PATCH' do
|
24
|
+
subject(:patch) do
|
25
|
+
described_class::PATCH
|
26
|
+
end
|
27
|
+
|
28
|
+
it { should be_a Integer }
|
29
|
+
end
|
30
|
+
|
31
|
+
pull_request = ENV['TRAVIS_PULL_REQUEST']
|
32
|
+
|
33
|
+
# a pull request cannot check PRERELEASE because it will be tested in the target branch, but the source itself
|
34
|
+
# is from the source branch and so has the source branch PRERELEASE.
|
35
|
+
#
|
36
|
+
# PRERELEASE can only be set appropriately for a merge by merging to the target branch and then updating PRERELEASE
|
37
|
+
# on the target branch before committing and/or pushing to github and travis-ci.
|
38
|
+
if pull_request.nil? || pull_request == 'false'
|
39
|
+
context 'PREPRELEASE' do
|
40
|
+
subject(:prerelease) do
|
41
|
+
described_class::PRERELEASE
|
42
|
+
end
|
43
|
+
|
44
|
+
branch = ENV['TRAVIS_BRANCH']
|
45
|
+
|
46
|
+
if branch.blank?
|
47
|
+
branch = `git rev-parse --abbrev-ref HEAD`.strip
|
48
|
+
end
|
49
|
+
|
50
|
+
if branch == 'master'
|
51
|
+
it 'does not have a PRERELEASE' do
|
52
|
+
expect(defined? described_class::PRERELEASE).to be_nil
|
53
|
+
end
|
54
|
+
else
|
55
|
+
branch_regex = /\A(?<type>bug|chore|feature|staging)(\/(?<story>[^\/]+))?\/(?<prerelease>[^\/]+)\z/
|
56
|
+
match = branch.match(branch_regex)
|
57
|
+
|
58
|
+
if match
|
59
|
+
it 'matches the branch relative name' do
|
60
|
+
expect(prerelease).to eq(match[:prerelease])
|
61
|
+
end
|
62
|
+
else
|
63
|
+
tag_regex = /\Av(?<major>\d+).(?<minor>\d+).(?<patch>\d+)(\.pre\.(?<prerelease>.*))?\z/
|
64
|
+
# travis-ci sets TRAVIS_BRANCH to the tag name for tag builds
|
65
|
+
match = branch.match(tag_regex)
|
66
|
+
|
67
|
+
if match
|
68
|
+
tag_prerelease = match[:prerelease]
|
69
|
+
|
70
|
+
if tag_prerelease
|
71
|
+
it 'matches the tag prerelease converted from a gem version to a VERSION' do
|
72
|
+
expect(prerelease).to eq(tag_prerelease.gsub('.pre.', '-'))
|
73
|
+
end
|
74
|
+
else
|
75
|
+
it 'does not have a PRERELEASE' do
|
76
|
+
expect(defined? described_class::PRERELEASE).to be_nil
|
77
|
+
end
|
78
|
+
end
|
79
|
+
else
|
80
|
+
it 'has a abbreviated reference that can be parsed for prerelease' do
|
81
|
+
fail "Do not know how to parse #{branch.inspect} for PRERELEASE"
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
context 'full' do
|
91
|
+
subject(:full) do
|
92
|
+
described_class.full
|
93
|
+
end
|
94
|
+
|
95
|
+
#
|
96
|
+
# lets
|
97
|
+
#
|
98
|
+
|
99
|
+
let(:major) do
|
100
|
+
1
|
101
|
+
end
|
102
|
+
|
103
|
+
let(:minor) do
|
104
|
+
2
|
105
|
+
end
|
106
|
+
|
107
|
+
let(:patch) do
|
108
|
+
3
|
109
|
+
end
|
110
|
+
|
111
|
+
before(:each) do
|
112
|
+
stub_const("#{described_class}::MAJOR", major)
|
113
|
+
stub_const("#{described_class}::MINOR", minor)
|
114
|
+
stub_const("#{described_class}::PATCH", patch)
|
115
|
+
end
|
116
|
+
|
117
|
+
context 'with PRERELEASE' do
|
118
|
+
let(:prerelease) do
|
119
|
+
'prerelease'
|
120
|
+
end
|
121
|
+
|
122
|
+
before(:each) do
|
123
|
+
stub_const("#{described_class}::PRERELEASE", prerelease)
|
124
|
+
end
|
125
|
+
|
126
|
+
it 'is <major>.<minor>.<patch>-<prerelease>' do
|
127
|
+
expect(full).to eq("#{major}.#{minor}.#{patch}-#{prerelease}")
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
context 'without PRERELEASE' do
|
132
|
+
before(:each) do
|
133
|
+
hide_const("#{described_class}::PRERELEASE")
|
134
|
+
end
|
135
|
+
|
136
|
+
it 'is <major>.<minor>.<patch>' do
|
137
|
+
expect(full).to eq("#{major}.#{minor}.#{patch}")
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
shared_examples_for 'MetasploitDataModels::Search::Visitor::Where#visit with Metasploit::Model::Search
|
1
|
+
shared_examples_for 'MetasploitDataModels::Search::Visitor::Where#visit with Metasploit::Model::Search*::Group::Base' do |options={}|
|
2
2
|
options.assert_valid_keys(:arel_class)
|
3
3
|
|
4
4
|
arel_class = options.fetch(:arel_class)
|
metadata
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metasploit_data_models
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.18.0
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- Samuel Huckins
|
8
8
|
- Luke Imhoff
|
9
9
|
- David 'thelightcosine' Maloney
|
10
|
-
- Trevor Rosen
|
10
|
+
- Trevor 'burlyscudd' Rosen
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2014-
|
14
|
+
date: 2014-07-07 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: rake
|
@@ -109,18 +109,18 @@ dependencies:
|
|
109
109
|
requirements:
|
110
110
|
- - '>='
|
111
111
|
- !ruby/object:Gem::Version
|
112
|
-
version: 0.
|
112
|
+
version: 0.25.1
|
113
113
|
- - <
|
114
114
|
- !ruby/object:Gem::Version
|
115
|
-
version: '0.
|
115
|
+
version: '0.26'
|
116
116
|
requirement: !ruby/object:Gem::Requirement
|
117
117
|
requirements:
|
118
118
|
- - '>='
|
119
119
|
- !ruby/object:Gem::Version
|
120
|
-
version: 0.
|
120
|
+
version: 0.25.1
|
121
121
|
- - <
|
122
122
|
- !ruby/object:Gem::Version
|
123
|
-
version: '0.
|
123
|
+
version: '0.26'
|
124
124
|
prerelease: false
|
125
125
|
type: :runtime
|
126
126
|
- !ruby/object:Gem::Dependency
|
@@ -182,6 +182,7 @@ files:
|
|
182
182
|
- .simplecov
|
183
183
|
- .travis.yml
|
184
184
|
- .yardopts
|
185
|
+
- CONTRIBUTING.md
|
185
186
|
- Gemfile
|
186
187
|
- LICENSE
|
187
188
|
- README.md
|
@@ -233,6 +234,11 @@ files:
|
|
233
234
|
- app/models/mdm/wmap_request.rb
|
234
235
|
- app/models/mdm/wmap_target.rb
|
235
236
|
- app/models/mdm/workspace.rb
|
237
|
+
- app/models/metasploit_data_models/search/operation/port/number.rb
|
238
|
+
- app/models/metasploit_data_models/search/operation/port/range.rb
|
239
|
+
- app/models/metasploit_data_models/search/operation/range.rb
|
240
|
+
- app/models/metasploit_data_models/search/operator/multitext.rb
|
241
|
+
- app/models/metasploit_data_models/search/operator/port/list.rb
|
236
242
|
- app/models/metasploit_data_models/search/visitor/attribute.rb
|
237
243
|
- app/models/metasploit_data_models/search/visitor/includes.rb
|
238
244
|
- app/models/metasploit_data_models/search/visitor/joins.rb
|
@@ -359,11 +365,9 @@ files:
|
|
359
365
|
- lib/metasploit_data_models/base64_serializer.rb
|
360
366
|
- lib/metasploit_data_models/change_required_columns_to_null_false.rb
|
361
367
|
- lib/metasploit_data_models/engine.rb
|
362
|
-
- lib/metasploit_data_models/models.rb
|
363
368
|
- lib/metasploit_data_models/search.rb
|
364
369
|
- lib/metasploit_data_models/search/visitor.rb
|
365
370
|
- lib/metasploit_data_models/serialized_prefs.rb
|
366
|
-
- lib/metasploit_data_models/validators.rb
|
367
371
|
- lib/metasploit_data_models/version.rb
|
368
372
|
- lib/tasks/yard.rake
|
369
373
|
- metasploit_data_models.gemspec
|
@@ -415,6 +419,11 @@ files:
|
|
415
419
|
- spec/app/models/mdm/wmap_request_spec.rb
|
416
420
|
- spec/app/models/mdm/wmap_target_spec.rb
|
417
421
|
- spec/app/models/mdm/workspace_spec.rb
|
422
|
+
- spec/app/models/metasploit_data_models/search/operation/port/number_spec.rb
|
423
|
+
- spec/app/models/metasploit_data_models/search/operation/port/range_spec.rb
|
424
|
+
- spec/app/models/metasploit_data_models/search/operation/range_spec.rb
|
425
|
+
- spec/app/models/metasploit_data_models/search/operator/multitext_spec.rb
|
426
|
+
- spec/app/models/metasploit_data_models/search/operator/port/list_spec.rb
|
418
427
|
- spec/app/models/metasploit_data_models/search/visitor/attribute_spec.rb
|
419
428
|
- spec/app/models/metasploit_data_models/search/visitor/includes_spec.rb
|
420
429
|
- spec/app/models/metasploit_data_models/search/visitor/joins_spec.rb
|
@@ -504,6 +513,7 @@ files:
|
|
504
513
|
- spec/factories/mdm/web_vulns.rb
|
505
514
|
- spec/factories/mdm/workspaces.rb
|
506
515
|
- spec/lib/base64_serializer_spec.rb
|
516
|
+
- spec/lib/metasploit_data_models/version_spec.rb
|
507
517
|
- spec/spec_helper.rb
|
508
518
|
- spec/support/shared/examples/mdm/module/detail/does_not_support_stance_with_mtype.rb
|
509
519
|
- spec/support/shared/examples/mdm/module/detail/supports_stance_with_mtype.rb
|
@@ -528,12 +538,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
528
538
|
version: '0'
|
529
539
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
530
540
|
requirements:
|
531
|
-
- - '
|
541
|
+
- - '>='
|
532
542
|
- !ruby/object:Gem::Version
|
533
|
-
version:
|
543
|
+
version: '0'
|
534
544
|
requirements: []
|
535
545
|
rubyforge_project:
|
536
|
-
rubygems_version: 2.
|
546
|
+
rubygems_version: 2.1.9
|
537
547
|
signing_key:
|
538
548
|
specification_version: 4
|
539
549
|
summary: Database code for MSF and Metasploit Pro
|
@@ -585,6 +595,11 @@ test_files:
|
|
585
595
|
- spec/app/models/mdm/wmap_request_spec.rb
|
586
596
|
- spec/app/models/mdm/wmap_target_spec.rb
|
587
597
|
- spec/app/models/mdm/workspace_spec.rb
|
598
|
+
- spec/app/models/metasploit_data_models/search/operation/port/number_spec.rb
|
599
|
+
- spec/app/models/metasploit_data_models/search/operation/port/range_spec.rb
|
600
|
+
- spec/app/models/metasploit_data_models/search/operation/range_spec.rb
|
601
|
+
- spec/app/models/metasploit_data_models/search/operator/multitext_spec.rb
|
602
|
+
- spec/app/models/metasploit_data_models/search/operator/port/list_spec.rb
|
588
603
|
- spec/app/models/metasploit_data_models/search/visitor/attribute_spec.rb
|
589
604
|
- spec/app/models/metasploit_data_models/search/visitor/includes_spec.rb
|
590
605
|
- spec/app/models/metasploit_data_models/search/visitor/joins_spec.rb
|
@@ -674,6 +689,7 @@ test_files:
|
|
674
689
|
- spec/factories/mdm/web_vulns.rb
|
675
690
|
- spec/factories/mdm/workspaces.rb
|
676
691
|
- spec/lib/base64_serializer_spec.rb
|
692
|
+
- spec/lib/metasploit_data_models/version_spec.rb
|
677
693
|
- spec/spec_helper.rb
|
678
694
|
- spec/support/shared/examples/mdm/module/detail/does_not_support_stance_with_mtype.rb
|
679
695
|
- spec/support/shared/examples/mdm/module/detail/supports_stance_with_mtype.rb
|
@@ -1,21 +0,0 @@
|
|
1
|
-
require 'metasploit_data_models/validators'
|
2
|
-
|
3
|
-
module MetasploitDataModels
|
4
|
-
module Models
|
5
|
-
include MetasploitDataModels::Validators
|
6
|
-
|
7
|
-
def models_pathname
|
8
|
-
app_pathname.join('models')
|
9
|
-
end
|
10
|
-
|
11
|
-
def require_models
|
12
|
-
autoload_validators
|
13
|
-
|
14
|
-
models_globs = models_pathname.join('**', '*.rb')
|
15
|
-
|
16
|
-
Dir.glob(models_globs) do |model_path|
|
17
|
-
require model_path
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
module MetasploitDataModels
|
2
|
-
module Validators
|
3
|
-
# Mimics behavior of `app/validators` in Rails projects by adding it to
|
4
|
-
# `ActiveSupport::Dependencies.autoload_paths` if it is not already in the Array.
|
5
|
-
#
|
6
|
-
# @return [void]
|
7
|
-
def autoload_validators
|
8
|
-
validators_path = validators_pathname.to_s
|
9
|
-
|
10
|
-
unless ActiveSupport::Dependencies.autoload_paths.include? validators_path
|
11
|
-
ActiveSupport::Dependencies.autoload_paths << validators_path
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
def validators_pathname
|
16
|
-
app_pathname.join('validators')
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|