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.
Files changed (36) hide show
  1. checksums.yaml +8 -8
  2. data/CONTRIBUTING.md +164 -0
  3. data/README.md +6 -2
  4. data/app/models/mdm/host.rb +18 -0
  5. data/app/models/mdm/service.rb +12 -1
  6. data/app/models/metasploit_data_models/search/operation/port/number.rb +25 -0
  7. data/app/models/metasploit_data_models/search/operation/port/range.rb +79 -0
  8. data/app/models/metasploit_data_models/search/operation/range.rb +56 -0
  9. data/app/models/metasploit_data_models/search/operator/multitext.rb +73 -0
  10. data/app/models/metasploit_data_models/search/operator/port/list.rb +67 -0
  11. data/app/models/metasploit_data_models/search/visitor/attribute.rb +2 -1
  12. data/app/models/metasploit_data_models/search/visitor/includes.rb +3 -2
  13. data/app/models/metasploit_data_models/search/visitor/joins.rb +5 -3
  14. data/app/models/metasploit_data_models/search/visitor/method.rb +3 -2
  15. data/app/models/metasploit_data_models/search/visitor/where.rb +8 -2
  16. data/config/locales/en.yml +17 -1
  17. data/lib/metasploit_data_models.rb +1 -9
  18. data/lib/metasploit_data_models/version.rb +29 -6
  19. data/metasploit_data_models.gemspec +2 -2
  20. data/spec/app/models/metasploit_data_models/search/operation/port/number_spec.rb +41 -0
  21. data/spec/app/models/metasploit_data_models/search/operation/port/range_spec.rb +140 -0
  22. data/spec/app/models/metasploit_data_models/search/operation/range_spec.rb +235 -0
  23. data/spec/app/models/metasploit_data_models/search/operator/multitext_spec.rb +162 -0
  24. data/spec/app/models/metasploit_data_models/search/operator/port/list_spec.rb +164 -0
  25. data/spec/app/models/metasploit_data_models/search/visitor/attribute_spec.rb +48 -26
  26. data/spec/app/models/metasploit_data_models/search/visitor/includes_spec.rb +10 -7
  27. data/spec/app/models/metasploit_data_models/search/visitor/joins_spec.rb +44 -30
  28. data/spec/app/models/metasploit_data_models/search/visitor/method_spec.rb +16 -0
  29. data/spec/app/models/metasploit_data_models/search/visitor/relation_spec.rb +273 -65
  30. data/spec/app/models/metasploit_data_models/search/visitor/where_spec.rb +42 -2
  31. data/spec/factories/mdm/services.rb +1 -2
  32. data/spec/lib/metasploit_data_models/version_spec.rb +141 -0
  33. data/spec/support/shared/examples/metasploit_data_models/search/visitor/where/visit/with_metasploit_model_search_group_base.rb +1 -1
  34. metadata +27 -11
  35. data/lib/metasploit_data_models/models.rb +0 -21
  36. 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::Group::Base',
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 4567
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::Group::Base' do |options={}|
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.17.3
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-06-23 00:00:00.000000000 Z
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.24.1
112
+ version: 0.25.1
113
113
  - - <
114
114
  - !ruby/object:Gem::Version
115
- version: '0.25'
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.24.1
122
+ version: 0.25.1
123
123
  - - <
124
124
  - !ruby/object:Gem::Version
125
- version: '0.25'
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: '0'
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