metasploit_data_models 0.17.3 → 0.18.0.pre.compatibility
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 +8 -8
- 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 +29 -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 +27 -11
- 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.pre.compatibility
|
5
5
|
platform: ruby
|
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,20 +109,20 @@ 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
|
type: :runtime
|
117
117
|
prerelease: false
|
118
118
|
version_requirements: !ruby/object:Gem::Requirement
|
119
119
|
requirements:
|
120
120
|
- - ! '>='
|
121
121
|
- !ruby/object:Gem::Version
|
122
|
-
version: 0.
|
122
|
+
version: 0.25.1
|
123
123
|
- - <
|
124
124
|
- !ruby/object:Gem::Version
|
125
|
-
version: '0.
|
125
|
+
version: '0.26'
|
126
126
|
- !ruby/object:Gem::Dependency
|
127
127
|
name: redcarpet
|
128
128
|
requirement: !ruby/object:Gem::Requirement
|
@@ -169,6 +169,7 @@ files:
|
|
169
169
|
- .simplecov
|
170
170
|
- .travis.yml
|
171
171
|
- .yardopts
|
172
|
+
- CONTRIBUTING.md
|
172
173
|
- Gemfile
|
173
174
|
- LICENSE
|
174
175
|
- README.md
|
@@ -220,6 +221,11 @@ files:
|
|
220
221
|
- app/models/mdm/wmap_request.rb
|
221
222
|
- app/models/mdm/wmap_target.rb
|
222
223
|
- app/models/mdm/workspace.rb
|
224
|
+
- app/models/metasploit_data_models/search/operation/port/number.rb
|
225
|
+
- app/models/metasploit_data_models/search/operation/port/range.rb
|
226
|
+
- app/models/metasploit_data_models/search/operation/range.rb
|
227
|
+
- app/models/metasploit_data_models/search/operator/multitext.rb
|
228
|
+
- app/models/metasploit_data_models/search/operator/port/list.rb
|
223
229
|
- app/models/metasploit_data_models/search/visitor/attribute.rb
|
224
230
|
- app/models/metasploit_data_models/search/visitor/includes.rb
|
225
231
|
- app/models/metasploit_data_models/search/visitor/joins.rb
|
@@ -346,11 +352,9 @@ files:
|
|
346
352
|
- lib/metasploit_data_models/base64_serializer.rb
|
347
353
|
- lib/metasploit_data_models/change_required_columns_to_null_false.rb
|
348
354
|
- lib/metasploit_data_models/engine.rb
|
349
|
-
- lib/metasploit_data_models/models.rb
|
350
355
|
- lib/metasploit_data_models/search.rb
|
351
356
|
- lib/metasploit_data_models/search/visitor.rb
|
352
357
|
- lib/metasploit_data_models/serialized_prefs.rb
|
353
|
-
- lib/metasploit_data_models/validators.rb
|
354
358
|
- lib/metasploit_data_models/version.rb
|
355
359
|
- lib/tasks/yard.rake
|
356
360
|
- metasploit_data_models.gemspec
|
@@ -402,6 +406,11 @@ files:
|
|
402
406
|
- spec/app/models/mdm/wmap_request_spec.rb
|
403
407
|
- spec/app/models/mdm/wmap_target_spec.rb
|
404
408
|
- spec/app/models/mdm/workspace_spec.rb
|
409
|
+
- spec/app/models/metasploit_data_models/search/operation/port/number_spec.rb
|
410
|
+
- spec/app/models/metasploit_data_models/search/operation/port/range_spec.rb
|
411
|
+
- spec/app/models/metasploit_data_models/search/operation/range_spec.rb
|
412
|
+
- spec/app/models/metasploit_data_models/search/operator/multitext_spec.rb
|
413
|
+
- spec/app/models/metasploit_data_models/search/operator/port/list_spec.rb
|
405
414
|
- spec/app/models/metasploit_data_models/search/visitor/attribute_spec.rb
|
406
415
|
- spec/app/models/metasploit_data_models/search/visitor/includes_spec.rb
|
407
416
|
- spec/app/models/metasploit_data_models/search/visitor/joins_spec.rb
|
@@ -491,6 +500,7 @@ files:
|
|
491
500
|
- spec/factories/mdm/web_vulns.rb
|
492
501
|
- spec/factories/mdm/workspaces.rb
|
493
502
|
- spec/lib/base64_serializer_spec.rb
|
503
|
+
- spec/lib/metasploit_data_models/version_spec.rb
|
494
504
|
- spec/spec_helper.rb
|
495
505
|
- spec/support/shared/examples/mdm/module/detail/does_not_support_stance_with_mtype.rb
|
496
506
|
- spec/support/shared/examples/mdm/module/detail/supports_stance_with_mtype.rb
|
@@ -515,9 +525,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
515
525
|
version: '0'
|
516
526
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
517
527
|
requirements:
|
518
|
-
- - ! '
|
528
|
+
- - ! '>'
|
519
529
|
- !ruby/object:Gem::Version
|
520
|
-
version:
|
530
|
+
version: 1.3.1
|
521
531
|
requirements: []
|
522
532
|
rubyforge_project:
|
523
533
|
rubygems_version: 2.2.2
|
@@ -572,6 +582,11 @@ test_files:
|
|
572
582
|
- spec/app/models/mdm/wmap_request_spec.rb
|
573
583
|
- spec/app/models/mdm/wmap_target_spec.rb
|
574
584
|
- spec/app/models/mdm/workspace_spec.rb
|
585
|
+
- spec/app/models/metasploit_data_models/search/operation/port/number_spec.rb
|
586
|
+
- spec/app/models/metasploit_data_models/search/operation/port/range_spec.rb
|
587
|
+
- spec/app/models/metasploit_data_models/search/operation/range_spec.rb
|
588
|
+
- spec/app/models/metasploit_data_models/search/operator/multitext_spec.rb
|
589
|
+
- spec/app/models/metasploit_data_models/search/operator/port/list_spec.rb
|
575
590
|
- spec/app/models/metasploit_data_models/search/visitor/attribute_spec.rb
|
576
591
|
- spec/app/models/metasploit_data_models/search/visitor/includes_spec.rb
|
577
592
|
- spec/app/models/metasploit_data_models/search/visitor/joins_spec.rb
|
@@ -661,6 +676,7 @@ test_files:
|
|
661
676
|
- spec/factories/mdm/web_vulns.rb
|
662
677
|
- spec/factories/mdm/workspaces.rb
|
663
678
|
- spec/lib/base64_serializer_spec.rb
|
679
|
+
- spec/lib/metasploit_data_models/version_spec.rb
|
664
680
|
- spec/spec_helper.rb
|
665
681
|
- spec/support/shared/examples/mdm/module/detail/does_not_support_stance_with_mtype.rb
|
666
682
|
- 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
|