ronin-core 0.1.0.beta1
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 +7 -0
- data/.document +5 -0
- data/.github/workflows/ruby.yml +41 -0
- data/.gitignore +12 -0
- data/.rspec +1 -0
- data/.rubocop.yml +160 -0
- data/.ruby-version +1 -0
- data/.yardopts +1 -0
- data/COPYING.txt +165 -0
- data/ChangeLog.md +11 -0
- data/Gemfile +30 -0
- data/README.md +299 -0
- data/Rakefile +34 -0
- data/examples/ruby_shell.rb +11 -0
- data/gemspec.yml +28 -0
- data/lib/ronin/core/class_registry.rb +246 -0
- data/lib/ronin/core/cli/command.rb +87 -0
- data/lib/ronin/core/cli/command_shell/command.rb +110 -0
- data/lib/ronin/core/cli/command_shell.rb +345 -0
- data/lib/ronin/core/cli/generator/options/author.rb +106 -0
- data/lib/ronin/core/cli/generator/options/description.rb +54 -0
- data/lib/ronin/core/cli/generator/options/reference.rb +60 -0
- data/lib/ronin/core/cli/generator/options/summary.rb +54 -0
- data/lib/ronin/core/cli/generator.rb +238 -0
- data/lib/ronin/core/cli/logging.rb +59 -0
- data/lib/ronin/core/cli/options/param.rb +68 -0
- data/lib/ronin/core/cli/options/values/arches.rb +45 -0
- data/lib/ronin/core/cli/options/values/oses.rb +32 -0
- data/lib/ronin/core/cli/printing/arch.rb +71 -0
- data/lib/ronin/core/cli/printing/metadata.rb +113 -0
- data/lib/ronin/core/cli/printing/os.rb +54 -0
- data/lib/ronin/core/cli/printing/params.rb +69 -0
- data/lib/ronin/core/cli/ruby_shell.rb +131 -0
- data/lib/ronin/core/cli/shell.rb +186 -0
- data/lib/ronin/core/git.rb +73 -0
- data/lib/ronin/core/home.rb +86 -0
- data/lib/ronin/core/metadata/authors/author.rb +241 -0
- data/lib/ronin/core/metadata/authors.rb +120 -0
- data/lib/ronin/core/metadata/description.rb +100 -0
- data/lib/ronin/core/metadata/id.rb +88 -0
- data/lib/ronin/core/metadata/references.rb +87 -0
- data/lib/ronin/core/metadata/summary.rb +78 -0
- data/lib/ronin/core/metadata/version.rb +74 -0
- data/lib/ronin/core/params/exceptions.rb +38 -0
- data/lib/ronin/core/params/mixin.rb +317 -0
- data/lib/ronin/core/params/param.rb +137 -0
- data/lib/ronin/core/params/types/boolean.rb +64 -0
- data/lib/ronin/core/params/types/enum.rb +107 -0
- data/lib/ronin/core/params/types/float.rb +68 -0
- data/lib/ronin/core/params/types/integer.rb +100 -0
- data/lib/ronin/core/params/types/numeric.rb +106 -0
- data/lib/ronin/core/params/types/regexp.rb +67 -0
- data/lib/ronin/core/params/types/string.rb +118 -0
- data/lib/ronin/core/params/types/type.rb +54 -0
- data/lib/ronin/core/params/types/uri.rb +72 -0
- data/lib/ronin/core/params/types.rb +62 -0
- data/lib/ronin/core/params.rb +19 -0
- data/lib/ronin/core/version.rb +24 -0
- data/ronin-core.gemspec +59 -0
- data/spec/class_registry_spec.rb +224 -0
- data/spec/cli/command_shell/command_spec.rb +113 -0
- data/spec/cli/command_shell_spec.rb +1114 -0
- data/spec/cli/command_spec.rb +16 -0
- data/spec/cli/fixtures/irb_command +8 -0
- data/spec/cli/fixtures/template/dir/file1.txt +1 -0
- data/spec/cli/fixtures/template/dir/file2.txt +1 -0
- data/spec/cli/fixtures/template/file.erb +1 -0
- data/spec/cli/fixtures/template/file.txt +1 -0
- data/spec/cli/generator/options/author_spec.rb +121 -0
- data/spec/cli/generator/options/description_spec.rb +45 -0
- data/spec/cli/generator/options/reference_spec.rb +53 -0
- data/spec/cli/generator/options/summary_spec.rb +45 -0
- data/spec/cli/generator_spec.rb +244 -0
- data/spec/cli/logging_spec.rb +95 -0
- data/spec/cli/options/param_spec.rb +67 -0
- data/spec/cli/options/values/arches_spec.rb +62 -0
- data/spec/cli/printing/arch_spec.rb +130 -0
- data/spec/cli/printing/metadata_spec.rb +211 -0
- data/spec/cli/printing/os_spec.rb +64 -0
- data/spec/cli/printing/params_spec.rb +63 -0
- data/spec/cli/ruby_shell.rb +99 -0
- data/spec/cli/shell_spec.rb +211 -0
- data/spec/fixtures/example_class_registry/base_class.rb +9 -0
- data/spec/fixtures/example_class_registry/classes/loaded_class.rb +9 -0
- data/spec/fixtures/example_class_registry/classes/name_mismatch.rb +9 -0
- data/spec/fixtures/example_class_registry/classes/no_module.rb +4 -0
- data/spec/fixtures/example_class_registry.rb +8 -0
- data/spec/git_spec.rb +58 -0
- data/spec/home_spec.rb +64 -0
- data/spec/metadata/authors/author_spec.rb +335 -0
- data/spec/metadata/authors_spec.rb +126 -0
- data/spec/metadata/description_spec.rb +74 -0
- data/spec/metadata/id_spec.rb +92 -0
- data/spec/metadata/references_spec.rb +100 -0
- data/spec/metadata/summary_spec.rb +74 -0
- data/spec/metadata/version_spec.rb +72 -0
- data/spec/params/mixin_spec.rb +484 -0
- data/spec/params/param_spec.rb +164 -0
- data/spec/params/types/boolean_spec.rb +56 -0
- data/spec/params/types/enum_spec.rb +94 -0
- data/spec/params/types/float_spec.rb +107 -0
- data/spec/params/types/integer_spec.rb +155 -0
- data/spec/params/types/numeric_spec.rb +138 -0
- data/spec/params/types/regexp_spec.rb +64 -0
- data/spec/params/types/string_spec.rb +174 -0
- data/spec/params/types/type_spec.rb +14 -0
- data/spec/params/types/uri_spec.rb +62 -0
- data/spec/spec_helper.rb +11 -0
- metadata +252 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2021-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
4
|
+
#
|
|
5
|
+
# ronin-core is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU Lesser General Public License as published
|
|
7
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# ronin-core is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
# GNU Lesser General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
# along with ronin-core. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
module Ronin
|
|
20
|
+
module Core
|
|
21
|
+
module CLI
|
|
22
|
+
module Generator
|
|
23
|
+
module Options
|
|
24
|
+
#
|
|
25
|
+
# Adds the `-S,--summary TEXT` option to the generator command.
|
|
26
|
+
#
|
|
27
|
+
module Summary
|
|
28
|
+
#
|
|
29
|
+
# Defines the `-S,--summary TEXT` option.
|
|
30
|
+
#
|
|
31
|
+
# @param [Class<Comand>] command
|
|
32
|
+
# The command class including {Summary}.
|
|
33
|
+
#
|
|
34
|
+
def self.included(command)
|
|
35
|
+
command.option :summary, short: '-S',
|
|
36
|
+
value: {
|
|
37
|
+
type: String,
|
|
38
|
+
usage: 'TEXT'
|
|
39
|
+
},
|
|
40
|
+
desc: 'One sentence summary' do |text|
|
|
41
|
+
@summary = text
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# The summary text to output.
|
|
46
|
+
#
|
|
47
|
+
# @return [String, nil]
|
|
48
|
+
attr_reader :summary
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2021-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
4
|
+
#
|
|
5
|
+
# ronin-core is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU Lesser General Public License as published
|
|
7
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# ronin-core is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
# GNU Lesser General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
# along with ronin-core. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'ronin/core/cli/command'
|
|
20
|
+
|
|
21
|
+
require 'command_kit/colors'
|
|
22
|
+
require 'fileutils'
|
|
23
|
+
require 'erb'
|
|
24
|
+
|
|
25
|
+
module Ronin
|
|
26
|
+
module Core
|
|
27
|
+
module CLI
|
|
28
|
+
#
|
|
29
|
+
# Adds generator methods to a command.
|
|
30
|
+
#
|
|
31
|
+
# ## Example
|
|
32
|
+
#
|
|
33
|
+
# class Gen < Command
|
|
34
|
+
#
|
|
35
|
+
# include Core::Generator
|
|
36
|
+
#
|
|
37
|
+
# template_dir File.join(ROOT,'data','templates')
|
|
38
|
+
#
|
|
39
|
+
# argument :path, desc: 'The path of the script to genereate'
|
|
40
|
+
#
|
|
41
|
+
# def run(path)
|
|
42
|
+
# erb 'script.rb.erb', path
|
|
43
|
+
# end
|
|
44
|
+
#
|
|
45
|
+
# end
|
|
46
|
+
#
|
|
47
|
+
module Generator
|
|
48
|
+
include CommandKit::Colors
|
|
49
|
+
|
|
50
|
+
#
|
|
51
|
+
# Adds {ClassMethods} to the class.
|
|
52
|
+
#
|
|
53
|
+
# @param [Class] command
|
|
54
|
+
# The command class which is including {Generator}.
|
|
55
|
+
#
|
|
56
|
+
# @api private
|
|
57
|
+
#
|
|
58
|
+
def self.included(command)
|
|
59
|
+
command.extend ClassMethods
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
module ClassMethods
|
|
63
|
+
#
|
|
64
|
+
# Gets or sets the template directory.
|
|
65
|
+
#
|
|
66
|
+
# @param [String, nil] path
|
|
67
|
+
# If a path is given, the template directory will be set.
|
|
68
|
+
#
|
|
69
|
+
# @return [String]
|
|
70
|
+
# The set template directory.
|
|
71
|
+
#
|
|
72
|
+
# @raise [NotImplementedError]
|
|
73
|
+
# The class did not set {template_dir}.
|
|
74
|
+
#
|
|
75
|
+
# @example
|
|
76
|
+
# template_dir File.join(__dir__,'..','..','..','..','data','templates','thing')
|
|
77
|
+
#
|
|
78
|
+
def template_dir(path=nil)
|
|
79
|
+
if path
|
|
80
|
+
@template_dir = File.expand_path(path)
|
|
81
|
+
else
|
|
82
|
+
@template_dir || (superclass.template_dir if superclass.kind_of?(ClassMethods))
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# The directory to read files from.
|
|
88
|
+
#
|
|
89
|
+
# @return [String]
|
|
90
|
+
attr_reader :template_dir
|
|
91
|
+
|
|
92
|
+
#
|
|
93
|
+
# Initializes the command.
|
|
94
|
+
#
|
|
95
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
96
|
+
# Additional keyword arguments for `initialize`.
|
|
97
|
+
#
|
|
98
|
+
# @raise [NotImplementedError]
|
|
99
|
+
# The class did not set the {template_dir} path.
|
|
100
|
+
#
|
|
101
|
+
def initialize(**kwargs)
|
|
102
|
+
super(**kwargs)
|
|
103
|
+
|
|
104
|
+
unless (@template_dir = self.class.template_dir)
|
|
105
|
+
raise(NotImplementedError,"#{self.class} did not define template_dir")
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
#
|
|
110
|
+
# Prints an generator action to STDOUT.
|
|
111
|
+
#
|
|
112
|
+
# @param [Symbol] command
|
|
113
|
+
# The command that represents the generator action.
|
|
114
|
+
#
|
|
115
|
+
# @param [String] source
|
|
116
|
+
# The optional source file being copied or rendered.
|
|
117
|
+
#
|
|
118
|
+
# @param [String] dest
|
|
119
|
+
# The file or directory path being created or modified.
|
|
120
|
+
#
|
|
121
|
+
def print_action(command,source=nil,dest)
|
|
122
|
+
line = String.new
|
|
123
|
+
line << "\t" << colors.bold(colors.green(command))
|
|
124
|
+
line << "\t" << colors.green(source) if source
|
|
125
|
+
line << "\t" << colors.green(dest) if dest
|
|
126
|
+
|
|
127
|
+
puts(line)
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
#
|
|
131
|
+
# Creates an empty directory.
|
|
132
|
+
#
|
|
133
|
+
# @param [String] path
|
|
134
|
+
# The relative path of the directory to be created.
|
|
135
|
+
#
|
|
136
|
+
def mkdir(path)
|
|
137
|
+
print_action 'mkdir', path
|
|
138
|
+
FileUtils.mkdir_p(path)
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
#
|
|
142
|
+
# Creates an empty file.
|
|
143
|
+
#
|
|
144
|
+
# @param [String] path
|
|
145
|
+
# The relative path of the empty file to be created.
|
|
146
|
+
#
|
|
147
|
+
def touch(path)
|
|
148
|
+
print_action 'touch', path
|
|
149
|
+
FileUtils.touch(path)
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
#
|
|
153
|
+
# Changes the permissions of a file or directory.
|
|
154
|
+
#
|
|
155
|
+
# @param [String, Integer] mode
|
|
156
|
+
# The chmod String (ex: `"+x"`) or octal mask.
|
|
157
|
+
#
|
|
158
|
+
# @param [String] path
|
|
159
|
+
# The path to the file or directory.
|
|
160
|
+
#
|
|
161
|
+
def chmod(mode,path)
|
|
162
|
+
print_action "chmod", path
|
|
163
|
+
FileUtils.chmod(mode,path)
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
#
|
|
167
|
+
# Copies a file in.
|
|
168
|
+
#
|
|
169
|
+
# @param [String] source
|
|
170
|
+
# The file within the {template_dir} to copy in.
|
|
171
|
+
#
|
|
172
|
+
# @param [String] dest
|
|
173
|
+
# The destination path to copy the file to.
|
|
174
|
+
#
|
|
175
|
+
def cp(source,dest)
|
|
176
|
+
print_action 'cp', source, dest
|
|
177
|
+
|
|
178
|
+
FileUtils.cp(File.join(@template_dir,source),dest)
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
#
|
|
182
|
+
# Copies a directory in.
|
|
183
|
+
#
|
|
184
|
+
# @param [String] source
|
|
185
|
+
# The relative path to the directory within the {template_dir}.
|
|
186
|
+
#
|
|
187
|
+
# @param [String] dest
|
|
188
|
+
# The destination path to copy the directory to.
|
|
189
|
+
#
|
|
190
|
+
def cp_r(source,dest)
|
|
191
|
+
print_action "cp -r", source, dest
|
|
192
|
+
|
|
193
|
+
FileUtils.cp_r(File.join(@template_dir,source),dest)
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
#
|
|
197
|
+
# Renders a file using an `.erb` template in the {template_dir}.
|
|
198
|
+
#
|
|
199
|
+
# @param [String] source
|
|
200
|
+
# The relative path to the file. The `.erb` template will be derived
|
|
201
|
+
# from the file path by appending the `.erb` file extension.
|
|
202
|
+
#
|
|
203
|
+
# @param [String, nil] dest
|
|
204
|
+
# The destination path to write the rendered file to.
|
|
205
|
+
# If no destination path is given, the result of the rendered `.erb`
|
|
206
|
+
# template will be returned.
|
|
207
|
+
#
|
|
208
|
+
def erb(source,dest=nil)
|
|
209
|
+
if dest
|
|
210
|
+
print_action 'erb', source, dest
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
source_path = File.join(@template_dir,source)
|
|
214
|
+
|
|
215
|
+
return super(source_path,dest)
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
#
|
|
219
|
+
# Runs a command.
|
|
220
|
+
#
|
|
221
|
+
# @param [String] command
|
|
222
|
+
# The command name to execute.
|
|
223
|
+
#
|
|
224
|
+
# @param [Array<String>] arguments
|
|
225
|
+
# Additional arguments for the command.
|
|
226
|
+
#
|
|
227
|
+
# @return [Boolean, nil]
|
|
228
|
+
# Indicates whether the command successfully executed or not.
|
|
229
|
+
#
|
|
230
|
+
def sh(command,*arguments)
|
|
231
|
+
print_action "run", [command, *arguments].join(' ')
|
|
232
|
+
|
|
233
|
+
system(command,*arguments)
|
|
234
|
+
end
|
|
235
|
+
end
|
|
236
|
+
end
|
|
237
|
+
end
|
|
238
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2021-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
4
|
+
#
|
|
5
|
+
# ronin-core is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU Lesser General Public License as published
|
|
7
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# ronin-core is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
# GNU Lesser General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
# along with ronin-core. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'command_kit/colors'
|
|
20
|
+
|
|
21
|
+
module Ronin
|
|
22
|
+
module Core
|
|
23
|
+
module CLI
|
|
24
|
+
module Logging
|
|
25
|
+
include CommandKit::Colors
|
|
26
|
+
|
|
27
|
+
#
|
|
28
|
+
# Prints an info message to STDOUT.
|
|
29
|
+
#
|
|
30
|
+
# @param [String] message
|
|
31
|
+
# The message to print.
|
|
32
|
+
#
|
|
33
|
+
def log_info(message)
|
|
34
|
+
puts("#{colors.bold(colors.bright_green('>>>'))} #{colors.bold(colors.white(message))}")
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
#
|
|
38
|
+
# Prints a warning message to STDOUT.
|
|
39
|
+
#
|
|
40
|
+
# @param [String] message
|
|
41
|
+
# The message to print.
|
|
42
|
+
#
|
|
43
|
+
def log_warn(message)
|
|
44
|
+
puts("#{colors.bold(colors.bright_yellow('***'))} #{colors.bold(colors.white(message))}")
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
#
|
|
48
|
+
# Prints an error message to STDERR.
|
|
49
|
+
#
|
|
50
|
+
# @param [String] message
|
|
51
|
+
# The message to print.
|
|
52
|
+
#
|
|
53
|
+
def log_error(message)
|
|
54
|
+
stderr.puts("#{colors(stderr).bold(colors(stderr).bright_red('!!!'))} #{colors(stderr).bold(colors(stderr).white(message))}")
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2021-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
4
|
+
#
|
|
5
|
+
# This file is part of ronin-core.
|
|
6
|
+
#
|
|
7
|
+
# ronin-core is free software: you can redistribute it and/or modify
|
|
8
|
+
# it under the terms of the GNU Lesser General Public License as published
|
|
9
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
|
10
|
+
# (at your option) any later version.
|
|
11
|
+
#
|
|
12
|
+
# ronin-core is distributed in the hope that it will be useful,
|
|
13
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
14
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
15
|
+
# GNU Lesser General Public License for more details.
|
|
16
|
+
#
|
|
17
|
+
# You should have received a copy of the GNU Lesser General Public License
|
|
18
|
+
# along with ronin-core. If not, see <https://www.gnu.org/licenses/>.
|
|
19
|
+
#
|
|
20
|
+
|
|
21
|
+
module Ronin
|
|
22
|
+
module Core
|
|
23
|
+
module CLI
|
|
24
|
+
module Options
|
|
25
|
+
#
|
|
26
|
+
# Adds a `-p,--param NAME=VALUE` option for setting param values.
|
|
27
|
+
#
|
|
28
|
+
module Param
|
|
29
|
+
#
|
|
30
|
+
# Adds a `-p,--param NAME=VALUE` option to the command.
|
|
31
|
+
#
|
|
32
|
+
# @param [Class<Command>] command
|
|
33
|
+
# The command including {Param}.
|
|
34
|
+
#
|
|
35
|
+
def self.included(command)
|
|
36
|
+
command.option :param, short: '-p',
|
|
37
|
+
value: {
|
|
38
|
+
type: /\A[^=]+=.+\z/,
|
|
39
|
+
usage: 'NAME=VALUE',
|
|
40
|
+
},
|
|
41
|
+
desc: 'Sets a param' do |str|
|
|
42
|
+
name, value = str.split('=',2)
|
|
43
|
+
|
|
44
|
+
@params[name.to_sym] = value
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# The set params.
|
|
49
|
+
#
|
|
50
|
+
# @return [Hash{Symbol => String}]
|
|
51
|
+
attr_reader :params
|
|
52
|
+
|
|
53
|
+
#
|
|
54
|
+
# Initializes the command and {#params}.
|
|
55
|
+
#
|
|
56
|
+
# @param [Hash{Symbol => Object}] kwargs
|
|
57
|
+
# Additional keyword arguments.
|
|
58
|
+
#
|
|
59
|
+
def initialize(**kwargs)
|
|
60
|
+
super(**kwargs)
|
|
61
|
+
|
|
62
|
+
@params = {}
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2021-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
4
|
+
#
|
|
5
|
+
# ronin-core is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU Lesser General Public License as published
|
|
7
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# ronin-core is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
# GNU Lesser General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
# along with ronin-core. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
module Ronin
|
|
20
|
+
module Core
|
|
21
|
+
module CLI
|
|
22
|
+
module Options
|
|
23
|
+
module Values
|
|
24
|
+
# Supported architecture names and their Symbol equivalents
|
|
25
|
+
ARCHES = {
|
|
26
|
+
'x86' => :x86,
|
|
27
|
+
'x86-64' => :x86_64,
|
|
28
|
+
'amd64' => :x86_64,
|
|
29
|
+
'ia64' => :ia64,
|
|
30
|
+
'ppc' => :ppc,
|
|
31
|
+
'ppc64' => :ppc64,
|
|
32
|
+
'arm' => :arm,
|
|
33
|
+
'armbe' => :arm_be,
|
|
34
|
+
'arm64' => :arm64,
|
|
35
|
+
'arm64be' => :arm64_be,
|
|
36
|
+
'mips' => :mips,
|
|
37
|
+
'mipsle' => :mips_le,
|
|
38
|
+
'mips64' => :mips64,
|
|
39
|
+
'mips64le' => :mips64_le
|
|
40
|
+
}
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2021-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
4
|
+
#
|
|
5
|
+
# ronin-core is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU Lesser General Public License as published
|
|
7
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# ronin-core is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
# GNU Lesser General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
# along with ronin-core. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
module Ronin
|
|
20
|
+
module Core
|
|
21
|
+
module CLI
|
|
22
|
+
module Options
|
|
23
|
+
module Values
|
|
24
|
+
# Supported Operating Systems (OS)
|
|
25
|
+
OSES = [
|
|
26
|
+
:linux, :macos, :windows, :freebsd, :openbsd, :netbsd
|
|
27
|
+
]
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2021-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
4
|
+
#
|
|
5
|
+
# ronin-core is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU Lesser General Public License as published
|
|
7
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# ronin-core is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
# GNU Lesser General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
# along with ronin-core. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
module Ronin
|
|
20
|
+
module Core
|
|
21
|
+
module CLI
|
|
22
|
+
module Printing
|
|
23
|
+
#
|
|
24
|
+
# Command methods for printing arch IDs.
|
|
25
|
+
#
|
|
26
|
+
module Arch
|
|
27
|
+
# Mapping of architecture IDs to printable names.
|
|
28
|
+
ARCH_NAMES = {
|
|
29
|
+
x86: 'x86',
|
|
30
|
+
|
|
31
|
+
x86_64: 'x86-64',
|
|
32
|
+
ia64: 'IA64',
|
|
33
|
+
amd64: 'x86-64',
|
|
34
|
+
|
|
35
|
+
ppc: 'PPC',
|
|
36
|
+
ppc64: 'PPC64',
|
|
37
|
+
|
|
38
|
+
mips: 'MIPS',
|
|
39
|
+
mips_le: 'MIPS (LE)',
|
|
40
|
+
mips_be: 'MIPS',
|
|
41
|
+
|
|
42
|
+
mips64: 'MIPS64',
|
|
43
|
+
mips64_le: 'MIPS64 (LE)',
|
|
44
|
+
mips64_be: 'MIPS64',
|
|
45
|
+
|
|
46
|
+
arm: 'ARM',
|
|
47
|
+
arm_le: 'ARM',
|
|
48
|
+
arm_be: 'ARM (BE)',
|
|
49
|
+
|
|
50
|
+
arm64: 'ARM64',
|
|
51
|
+
arm64_le: 'ARM64',
|
|
52
|
+
arm64_be: 'ARM64 (BE)'
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
#
|
|
56
|
+
# Converts the architecture ID to a printable name.
|
|
57
|
+
#
|
|
58
|
+
# @param [Symbol] arch
|
|
59
|
+
# The arch ID.
|
|
60
|
+
#
|
|
61
|
+
# @return [String]
|
|
62
|
+
# The arch display name.
|
|
63
|
+
#
|
|
64
|
+
def arch_name(arch)
|
|
65
|
+
ARCH_NAMES.fetch(arch,&:to_s)
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2021-2022 Hal Brodigan (postmodern.mod3 at gmail.com)
|
|
4
|
+
#
|
|
5
|
+
# ronin-core is free software: you can redistribute it and/or modify
|
|
6
|
+
# it under the terms of the GNU Lesser General Public License as published
|
|
7
|
+
# by the Free Software Foundation, either version 3 of the License, or
|
|
8
|
+
# (at your option) any later version.
|
|
9
|
+
#
|
|
10
|
+
# ronin-core is distributed in the hope that it will be useful,
|
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
# GNU Lesser General Public License for more details.
|
|
14
|
+
#
|
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
# along with ronin-core. If not, see <https://www.gnu.org/licenses/>.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
require 'command_kit/options/verbose'
|
|
20
|
+
require 'command_kit/printing/indent'
|
|
21
|
+
require 'command_kit/printing/lists'
|
|
22
|
+
|
|
23
|
+
module Ronin
|
|
24
|
+
module Core
|
|
25
|
+
module CLI
|
|
26
|
+
module Printing
|
|
27
|
+
#
|
|
28
|
+
# Common methods for printing {Core::Metadata} data.
|
|
29
|
+
#
|
|
30
|
+
module Metadata
|
|
31
|
+
include CommandKit::Printing::Indent
|
|
32
|
+
include CommandKit::Printing::Lists
|
|
33
|
+
|
|
34
|
+
#
|
|
35
|
+
# Addss a `-v,--verbose` option to the command class.
|
|
36
|
+
#
|
|
37
|
+
# @param [Class<Command>] command
|
|
38
|
+
# The command class including {Metadata}.
|
|
39
|
+
#
|
|
40
|
+
def self.included(command)
|
|
41
|
+
command.include CommandKit::Options::Verbose
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
#
|
|
45
|
+
# The class which defines the authors.
|
|
46
|
+
#
|
|
47
|
+
# @param [Class<Core::Metadata::Authors>] klass
|
|
48
|
+
#
|
|
49
|
+
def print_authors(klass)
|
|
50
|
+
unless klass.authors.empty?
|
|
51
|
+
puts "Authors:"
|
|
52
|
+
puts
|
|
53
|
+
|
|
54
|
+
if verbose?
|
|
55
|
+
indent do
|
|
56
|
+
klass.authors.each do |author|
|
|
57
|
+
puts "* #{author}"
|
|
58
|
+
puts " * PGP: #{author.pgp}" if author.pgp?
|
|
59
|
+
puts " * Website: #{author.website}" if author.website?
|
|
60
|
+
puts " * Blog: #{author.blog}" if author.blog?
|
|
61
|
+
puts " * GitHub: #{author.github_url}" if author.github?
|
|
62
|
+
puts " * GitLab: #{author.gitlab_url}" if author.gitlab?
|
|
63
|
+
puts " * Twitter: #{author.twitter_url}" if author.twitter?
|
|
64
|
+
puts " * Discord: #{author.discord}" if author.discord?
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
else
|
|
68
|
+
indent { print_list(klass.authors) }
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
puts
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
#
|
|
76
|
+
# The class which defines a description.
|
|
77
|
+
#
|
|
78
|
+
# @param [Class<Core::Metadata::Description>] klass
|
|
79
|
+
#
|
|
80
|
+
def print_description(klass)
|
|
81
|
+
if klass.description
|
|
82
|
+
puts 'Description:'
|
|
83
|
+
puts
|
|
84
|
+
|
|
85
|
+
indent do
|
|
86
|
+
klass.description.each_line do |line|
|
|
87
|
+
puts line
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
puts
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
#
|
|
96
|
+
# The class that defines references.
|
|
97
|
+
#
|
|
98
|
+
# @param [Class<Core::Metadata::References>] klass
|
|
99
|
+
#
|
|
100
|
+
def print_references(klass)
|
|
101
|
+
unless klass.references.empty?
|
|
102
|
+
puts "References:"
|
|
103
|
+
puts
|
|
104
|
+
|
|
105
|
+
indent { print_list(klass.references) }
|
|
106
|
+
puts
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|