metasploit-model 0.28.0-java → 0.29.0-java
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/.travis.yml +3 -1
- data/config/locales/en.yml +0 -171
- data/lib/metasploit/model.rb +0 -2
- data/lib/metasploit/model/spec.rb +0 -130
- data/lib/metasploit/model/version.rb +1 -1
- data/spec/support/shared/examples/metasploit/model/search/operator/help.rb +4 -6
- data/spec/support/shared/examples/metasploit/model/translation.rb +1 -1
- data/spec/support/shared/examples/search_association.rb +1 -1
- data/spec/support/shared/examples/search_with.rb +4 -2
- metadata +2 -348
- data/app/models/metasploit/model/module/ancestor/spec/template.rb +0 -125
- data/app/models/metasploit/model/module/class/spec/template.rb +0 -92
- data/app/models/metasploit/model/module/instance/spec/template.rb +0 -97
- data/app/models/metasploit/model/spec/template.rb +0 -277
- data/app/validators/derivation_validator.rb +0 -17
- data/app/validators/dynamic_length_validator.rb +0 -45
- data/lib/metasploit/model/architecture.rb +0 -342
- data/lib/metasploit/model/author.rb +0 -54
- data/lib/metasploit/model/authority.rb +0 -141
- data/lib/metasploit/model/authority/bid.rb +0 -10
- data/lib/metasploit/model/authority/cve.rb +0 -10
- data/lib/metasploit/model/authority/msb.rb +0 -10
- data/lib/metasploit/model/authority/osvdb.rb +0 -10
- data/lib/metasploit/model/authority/pmasa.rb +0 -10
- data/lib/metasploit/model/authority/secunia.rb +0 -10
- data/lib/metasploit/model/authority/us_cert_vu.rb +0 -10
- data/lib/metasploit/model/authority/waraxe.rb +0 -31
- data/lib/metasploit/model/authority/zdi.rb +0 -10
- data/lib/metasploit/model/derivation.rb +0 -109
- data/lib/metasploit/model/derivation/full_name.rb +0 -19
- data/lib/metasploit/model/email_address.rb +0 -124
- data/lib/metasploit/model/module.rb +0 -20
- data/lib/metasploit/model/module/action.rb +0 -52
- data/lib/metasploit/model/module/ancestor.rb +0 -491
- data/lib/metasploit/model/module/ancestor/spec.rb +0 -6
- data/lib/metasploit/model/module/architecture.rb +0 -34
- data/lib/metasploit/model/module/author.rb +0 -40
- data/lib/metasploit/model/module/class.rb +0 -403
- data/lib/metasploit/model/module/class/spec.rb +0 -6
- data/lib/metasploit/model/module/handler.rb +0 -29
- data/lib/metasploit/model/module/instance.rb +0 -622
- data/lib/metasploit/model/module/instance/spec.rb +0 -6
- data/lib/metasploit/model/module/path.rb +0 -159
- data/lib/metasploit/model/module/platform.rb +0 -32
- data/lib/metasploit/model/module/rank.rb +0 -85
- data/lib/metasploit/model/module/reference.rb +0 -32
- data/lib/metasploit/model/module/stance.rb +0 -16
- data/lib/metasploit/model/module/target.rb +0 -78
- data/lib/metasploit/model/module/target/architecture.rb +0 -34
- data/lib/metasploit/model/module/target/platform.rb +0 -34
- data/lib/metasploit/model/module/type.rb +0 -38
- data/lib/metasploit/model/platform.rb +0 -246
- data/lib/metasploit/model/real_pathname.rb +0 -16
- data/lib/metasploit/model/reference.rb +0 -104
- data/spec/app/models/metasploit/model/module/ancestor/spec/template_spec.rb +0 -174
- data/spec/app/models/metasploit/model/module/class/spec/template_spec.rb +0 -222
- data/spec/app/models/metasploit/model/module/instance/spec/template_spec.rb +0 -201
- data/spec/app/models/metasploit/model/search/operator/deprecated/app_spec.rb +0 -62
- data/spec/app/models/metasploit/model/search/operator/deprecated/author_spec.rb +0 -197
- data/spec/app/models/metasploit/model/search/operator/deprecated/authority_spec.rb +0 -135
- data/spec/app/models/metasploit/model/search/operator/deprecated/platform_spec.rb +0 -124
- data/spec/app/models/metasploit/model/search/operator/deprecated/ref_spec.rb +0 -387
- data/spec/app/models/metasploit/model/search/operator/deprecated/text_spec.rb +0 -399
- data/spec/app/models/metasploit/model/spec/template_spec.rb +0 -23
- data/spec/app/validators/derivation_validator_spec.rb +0 -92
- data/spec/app/validators/dynamic_length_validator_spec.rb +0 -293
- data/spec/dummy/app/models/dummy/architecture.rb +0 -92
- data/spec/dummy/app/models/dummy/author.rb +0 -15
- data/spec/dummy/app/models/dummy/authority.rb +0 -130
- data/spec/dummy/app/models/dummy/email_address.rb +0 -27
- data/spec/dummy/app/models/dummy/module/action.rb +0 -25
- data/spec/dummy/app/models/dummy/module/ancestor.rb +0 -67
- data/spec/dummy/app/models/dummy/module/architecture.rb +0 -19
- data/spec/dummy/app/models/dummy/module/author.rb +0 -28
- data/spec/dummy/app/models/dummy/module/class.rb +0 -69
- data/spec/dummy/app/models/dummy/module/instance.rb +0 -209
- data/spec/dummy/app/models/dummy/module/path.rb +0 -64
- data/spec/dummy/app/models/dummy/module/platform.rb +0 -19
- data/spec/dummy/app/models/dummy/module/rank.rb +0 -44
- data/spec/dummy/app/models/dummy/module/reference.rb +0 -19
- data/spec/dummy/app/models/dummy/module/target.rb +0 -62
- data/spec/dummy/app/models/dummy/module/target/architecture.rb +0 -19
- data/spec/dummy/app/models/dummy/module/target/platform.rb +0 -19
- data/spec/dummy/app/models/dummy/platform.rb +0 -58
- data/spec/dummy/app/models/dummy/reference.rb +0 -31
- data/spec/dummy/spec/factories/dummy/architectures.rb +0 -13
- data/spec/dummy/spec/factories/dummy/authorities.rb +0 -32
- data/spec/dummy/spec/factories/dummy/authors.rb +0 -8
- data/spec/dummy/spec/factories/dummy/email_addresses.rb +0 -8
- data/spec/dummy/spec/factories/dummy/module/actions.rb +0 -13
- data/spec/dummy/spec/factories/dummy/module/ancestors.rb +0 -45
- data/spec/dummy/spec/factories/dummy/module/architectures.rb +0 -35
- data/spec/dummy/spec/factories/dummy/module/authors.rb +0 -10
- data/spec/dummy/spec/factories/dummy/module/classes.rb +0 -40
- data/spec/dummy/spec/factories/dummy/module/instances.rb +0 -86
- data/spec/dummy/spec/factories/dummy/module/paths.rb +0 -16
- data/spec/dummy/spec/factories/dummy/module/platforms.rb +0 -35
- data/spec/dummy/spec/factories/dummy/module/ranks.rb +0 -14
- data/spec/dummy/spec/factories/dummy/module/references.rb +0 -17
- data/spec/dummy/spec/factories/dummy/module/target/architectures.rb +0 -40
- data/spec/dummy/spec/factories/dummy/module/target/platforms.rb +0 -41
- data/spec/dummy/spec/factories/dummy/module/targets.rb +0 -46
- data/spec/dummy/spec/factories/dummy/platforms.rb +0 -3
- data/spec/dummy/spec/factories/dummy/references.rb +0 -26
- data/spec/factories/metasploit/model/architectures.rb +0 -6
- data/spec/factories/metasploit/model/authorities.rb +0 -28
- data/spec/factories/metasploit/model/authors.rb +0 -9
- data/spec/factories/metasploit/model/email_addresses.rb +0 -14
- data/spec/factories/metasploit/model/module/actions.rb +0 -9
- data/spec/factories/metasploit/model/module/ancestors.rb +0 -180
- data/spec/factories/metasploit/model/module/architectures.rb +0 -15
- data/spec/factories/metasploit/model/module/classes.rb +0 -47
- data/spec/factories/metasploit/model/module/handlers.rb +0 -3
- data/spec/factories/metasploit/model/module/instances.rb +0 -83
- data/spec/factories/metasploit/model/module/paths.rb +0 -51
- data/spec/factories/metasploit/model/module/platforms.rb +0 -15
- data/spec/factories/metasploit/model/module/ranks.rb +0 -9
- data/spec/factories/metasploit/model/module/references.rb +0 -11
- data/spec/factories/metasploit/model/module/stances.rb +0 -3
- data/spec/factories/metasploit/model/module/targets.rb +0 -22
- data/spec/factories/metasploit/model/module/types.rb +0 -5
- data/spec/factories/metasploit/model/references.rb +0 -88
- data/spec/lib/metasploit/model/architecture_spec.rb +0 -52
- data/spec/lib/metasploit/model/author_spec.rb +0 -6
- data/spec/lib/metasploit/model/authority/bid_spec.rb +0 -17
- data/spec/lib/metasploit/model/authority/cve_spec.rb +0 -17
- data/spec/lib/metasploit/model/authority/msb_spec.rb +0 -17
- data/spec/lib/metasploit/model/authority/osvdb_spec.rb +0 -17
- data/spec/lib/metasploit/model/authority/pmasa_spec.rb +0 -17
- data/spec/lib/metasploit/model/authority/secunia_spec.rb +0 -17
- data/spec/lib/metasploit/model/authority/us_cert_vu_spec.rb +0 -17
- data/spec/lib/metasploit/model/authority/waraxe_spec.rb +0 -51
- data/spec/lib/metasploit/model/authority/zdi_spec.rb +0 -21
- data/spec/lib/metasploit/model/authority_spec.rb +0 -10
- data/spec/lib/metasploit/model/derivation/full_name_spec.rb +0 -75
- data/spec/lib/metasploit/model/derivation_spec.rb +0 -217
- data/spec/lib/metasploit/model/email_address_spec.rb +0 -19
- data/spec/lib/metasploit/model/module/action_spec.rb +0 -6
- data/spec/lib/metasploit/model/module/ancestor_spec.rb +0 -6
- data/spec/lib/metasploit/model/module/architecture_spec.rb +0 -9
- data/spec/lib/metasploit/model/module/author_spec.rb +0 -6
- data/spec/lib/metasploit/model/module/class_spec.rb +0 -19
- data/spec/lib/metasploit/model/module/handler_spec.rb +0 -61
- data/spec/lib/metasploit/model/module/instance_spec.rb +0 -183
- data/spec/lib/metasploit/model/module/path_spec.rb +0 -6
- data/spec/lib/metasploit/model/module/platform_spec.rb +0 -9
- data/spec/lib/metasploit/model/module/rank_spec.rb +0 -29
- data/spec/lib/metasploit/model/module/reference_spec.rb +0 -9
- data/spec/lib/metasploit/model/module/stance_spec.rb +0 -30
- data/spec/lib/metasploit/model/module/target/architecture_spec.rb +0 -9
- data/spec/lib/metasploit/model/module/target/platform_spec.rb +0 -9
- data/spec/lib/metasploit/model/module/target_spec.rb +0 -9
- data/spec/lib/metasploit/model/module/type_spec.rb +0 -125
- data/spec/lib/metasploit/model/platform_spec.rb +0 -100
- data/spec/lib/metasploit/model/reference_spec.rb +0 -21
- data/spec/support/shared/contexts/metasploit/model/module/ancestor/contents/metasploit_module.rb +0 -12
- data/spec/support/shared/contexts/metasploit/model/module/ancestor/factory/contents.rb +0 -10
- data/spec/support/shared/contexts/metasploit/model/module/ancestor/factory/contents/metasploit_module.rb +0 -15
- data/spec/support/shared/examples/derives.rb +0 -115
- data/spec/support/shared/examples/metasploit/model/architecture.rb +0 -425
- data/spec/support/shared/examples/metasploit/model/architecture/seed.rb +0 -25
- data/spec/support/shared/examples/metasploit/model/author.rb +0 -27
- data/spec/support/shared/examples/metasploit/model/authority.rb +0 -124
- data/spec/support/shared/examples/metasploit/model/authority/seed.rb +0 -49
- data/spec/support/shared/examples/metasploit/model/email_address.rb +0 -220
- data/spec/support/shared/examples/metasploit/model/module/action.rb +0 -26
- data/spec/support/shared/examples/metasploit/model/module/ancestor.rb +0 -2004
- data/spec/support/shared/examples/metasploit/model/module/ancestor/payload_factory.rb +0 -63
- data/spec/support/shared/examples/metasploit/model/module/architecture.rb +0 -36
- data/spec/support/shared/examples/metasploit/model/module/author.rb +0 -29
- data/spec/support/shared/examples/metasploit/model/module/class.rb +0 -1514
- data/spec/support/shared/examples/metasploit/model/module/handler.rb +0 -21
- data/spec/support/shared/examples/metasploit/model/module/instance.rb +0 -1384
- data/spec/support/shared/examples/metasploit/model/module/instance/class_methods.rb +0 -537
- data/spec/support/shared/examples/metasploit/model/module/instance/is_not_stanced_with_module_type.rb +0 -22
- data/spec/support/shared/examples/metasploit/model/module/instance/is_stanced_with_module_type.rb +0 -38
- data/spec/support/shared/examples/metasploit/model/module/instance/validates/dynamic_length_of.rb +0 -131
- data/spec/support/shared/examples/metasploit/model/module/path.rb +0 -493
- data/spec/support/shared/examples/metasploit/model/module/platform.rb +0 -36
- data/spec/support/shared/examples/metasploit/model/module/rank.rb +0 -92
- data/spec/support/shared/examples/metasploit/model/module/reference.rb +0 -16
- data/spec/support/shared/examples/metasploit/model/module/target.rb +0 -29
- data/spec/support/shared/examples/metasploit/model/module/target/architecture.rb +0 -56
- data/spec/support/shared/examples/metasploit/model/module/target/platform.rb +0 -56
- data/spec/support/shared/examples/metasploit/model/platform.rb +0 -213
- data/spec/support/shared/examples/metasploit/model/real_pathname.rb +0 -29
- data/spec/support/shared/examples/metasploit/model/reference.rb +0 -410
- data/spec/support/shared/examples/search/query/metasploit/model/search/operator/deprecated/app.rb +0 -44
- data/spec/support/shared/examples/search/query/metasploit/model/search/operator/deprecated/authority.rb +0 -72
- data/spec/support/templates/metasploit/model/module/ancestors/_attributes.rb.erb +0 -9
- data/spec/support/templates/metasploit/model/module/ancestors/_methods.rb.erb +0 -8
- data/spec/support/templates/metasploit/model/module/ancestors/_validations.rb.erb +0 -6
- data/spec/support/templates/metasploit/model/module/ancestors/base.rb.erb +0 -3
- data/spec/support/templates/metasploit/model/module/ancestors/module_types/_auxiliary.rb.erb +0 -1
- data/spec/support/templates/metasploit/model/module/ancestors/module_types/_encoder.rb.erb +0 -1
- data/spec/support/templates/metasploit/model/module/ancestors/module_types/_exploit.rb.erb +0 -1
- data/spec/support/templates/metasploit/model/module/ancestors/module_types/_non_payload.rb.erb +0 -5
- data/spec/support/templates/metasploit/model/module/ancestors/module_types/_nop.rb.erb +0 -1
- data/spec/support/templates/metasploit/model/module/ancestors/module_types/_payload.rb.erb +0 -4
- data/spec/support/templates/metasploit/model/module/ancestors/module_types/_post.rb.erb +0 -1
- data/spec/support/templates/metasploit/model/module/ancestors/payload_types/_handled.rb.erb +0 -20
- data/spec/support/templates/metasploit/model/module/ancestors/payload_types/_single.rb.erb +0 -1
- data/spec/support/templates/metasploit/model/module/ancestors/payload_types/_stage.rb.erb +0 -0
- data/spec/support/templates/metasploit/model/module/ancestors/payload_types/_stager.rb.erb +0 -1
- data/spec/support/templates/metasploit/model/module/classes/_methods.rb.erb +0 -9
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
# Writes templates for the {#module_ancestor} to disk.
|
|
2
|
-
#
|
|
3
|
-
# @example Update files after changing
|
|
4
|
-
# module_ancestor = FactoryGirl.build(
|
|
5
|
-
# :dummy_module_ancestor
|
|
6
|
-
# )
|
|
7
|
-
# # factory already wrote template when build returned
|
|
8
|
-
#
|
|
9
|
-
# # update
|
|
10
|
-
# module_ancestor.module_type = FactoryGirl.generate :metasploit_model_module_type
|
|
11
|
-
#
|
|
12
|
-
# # Now the template on disk is different than the module_ancestor, so regenerate the template
|
|
13
|
-
# Metasploit::Model::Module::Ancestor::Spec::Template.write(module_ancestor: module_ancestor)
|
|
14
|
-
class Metasploit::Model::Module::Ancestor::Spec::Template < Metasploit::Model::Spec::Template
|
|
15
|
-
extend Metasploit::Model::Spec::Template::Write
|
|
16
|
-
|
|
17
|
-
#
|
|
18
|
-
# CONSTANTS
|
|
19
|
-
#
|
|
20
|
-
|
|
21
|
-
# Default value for {#search_pathnames}.
|
|
22
|
-
DEFAULT_SEARCH_PATHNAMES = [
|
|
23
|
-
Pathname.new('module/ancestors')
|
|
24
|
-
]
|
|
25
|
-
# Default value for {#source_relative_name}.
|
|
26
|
-
DEFAULT_SOURCE_RELATIVE_NAME = 'base'
|
|
27
|
-
|
|
28
|
-
#
|
|
29
|
-
# Attributes
|
|
30
|
-
#
|
|
31
|
-
|
|
32
|
-
# @!attribute [rw] metasploit_module_relative_name
|
|
33
|
-
# The name of the Class/Module in the template. Defaults to
|
|
34
|
-
# `FactoryGirl.generate :metasploit_model_module_ancestor_metasploit_module_relative_name`.
|
|
35
|
-
#
|
|
36
|
-
# @return [String]
|
|
37
|
-
attr_writer :metasploit_module_relative_name
|
|
38
|
-
|
|
39
|
-
# @!attribute [rw] module_ancestor
|
|
40
|
-
# The module ancestor to write.
|
|
41
|
-
#
|
|
42
|
-
# @return [Metasploit::Model::Module::Ancestor]
|
|
43
|
-
attr_accessor :module_ancestor
|
|
44
|
-
|
|
45
|
-
#
|
|
46
|
-
# Validations
|
|
47
|
-
#
|
|
48
|
-
|
|
49
|
-
validates :module_ancestor,
|
|
50
|
-
presence: true
|
|
51
|
-
|
|
52
|
-
#
|
|
53
|
-
# Methods
|
|
54
|
-
#
|
|
55
|
-
|
|
56
|
-
# The pathname where to {#write} to template results.
|
|
57
|
-
#
|
|
58
|
-
# @return [Pathname] `Metasploit::Model::Module::Ancestor#real_pathname.
|
|
59
|
-
# @return [nil] if {#module_ancestor} is `nil`.
|
|
60
|
-
# @return [nil] if {#module_ancestor #module_ancestor's} `Metasploit::Model::Module::Ancestor#real_pathname` is `nil`
|
|
61
|
-
# after derivation.
|
|
62
|
-
def destination_pathname
|
|
63
|
-
unless instance_variable_defined? :@destination_pathname
|
|
64
|
-
@destination_pathname = nil
|
|
65
|
-
|
|
66
|
-
if module_ancestor
|
|
67
|
-
destination_pathname = module_ancestor.real_pathname
|
|
68
|
-
|
|
69
|
-
unless destination_pathname
|
|
70
|
-
# validate to derive real_path and therefore real_pathname
|
|
71
|
-
module_ancestor.valid?
|
|
72
|
-
|
|
73
|
-
destination_pathname = module_ancestor.real_pathname
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
@destination_pathname = destination_pathname
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
@destination_pathname
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
# Local variables exposed to partials.
|
|
84
|
-
#
|
|
85
|
-
# @return [Hash{Symbol => Object}] {#metasploit_module_relative_name} as :metasploit_module_relative_name and
|
|
86
|
-
# {#module_ancestor} at :module_ancestor.
|
|
87
|
-
def locals
|
|
88
|
-
@locals ||= {
|
|
89
|
-
metasploit_module_relative_name: metasploit_module_relative_name,
|
|
90
|
-
module_ancestor: module_ancestor
|
|
91
|
-
}
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
# Name of the Class/Module declared in the template file.
|
|
95
|
-
#
|
|
96
|
-
# @return [String]
|
|
97
|
-
def metasploit_module_relative_name
|
|
98
|
-
@metasploit_module_relative_name ||= FactoryGirl.generate :metasploit_model_module_ancestor_metasploit_module_relative_name
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
# Whether to overwrite a pre-existing file.
|
|
102
|
-
#
|
|
103
|
-
# @return [Boolean] Defaults to `false` since nothing should write the template before the ancestor.
|
|
104
|
-
def overwrite
|
|
105
|
-
unless instance_variable_defined? :@overwrite
|
|
106
|
-
@overwrite = false
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
@overwrite
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
# Pathnames to search for partials.
|
|
113
|
-
#
|
|
114
|
-
# @return [Array<Pathname>] {DEFAULT_SEARCH_PATHNAMES}
|
|
115
|
-
def search_pathnames
|
|
116
|
-
@search_pathnames ||= DEFAULT_SEARCH_PATHNAMES.dup
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
# Name of template under {#search_pathnames} without {EXTENSION}.
|
|
120
|
-
#
|
|
121
|
-
# @return [String] Defaults to {DEFAULT_SOURCE_RELATIVE_NAME}.
|
|
122
|
-
def source_relative_name
|
|
123
|
-
@source_relative_name ||= DEFAULT_SOURCE_RELATIVE_NAME
|
|
124
|
-
end
|
|
125
|
-
end
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
# Writes templates for the {#module_class #module_class's} {Metasploit::Model::Module::Class#ancestors} to disk.
|
|
2
|
-
#
|
|
3
|
-
# @example Update files after changing associations
|
|
4
|
-
# module_class = FactoryGirl.build(
|
|
5
|
-
# :dummy_module_class
|
|
6
|
-
# )
|
|
7
|
-
# # factory already wrote template when build returned
|
|
8
|
-
#
|
|
9
|
-
# # update associations
|
|
10
|
-
# rank = FactoryGirl.generate :dummy_rank
|
|
11
|
-
# module_class.rank = rank
|
|
12
|
-
#
|
|
13
|
-
# # Now the template on disk is different than the module_class, so regenerate the template
|
|
14
|
-
# Metasploit::Model::Module::Class::Spec::Template.write(module_class: module_class)
|
|
15
|
-
class Metasploit::Model::Module::Class::Spec::Template < Metasploit::Model::Base
|
|
16
|
-
extend Metasploit::Model::Spec::Template::Write
|
|
17
|
-
|
|
18
|
-
#
|
|
19
|
-
# Attributes
|
|
20
|
-
#
|
|
21
|
-
|
|
22
|
-
# @!attribute [rw] module_class
|
|
23
|
-
# The {Metasploit::Model::Module::Class} whose {Metasploit::Model::Module::Class#ancestors} need to be templated in
|
|
24
|
-
# {#ancestor_templates}.
|
|
25
|
-
#
|
|
26
|
-
# @return [Metasploit::Model::Module::Class]
|
|
27
|
-
attr_accessor :module_class
|
|
28
|
-
|
|
29
|
-
#
|
|
30
|
-
# Validations
|
|
31
|
-
#
|
|
32
|
-
|
|
33
|
-
validates :module_class,
|
|
34
|
-
presence: true
|
|
35
|
-
validate :ancestor_templates_valid
|
|
36
|
-
|
|
37
|
-
#
|
|
38
|
-
# Methods
|
|
39
|
-
#
|
|
40
|
-
|
|
41
|
-
# Template for {#module_class} {Metasploit::Model::Module::Class#ancestors} with the addition of {#module_class} to
|
|
42
|
-
# the {Metasploit::Model::Spec::Template#locals} and adding 'module/classes' to the front of the
|
|
43
|
-
# {Metasploit::Model::Spec::Template#search_pathnames}.
|
|
44
|
-
#
|
|
45
|
-
# @return [Array<Metasploit::Model::Module::Ancestor::Spec::Template>]
|
|
46
|
-
# @return [[]] if {#module_class} is `nil`.
|
|
47
|
-
def ancestor_templates
|
|
48
|
-
unless instance_variable_defined? :@ancestor_templates
|
|
49
|
-
if module_class
|
|
50
|
-
@ancestor_templates = module_class.ancestors.collect { |module_ancestor|
|
|
51
|
-
Metasploit::Model::Module::Ancestor::Spec::Template.new(
|
|
52
|
-
module_ancestor: module_ancestor
|
|
53
|
-
).tap { |module_ancestor_template|
|
|
54
|
-
module_ancestor_template.locals[:module_class] = module_class
|
|
55
|
-
module_ancestor_template.overwrite = true
|
|
56
|
-
|
|
57
|
-
module_ancestor_template.search_pathnames.unshift(
|
|
58
|
-
Pathname.new('module/classes')
|
|
59
|
-
)
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
@ancestor_templates ||= []
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
@ancestor_templates
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
# Writes {#ancestor_templates} to disk.
|
|
71
|
-
#
|
|
72
|
-
# @return [void]
|
|
73
|
-
# @raise (see Metasploit::Model::Spec::Template)
|
|
74
|
-
def write
|
|
75
|
-
ancestor_templates.each(&:write)
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
private
|
|
79
|
-
|
|
80
|
-
# Validates that all {#ancestor_templates} are valid.
|
|
81
|
-
#
|
|
82
|
-
# @return [void]
|
|
83
|
-
def ancestor_templates_valid
|
|
84
|
-
# can't use ancestor_templates.all?(&:valid?) as it will short-circuit and want all ancestor_templates to have
|
|
85
|
-
# validation errors
|
|
86
|
-
valids = ancestor_templates.map(&:valid?)
|
|
87
|
-
|
|
88
|
-
unless valids.all?
|
|
89
|
-
errors.add(:ancestor_templates, :invalid, value: ancestor_templates)
|
|
90
|
-
end
|
|
91
|
-
end
|
|
92
|
-
end
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
# Writes templates for the {#module_instance #module_instance's}
|
|
2
|
-
# {Metasploit::Model::Module::Instance#module_class #module_class's} {Metasploit::Model::Module::Class#ancestors} to
|
|
3
|
-
# disk.
|
|
4
|
-
#
|
|
5
|
-
# @example Update files after changing associations
|
|
6
|
-
# module_instance = FactoryGirl.build(
|
|
7
|
-
# :dummy_module_instance,
|
|
8
|
-
# module_architectures_length: 0
|
|
9
|
-
# )
|
|
10
|
-
# # factory already wrote template when build returned
|
|
11
|
-
#
|
|
12
|
-
# # update associations
|
|
13
|
-
# architecture = FactoryGirl.generate :dummy_architecture
|
|
14
|
-
# module_instance.module_architectures = FactoryGirl.build_list(
|
|
15
|
-
# :dummy_module_architecture,
|
|
16
|
-
# 1,
|
|
17
|
-
# architecture: architecture
|
|
18
|
-
# )
|
|
19
|
-
#
|
|
20
|
-
# # Now the template on disk is different than the module_instance, so regenerate the template
|
|
21
|
-
# Metasploit::Model::Module::Instance::Spec::Template.write(module_instance: module_instance)
|
|
22
|
-
class Metasploit::Model::Module::Instance::Spec::Template < Metasploit::Model::Base
|
|
23
|
-
extend Metasploit::Model::Spec::Template::Write
|
|
24
|
-
|
|
25
|
-
#
|
|
26
|
-
# Attributes
|
|
27
|
-
#
|
|
28
|
-
|
|
29
|
-
# @!attribute [rw] module_instance
|
|
30
|
-
# The {Metasploit::Model::Module::Instance} whose {Metasploit::Model::Module::Instance#module_class} needs to be
|
|
31
|
-
# templated in {#class_template}.
|
|
32
|
-
#
|
|
33
|
-
# @return [Metasploit::Model::Module::Instance]
|
|
34
|
-
attr_accessor :module_instance
|
|
35
|
-
|
|
36
|
-
#
|
|
37
|
-
# Validations
|
|
38
|
-
#
|
|
39
|
-
|
|
40
|
-
validates :class_template,
|
|
41
|
-
presence: true
|
|
42
|
-
validates :module_instance,
|
|
43
|
-
presence: true
|
|
44
|
-
validate :class_template_valid
|
|
45
|
-
|
|
46
|
-
#
|
|
47
|
-
# Methods
|
|
48
|
-
#
|
|
49
|
-
|
|
50
|
-
# Template for {#module_instance} {Metasploit::Model::Module::Instance#module_class} with the addition of
|
|
51
|
-
# {#module_instance} to the {Metasploit::Model::Spec::Template#locals} and adding 'module/instances' to the front of
|
|
52
|
-
# the {Metasploit::Model::Spec::Template#search_pathnames}.
|
|
53
|
-
#
|
|
54
|
-
# @return [Metasploit::Model::Module::Class::Spec::Template] if {#module_instance} present.
|
|
55
|
-
# @return [nil] if {#module_instance} is `nil`.
|
|
56
|
-
def class_template
|
|
57
|
-
unless instance_variable_defined? :@class_template
|
|
58
|
-
if module_instance
|
|
59
|
-
class_template = Metasploit::Model::Module::Class::Spec::Template.new(
|
|
60
|
-
module_class: module_instance.module_class
|
|
61
|
-
)
|
|
62
|
-
class_template.ancestor_templates.each do |ancestor_template|
|
|
63
|
-
ancestor_template.locals[:module_instance] = module_instance
|
|
64
|
-
|
|
65
|
-
ancestor_template.search_pathnames.unshift(
|
|
66
|
-
Pathname.new('module/instances')
|
|
67
|
-
)
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
@class_template = class_template
|
|
71
|
-
else
|
|
72
|
-
@class_template = nil
|
|
73
|
-
end
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
@class_template
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
# @!method write
|
|
80
|
-
# Writes {#class_template} to disk.
|
|
81
|
-
#
|
|
82
|
-
# @return [void]
|
|
83
|
-
# @raise (see Metasploit::Model::Spec::Template)
|
|
84
|
-
delegate :write,
|
|
85
|
-
to: :class_template
|
|
86
|
-
|
|
87
|
-
private
|
|
88
|
-
|
|
89
|
-
# Validates that {#class_template} is valid when present.
|
|
90
|
-
#
|
|
91
|
-
# @return [void]
|
|
92
|
-
def class_template_valid
|
|
93
|
-
if class_template && !class_template.valid?
|
|
94
|
-
errors.add(:class_template, :invalid, value: class_template)
|
|
95
|
-
end
|
|
96
|
-
end
|
|
97
|
-
end
|
|
@@ -1,277 +0,0 @@
|
|
|
1
|
-
# Processes {EXTENSION '.rb.erb'} templates to create {Metasploit::Model::Module::Ancestor#contents} that contain the
|
|
2
|
-
# same metadata as the {Metasploit::Model::Module::Ancestor},
|
|
3
|
-
# {Metasploit::Model::Module::Class}, {Metasploit::Model::Module::Instance} and associations for those contents. This
|
|
4
|
-
# ensures that when the {Metasploit::Model::Module::Ancestor#contents} are loaded in metasploit-framework, the same
|
|
5
|
-
# metadata instances are derived from the contents ensuring idempotency of the contents and metadata parsing loop.
|
|
6
|
-
class Metasploit::Model::Spec::Template < Metasploit::Model::Base
|
|
7
|
-
extend ActiveSupport::Autoload
|
|
8
|
-
extend ActiveModel::Callbacks
|
|
9
|
-
|
|
10
|
-
include ActiveModel::Validations::Callbacks
|
|
11
|
-
|
|
12
|
-
autoload :Write
|
|
13
|
-
|
|
14
|
-
#
|
|
15
|
-
# CONSTANTS
|
|
16
|
-
#
|
|
17
|
-
|
|
18
|
-
# Regular expression to parse file from backtrace line
|
|
19
|
-
BACKTRACE_FILE_REGEXP = /(?<file>.*):\d+:in .*/
|
|
20
|
-
# Trim mode for ERB templates so that lines using <%- -%> will be trimmed of new lines
|
|
21
|
-
EXPLICIT_TRIM_MODE = '-'
|
|
22
|
-
# File extension for templates.
|
|
23
|
-
EXTENSION = '.rb.erb'
|
|
24
|
-
|
|
25
|
-
#
|
|
26
|
-
# Attributes
|
|
27
|
-
#
|
|
28
|
-
|
|
29
|
-
# @!attribute [rw] destination_pathname
|
|
30
|
-
# The pathname where to {#write} the template results.
|
|
31
|
-
#
|
|
32
|
-
# @return [String]
|
|
33
|
-
attr_accessor :destination_pathname
|
|
34
|
-
|
|
35
|
-
# @!attribute [rw] locals
|
|
36
|
-
# Local variables to exposed to partials.
|
|
37
|
-
#
|
|
38
|
-
# @return [Hash{Symbol => Object}]
|
|
39
|
-
attr_accessor :locals
|
|
40
|
-
|
|
41
|
-
# @!attribute [rw] overwrite
|
|
42
|
-
# Whether to overwrite a pre-existing file.
|
|
43
|
-
#
|
|
44
|
-
# @return [Boolean]
|
|
45
|
-
attr_accessor :overwrite
|
|
46
|
-
|
|
47
|
-
# @!attribute [rw] search_pathnames
|
|
48
|
-
# Pathnames to search for partials. First item is search first, etc.
|
|
49
|
-
#
|
|
50
|
-
# @return [Array<Pathname>]
|
|
51
|
-
attr_accessor :search_pathnames
|
|
52
|
-
|
|
53
|
-
# @!attribute [rw] source_relative_name
|
|
54
|
-
# Name of template under {#search_pathnames} without {EXTENSION} similar to how to refer to partials.
|
|
55
|
-
#
|
|
56
|
-
# @return [String]
|
|
57
|
-
attr_accessor :source_relative_name
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
#
|
|
61
|
-
# Callbacks
|
|
62
|
-
#
|
|
63
|
-
|
|
64
|
-
before_validation :search_real_pathnames
|
|
65
|
-
|
|
66
|
-
#
|
|
67
|
-
# Validations
|
|
68
|
-
#
|
|
69
|
-
|
|
70
|
-
validates :destination_pathname,
|
|
71
|
-
presence: true
|
|
72
|
-
validates :overwrite,
|
|
73
|
-
inclusion: {
|
|
74
|
-
in: [
|
|
75
|
-
false,
|
|
76
|
-
true
|
|
77
|
-
]
|
|
78
|
-
}
|
|
79
|
-
validates :search_pathnames,
|
|
80
|
-
length: {
|
|
81
|
-
minimum: 1
|
|
82
|
-
}
|
|
83
|
-
validates :source_pathname,
|
|
84
|
-
presence: true
|
|
85
|
-
|
|
86
|
-
#
|
|
87
|
-
# Methods
|
|
88
|
-
#
|
|
89
|
-
|
|
90
|
-
# Converts the `partial_relative_path` to a real (absolute) pathname that can be passed to {#result} by finding the
|
|
91
|
-
# corresponding file in the {#search_pathnames}.
|
|
92
|
-
#
|
|
93
|
-
# @param partial_relative_path [String] partial path name as used in Rails, so no search_pathname prefix and no '_'
|
|
94
|
-
# or file extension in the basename.
|
|
95
|
-
# @return (see #find_pathname)
|
|
96
|
-
def partial_pathname(partial_relative_path)
|
|
97
|
-
partial_relative_pathname = Pathname.new(partial_relative_path)
|
|
98
|
-
relative_directory = partial_relative_pathname.dirname
|
|
99
|
-
raw_basename = partial_relative_pathname.basename
|
|
100
|
-
partial_basename = "_#{raw_basename}#{EXTENSION}"
|
|
101
|
-
relative_pathname = relative_directory.join(partial_basename)
|
|
102
|
-
|
|
103
|
-
find_pathname(relative_pathname)
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
# Renders partial in templates.
|
|
107
|
-
#
|
|
108
|
-
# @param partial_relative_path [String] relative path to partial without extension and no leading '_' to match
|
|
109
|
-
# Rails convention.
|
|
110
|
-
# @param options (see #result)
|
|
111
|
-
# @option (see #result)
|
|
112
|
-
# @return [String, nil] result of rendering partial.
|
|
113
|
-
def render(partial_relative_path, options={})
|
|
114
|
-
pathname = partial_pathname(partial_relative_path)
|
|
115
|
-
result(pathname, options)
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
# Renders the super template of the current template by searching for the template of the same name under super
|
|
119
|
-
# {#search_pathnames} (those that have a higher index).
|
|
120
|
-
#
|
|
121
|
-
# @return [String, nil] result of rendering super partial.
|
|
122
|
-
# @raise [IOError] if super template can't be found on super search pathnames.
|
|
123
|
-
# @raise [RegexpError] if file can't be parsed from backtrace.
|
|
124
|
-
def render_super
|
|
125
|
-
super_pathname = nil
|
|
126
|
-
backtrace = caller
|
|
127
|
-
match = BACKTRACE_FILE_REGEXP.match(backtrace[0])
|
|
128
|
-
|
|
129
|
-
if match
|
|
130
|
-
real_path = match[:file]
|
|
131
|
-
current_search_pathname_found = false
|
|
132
|
-
relative_pathname = nil
|
|
133
|
-
|
|
134
|
-
search_pathnames.each do |search_pathname|
|
|
135
|
-
# find the current index
|
|
136
|
-
unless current_search_pathname_found
|
|
137
|
-
if real_path.starts_with?(search_pathname.to_path)
|
|
138
|
-
current_search_pathname_found = true
|
|
139
|
-
|
|
140
|
-
real_pathname = Pathname.new(real_path)
|
|
141
|
-
relative_pathname = real_pathname.relative_path_from(search_pathname)
|
|
142
|
-
end
|
|
143
|
-
# then switch to finding the next (super) index
|
|
144
|
-
else
|
|
145
|
-
real_pathname = search_pathname.join(relative_pathname)
|
|
146
|
-
|
|
147
|
-
if real_pathname.exist?
|
|
148
|
-
super_pathname = real_pathname
|
|
149
|
-
break
|
|
150
|
-
end
|
|
151
|
-
end
|
|
152
|
-
end
|
|
153
|
-
|
|
154
|
-
unless super_pathname
|
|
155
|
-
raise IOError, "Couldn't find super template"
|
|
156
|
-
end
|
|
157
|
-
else
|
|
158
|
-
raise RegexpError, "Can't parse file from backtrace to determine current search path"
|
|
159
|
-
end
|
|
160
|
-
|
|
161
|
-
result(super_pathname)
|
|
162
|
-
end
|
|
163
|
-
|
|
164
|
-
# @note Must be an instance method
|
|
165
|
-
# @param pathname [Pathname] pathname to template
|
|
166
|
-
# @param options [Hash{Symbol => Object}]
|
|
167
|
-
# @option options [Hash{Symbol => Object}] :locals Maps name of locals to their value for this result. Can override
|
|
168
|
-
# {#locals}.
|
|
169
|
-
def result(pathname, options={})
|
|
170
|
-
options.assert_valid_keys(:locals)
|
|
171
|
-
|
|
172
|
-
if pathname
|
|
173
|
-
content = pathname.read
|
|
174
|
-
safe_level = nil
|
|
175
|
-
template = ERB.new content, safe_level, EXPLICIT_TRIM_MODE
|
|
176
|
-
template.filename = pathname.to_path
|
|
177
|
-
|
|
178
|
-
erb_binding = binding.dup
|
|
179
|
-
locals = self.locals || {}
|
|
180
|
-
result_locals = options[:locals] || {}
|
|
181
|
-
merged_locals = locals.merge(result_locals)
|
|
182
|
-
|
|
183
|
-
merged_locals.each do |name, value|
|
|
184
|
-
erb_binding.eval("#{name} = nil; lambda { |value| #{name} = value }").call(value)
|
|
185
|
-
end
|
|
186
|
-
|
|
187
|
-
# use current binding to allow templates to call {#render} and then use {#method_missing} to allow access to
|
|
188
|
-
# locals
|
|
189
|
-
template.result(erb_binding)
|
|
190
|
-
else
|
|
191
|
-
''
|
|
192
|
-
end
|
|
193
|
-
end
|
|
194
|
-
|
|
195
|
-
class << self
|
|
196
|
-
# The root of all relative {#search_pathnames}. By changing {root} you can use your own set of templates.
|
|
197
|
-
#
|
|
198
|
-
# @return [Pathname] Defaults to 'spec/support/templates/metasploit/model' under Metasploit::Model.root.
|
|
199
|
-
def root
|
|
200
|
-
@@root ||= Metasploit::Model::Engine.root.join('spec', 'support', 'templates', 'metasploit', 'model')
|
|
201
|
-
end
|
|
202
|
-
|
|
203
|
-
# Sets the {root} pathname for all {#search_pathnames}, including those on subclasses.
|
|
204
|
-
#
|
|
205
|
-
# @param root [Pathname]
|
|
206
|
-
# @return [Pathname]
|
|
207
|
-
def root=(root)
|
|
208
|
-
@@root = root
|
|
209
|
-
end
|
|
210
|
-
end
|
|
211
|
-
|
|
212
|
-
# Converts {#source_relative_name} to a real (absolute) pathname.
|
|
213
|
-
#
|
|
214
|
-
# @return (see #find_pathname)
|
|
215
|
-
def source_pathname
|
|
216
|
-
unless instance_variable_defined? :@source_pathname
|
|
217
|
-
relative_path = "#{source_relative_name}#{EXTENSION}"
|
|
218
|
-
@source_pathname = find_pathname(relative_path)
|
|
219
|
-
end
|
|
220
|
-
|
|
221
|
-
@source_pathname
|
|
222
|
-
end
|
|
223
|
-
|
|
224
|
-
# Writes result of template to {#destination_pathname}.
|
|
225
|
-
#
|
|
226
|
-
# @return [void]
|
|
227
|
-
# @raise [Metasploit::Model::Spec::PathnameCollision] if {#overwrite} is false and {#destination_pathname} already
|
|
228
|
-
# exists.
|
|
229
|
-
def write
|
|
230
|
-
unless overwrite
|
|
231
|
-
Metasploit::Model::Spec::PathnameCollision.check!(destination_pathname)
|
|
232
|
-
end
|
|
233
|
-
|
|
234
|
-
result = self.result(source_pathname)
|
|
235
|
-
|
|
236
|
-
# make directory
|
|
237
|
-
destination_pathname.parent.mkpath
|
|
238
|
-
|
|
239
|
-
destination_pathname.open('wb') do |f|
|
|
240
|
-
f.write(result)
|
|
241
|
-
end
|
|
242
|
-
end
|
|
243
|
-
|
|
244
|
-
private
|
|
245
|
-
|
|
246
|
-
# Finds relative_path under {#search_pathnames}
|
|
247
|
-
#
|
|
248
|
-
# @return [Pathname] if relative_path exists under a search path.
|
|
249
|
-
# @return [nil] if `relative_path` does not exist under a search path.
|
|
250
|
-
def find_pathname(relative_path)
|
|
251
|
-
found_pathname = nil
|
|
252
|
-
|
|
253
|
-
search_pathnames.each do |search_pathname|
|
|
254
|
-
real_pathname = search_pathname.join(relative_path)
|
|
255
|
-
|
|
256
|
-
if real_pathname.exist?
|
|
257
|
-
found_pathname = real_pathname
|
|
258
|
-
break
|
|
259
|
-
end
|
|
260
|
-
end
|
|
261
|
-
|
|
262
|
-
found_pathname
|
|
263
|
-
end
|
|
264
|
-
|
|
265
|
-
# Makes sure all {#search_pathnames} are real (absolute). Relative pathnames are resolved against {root}.
|
|
266
|
-
#
|
|
267
|
-
# @return [void]
|
|
268
|
-
def search_real_pathnames
|
|
269
|
-
search_pathnames.collect! { |search_pathname|
|
|
270
|
-
if search_pathname.relative?
|
|
271
|
-
self.class.root.join(search_pathname)
|
|
272
|
-
else
|
|
273
|
-
search_pathname
|
|
274
|
-
end
|
|
275
|
-
}
|
|
276
|
-
end
|
|
277
|
-
end
|