ronin 0.0.9

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 (157) hide show
  1. data/COPYING.txt +339 -0
  2. data/History.txt +34 -0
  3. data/Manifest.txt +157 -0
  4. data/README.txt +131 -0
  5. data/Rakefile +23 -0
  6. data/TODO.txt +6 -0
  7. data/bin/ronin +12 -0
  8. data/lib/ronin.rb +35 -0
  9. data/lib/ronin/arch.rb +86 -0
  10. data/lib/ronin/author.rb +88 -0
  11. data/lib/ronin/cache.rb +27 -0
  12. data/lib/ronin/cache/config.rb +34 -0
  13. data/lib/ronin/cache/exceptions.rb +25 -0
  14. data/lib/ronin/cache/exceptions/extension_not_found.rb +29 -0
  15. data/lib/ronin/cache/exceptions/overlay_cached.rb +29 -0
  16. data/lib/ronin/cache/exceptions/overlay_not_found.rb +29 -0
  17. data/lib/ronin/cache/extension.rb +706 -0
  18. data/lib/ronin/cache/extension_cache.rb +108 -0
  19. data/lib/ronin/cache/overlay.rb +418 -0
  20. data/lib/ronin/cache/overlay_cache.rb +228 -0
  21. data/lib/ronin/cache/ronin.rb +50 -0
  22. data/lib/ronin/chars.rb +25 -0
  23. data/lib/ronin/chars/char_set.rb +121 -0
  24. data/lib/ronin/chars/chars.rb +180 -0
  25. data/lib/ronin/config.rb +31 -0
  26. data/lib/ronin/console.rb +127 -0
  27. data/lib/ronin/context.rb +233 -0
  28. data/lib/ronin/database.rb +122 -0
  29. data/lib/ronin/environment.rb +39 -0
  30. data/lib/ronin/exceptions/context_not_found.rb +27 -0
  31. data/lib/ronin/exceptions/invalid_database_config.rb +27 -0
  32. data/lib/ronin/exceptions/object_context_not_found.rb +27 -0
  33. data/lib/ronin/exceptions/unknown_context.rb +27 -0
  34. data/lib/ronin/exceptions/unknown_object_context.rb +27 -0
  35. data/lib/ronin/extensions.rb +28 -0
  36. data/lib/ronin/extensions/hash.rb +62 -0
  37. data/lib/ronin/extensions/kernel.rb +34 -0
  38. data/lib/ronin/extensions/meta.rb +24 -0
  39. data/lib/ronin/extensions/meta/object.rb +24 -0
  40. data/lib/ronin/extensions/string.rb +37 -0
  41. data/lib/ronin/extensions/uri.rb +24 -0
  42. data/lib/ronin/extensions/uri/http.rb +78 -0
  43. data/lib/ronin/extensions/uri/query_params.rb +97 -0
  44. data/lib/ronin/formatting.rb +29 -0
  45. data/lib/ronin/formatting/binary.rb +24 -0
  46. data/lib/ronin/formatting/digest.rb +24 -0
  47. data/lib/ronin/formatting/extensions.rb +26 -0
  48. data/lib/ronin/formatting/extensions/binary.rb +25 -0
  49. data/lib/ronin/formatting/extensions/binary/integer.rb +59 -0
  50. data/lib/ronin/formatting/extensions/binary/string.rb +73 -0
  51. data/lib/ronin/formatting/extensions/digest.rb +24 -0
  52. data/lib/ronin/formatting/extensions/digest/string.rb +65 -0
  53. data/lib/ronin/formatting/extensions/html.rb +24 -0
  54. data/lib/ronin/formatting/extensions/html/string.rb +75 -0
  55. data/lib/ronin/formatting/extensions/http.rb +24 -0
  56. data/lib/ronin/formatting/extensions/http/string.rb +69 -0
  57. data/lib/ronin/formatting/extensions/text.rb +24 -0
  58. data/lib/ronin/formatting/extensions/text/string.rb +96 -0
  59. data/lib/ronin/formatting/html.rb +24 -0
  60. data/lib/ronin/formatting/http.rb +24 -0
  61. data/lib/ronin/formatting/text.rb +24 -0
  62. data/lib/ronin/license.rb +87 -0
  63. data/lib/ronin/model.rb +44 -0
  64. data/lib/ronin/models.rb +34 -0
  65. data/lib/ronin/network.rb +31 -0
  66. data/lib/ronin/network/esmtp.rb +24 -0
  67. data/lib/ronin/network/extensions.rb +31 -0
  68. data/lib/ronin/network/extensions/esmtp.rb +24 -0
  69. data/lib/ronin/network/extensions/esmtp/net.rb +68 -0
  70. data/lib/ronin/network/extensions/http.rb +24 -0
  71. data/lib/ronin/network/extensions/http/net.rb +303 -0
  72. data/lib/ronin/network/extensions/imap.rb +24 -0
  73. data/lib/ronin/network/extensions/imap/net.rb +92 -0
  74. data/lib/ronin/network/extensions/pop3.rb +24 -0
  75. data/lib/ronin/network/extensions/pop3/net.rb +65 -0
  76. data/lib/ronin/network/extensions/smtp.rb +24 -0
  77. data/lib/ronin/network/extensions/smtp/net.rb +80 -0
  78. data/lib/ronin/network/extensions/tcp.rb +24 -0
  79. data/lib/ronin/network/extensions/tcp/net.rb +94 -0
  80. data/lib/ronin/network/extensions/telnet.rb +24 -0
  81. data/lib/ronin/network/extensions/telnet/net.rb +132 -0
  82. data/lib/ronin/network/extensions/udp.rb +24 -0
  83. data/lib/ronin/network/extensions/udp/net.rb +99 -0
  84. data/lib/ronin/network/http.rb +128 -0
  85. data/lib/ronin/network/http/exceptions.rb +24 -0
  86. data/lib/ronin/network/http/exceptions/unknown_request.rb +31 -0
  87. data/lib/ronin/network/imap.rb +47 -0
  88. data/lib/ronin/network/pop3.rb +47 -0
  89. data/lib/ronin/network/smtp.rb +26 -0
  90. data/lib/ronin/network/smtp/email.rb +126 -0
  91. data/lib/ronin/network/smtp/smtp.rb +55 -0
  92. data/lib/ronin/network/tcp.rb +24 -0
  93. data/lib/ronin/network/telnet.rb +95 -0
  94. data/lib/ronin/network/udp.rb +24 -0
  95. data/lib/ronin/object_context.rb +257 -0
  96. data/lib/ronin/objects.rb +29 -0
  97. data/lib/ronin/parameters.rb +27 -0
  98. data/lib/ronin/parameters/class_param.rb +45 -0
  99. data/lib/ronin/parameters/exceptions.rb +25 -0
  100. data/lib/ronin/parameters/exceptions/missing_param.rb +29 -0
  101. data/lib/ronin/parameters/exceptions/param_not_found.rb +29 -0
  102. data/lib/ronin/parameters/instance_param.rb +57 -0
  103. data/lib/ronin/parameters/param.rb +45 -0
  104. data/lib/ronin/parameters/parameters.rb +275 -0
  105. data/lib/ronin/path.rb +70 -0
  106. data/lib/ronin/pending_context.rb +42 -0
  107. data/lib/ronin/persistence.rb +32 -0
  108. data/lib/ronin/platform.rb +95 -0
  109. data/lib/ronin/product.rb +56 -0
  110. data/lib/ronin/ronin.rb +49 -0
  111. data/lib/ronin/rpc.rb +27 -0
  112. data/lib/ronin/rpc/call.rb +75 -0
  113. data/lib/ronin/rpc/client.rb +91 -0
  114. data/lib/ronin/rpc/console.rb +79 -0
  115. data/lib/ronin/rpc/exceptions.rb +25 -0
  116. data/lib/ronin/rpc/exceptions/not_implemented.rb +29 -0
  117. data/lib/ronin/rpc/exceptions/response_missing.rb +29 -0
  118. data/lib/ronin/rpc/interactive.rb +55 -0
  119. data/lib/ronin/rpc/interactive_console.rb +58 -0
  120. data/lib/ronin/rpc/interactive_shell.rb +59 -0
  121. data/lib/ronin/rpc/response.rb +57 -0
  122. data/lib/ronin/rpc/service.rb +69 -0
  123. data/lib/ronin/rpc/shell.rb +66 -0
  124. data/lib/ronin/runner.rb +24 -0
  125. data/lib/ronin/runner/program.rb +26 -0
  126. data/lib/ronin/runner/program/command.rb +204 -0
  127. data/lib/ronin/runner/program/commands.rb +33 -0
  128. data/lib/ronin/runner/program/commands/add.rb +73 -0
  129. data/lib/ronin/runner/program/commands/help.rb +52 -0
  130. data/lib/ronin/runner/program/commands/install.rb +65 -0
  131. data/lib/ronin/runner/program/commands/list.rb +81 -0
  132. data/lib/ronin/runner/program/commands/remove.rb +57 -0
  133. data/lib/ronin/runner/program/commands/uninstall.rb +57 -0
  134. data/lib/ronin/runner/program/commands/update.rb +55 -0
  135. data/lib/ronin/runner/program/exceptions.rb +24 -0
  136. data/lib/ronin/runner/program/exceptions/unknown_command.rb +31 -0
  137. data/lib/ronin/runner/program/options.rb +205 -0
  138. data/lib/ronin/runner/program/program.rb +173 -0
  139. data/lib/ronin/runner/program/runner.rb +35 -0
  140. data/lib/ronin/sessions.rb +32 -0
  141. data/lib/ronin/sessions/esmtp.rb +76 -0
  142. data/lib/ronin/sessions/imap.rb +73 -0
  143. data/lib/ronin/sessions/pop3.rb +70 -0
  144. data/lib/ronin/sessions/session.rb +52 -0
  145. data/lib/ronin/sessions/smtp.rb +76 -0
  146. data/lib/ronin/sessions/tcp.rb +111 -0
  147. data/lib/ronin/sessions/telnet.rb +76 -0
  148. data/lib/ronin/sessions/udp.rb +99 -0
  149. data/lib/ronin/sessions/web.rb +83 -0
  150. data/lib/ronin/shell.rb +81 -0
  151. data/lib/ronin/target.rb +40 -0
  152. data/lib/ronin/version.rb +27 -0
  153. data/lib/ronin/web.rb +24 -0
  154. data/lib/ronin/web/web.rb +265 -0
  155. data/spec/spec_helper.rb +9 -0
  156. data/tasks/spec.rb +7 -0
  157. metadata +324 -0
@@ -0,0 +1,69 @@
1
+ #
2
+ #--
3
+ # Ronin - A Ruby platform designed for information security and data
4
+ # exploration tasks.
5
+ #
6
+ # Copyright (c) 2006-2008 Hal Brodigan (postmodern.mod3 at gmail.com)
7
+ #
8
+ # This program is free software; you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation; either version 2 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # This program is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with this program; if not, write to the Free Software
20
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
+ #++
22
+ #
23
+
24
+ module Ronin
25
+ module RPC
26
+ class Service
27
+
28
+ # Name of the service
29
+ attr_reader :name
30
+
31
+ # The client object
32
+ attr_reader :client
33
+
34
+ #
35
+ # Creates a new Service object with the specified _name_ and _client_.
36
+ #
37
+ def initialize(name,client)
38
+ @name = name
39
+ @client = client
40
+ end
41
+
42
+ #
43
+ # Calls the specified _function_ from the service on the RPC Server
44
+ # with the given _arguments_. Returns the return-value of the
45
+ # RPC function call.
46
+ #
47
+ def call(function,*arguments)
48
+ @client.call("#{@name}.#{function}",*arguments)
49
+ end
50
+
51
+ #
52
+ # Returns the name of the service.
53
+ #
54
+ def to_s
55
+ @name.to_s
56
+ end
57
+
58
+ protected
59
+
60
+ #
61
+ # Relays missing methods to call.
62
+ #
63
+ def method_missing(sym,*args)
64
+ call(sym,*args)
65
+ end
66
+
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,66 @@
1
+ #
2
+ #--
3
+ # Ronin - A Ruby platform designed for information security and data
4
+ # exploration tasks.
5
+ #
6
+ # Copyright (c) 2006-2008 Hal Brodigan (postmodern.mod3 at gmail.com)
7
+ #
8
+ # This program is free software; you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation; either version 2 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # This program is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with this program; if not, write to the Free Software
20
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
+ #++
22
+ #
23
+
24
+ require 'ronin/rpc/service'
25
+ require 'ronin/rpc/interactive_shell'
26
+
27
+ module Ronin
28
+ module RPC
29
+ class Shell < Service
30
+
31
+ #
32
+ # Executes the specified _program_ with the given _arguments_. The
33
+ # output of the program will be returned as a String.
34
+ #
35
+ def exec(program,*arguments)
36
+ call(:exec,program,*arguments)
37
+ end
38
+
39
+ #
40
+ # Executes the specified _program_ with the given _arguments_ and
41
+ # prints the output of the program.
42
+ #
43
+ def system(program,*arguments)
44
+ print(exec(program,*arguments))
45
+ end
46
+
47
+ #
48
+ # Starts an InteractiveShell that allows a user to execute commands
49
+ # and observe their output.
50
+ #
51
+ def interact
52
+ InteractiveShell.start(self)
53
+ end
54
+
55
+ protected
56
+
57
+ #
58
+ # Relays missing methods to exec.
59
+ #
60
+ def method_missing(sym,*args)
61
+ exec(sym,*args)
62
+ end
63
+
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,24 @@
1
+ #
2
+ #--
3
+ # Ronin - A Ruby platform designed for information security and data
4
+ # exploration tasks.
5
+ #
6
+ # Copyright (c) 2006-2008 Hal Brodigan (postmodern.mod3 at gmail.com)
7
+ #
8
+ # This program is free software; you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation; either version 2 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # This program is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with this program; if not, write to the Free Software
20
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
+ #++
22
+ #
23
+
24
+ require 'ronin/runner/program'
@@ -0,0 +1,26 @@
1
+ #
2
+ #--
3
+ # Ronin - A Ruby platform designed for information security and data
4
+ # exploration tasks.
5
+ #
6
+ # Copyright (c) 2006-2008 Hal Brodigan (postmodern.mod3 at gmail.com)
7
+ #
8
+ # This program is free software; you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation; either version 2 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # This program is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with this program; if not, write to the Free Software
20
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
+ #++
22
+ #
23
+
24
+ require 'ronin/runner/program/program'
25
+ require 'ronin/runner/program/commands'
26
+ require 'ronin/runner/program/runner'
@@ -0,0 +1,204 @@
1
+ #
2
+ #--
3
+ # Ronin - A Ruby platform designed for information security and data
4
+ # exploration tasks.
5
+ #
6
+ # Copyright (c) 2006-2008 Hal Brodigan (postmodern.mod3 at gmail.com)
7
+ #
8
+ # This program is free software; you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation; either version 2 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # This program is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with this program; if not, write to the Free Software
20
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
+ #++
22
+ #
23
+
24
+ require 'ronin/runner/program/program'
25
+ require 'ronin/extensions/meta'
26
+
27
+ module Ronin
28
+ module Runner
29
+ module Program
30
+ class Command
31
+
32
+ #
33
+ # Creates a new Command object. If a _block_ is given,
34
+ # it will be passed newly created Command object.
35
+ #
36
+ def initialize(&block)
37
+ @options = nil
38
+
39
+ block.call(self) if block
40
+ end
41
+
42
+ #
43
+ # Returns the name of the command.
44
+ #
45
+ def Command.command_name
46
+ ''
47
+ end
48
+
49
+ #
50
+ # Returns the short names of the command.
51
+ #
52
+ def Command.command_short_names
53
+ []
54
+ end
55
+
56
+ #
57
+ # Returns all the names of the command.
58
+ #
59
+ def self.command_names
60
+ [self.command_name] + self.command_short_names
61
+ end
62
+
63
+ #
64
+ # Creates a new command object and runs it with the
65
+ # given _args_.
66
+ #
67
+ def self.run(*args)
68
+ self.new.run(*args)
69
+ end
70
+
71
+ #
72
+ # Prints the help information for the command.
73
+ #
74
+ def self.help
75
+ self.new.help
76
+ end
77
+
78
+ #
79
+ # Returns the name of the command.
80
+ #
81
+ def command_name
82
+ self.class.command_name
83
+ end
84
+
85
+ #
86
+ # Returns the short names of the command.
87
+ #
88
+ def command_short_names
89
+ self.class.command_short_names
90
+ end
91
+
92
+ #
93
+ # Returns all the names of the command.
94
+ #
95
+ def command_names
96
+ self.class.command_names
97
+ end
98
+
99
+ #
100
+ # Runs the command with the given _args_. If a _block_ is
101
+ # given, it will be called after the specified _args_ have
102
+ # been parsed and the command has run.
103
+ #
104
+ def run(*args,&block)
105
+ arguments(*(options.parse(args)))
106
+
107
+ @options = nil
108
+
109
+ block.call if block
110
+ return self
111
+ end
112
+
113
+ #
114
+ # Prints the help information for the command.
115
+ #
116
+ def help
117
+ options.help
118
+ return self
119
+ end
120
+
121
+ #
122
+ # Returns the String form of the command.
123
+ #
124
+ def to_s
125
+ names.join(', ')
126
+ end
127
+
128
+ protected
129
+
130
+ #
131
+ # Registers the command with the specified _name_ and the given
132
+ # _short_names_.
133
+ #
134
+ def self.command(name,*short_names)
135
+ name = name.to_s
136
+ short_names = short_names.map { |short_name| short_name.to_s }
137
+
138
+ meta_def(:command_name) { name }
139
+ meta_def(:command_short_names) { short_names }
140
+
141
+ # register the command
142
+ Program.commands << self unless Program.commands.include?(self)
143
+
144
+ # register the command by name
145
+ Program.commands_by_name[name] = self
146
+
147
+ # register the command by it's short_names
148
+ short_names.each do |short_name|
149
+ Program.commands_by_name[short_name] = self
150
+ end
151
+
152
+ return self
153
+ end
154
+
155
+ #
156
+ # Defines the options of the command with the specified _usage_ and
157
+ # _block_.
158
+ #
159
+ def self.options(usage=nil,&block)
160
+ class_def(:options) do
161
+ @options ||= Options.command(:ronin,self.command_name,usage,&block)
162
+ end
163
+
164
+ return self
165
+ end
166
+
167
+ #
168
+ # Returns the options of the command.
169
+ #
170
+ def options
171
+ @options ||= Options.command(:ronin,command_name)
172
+ end
173
+
174
+ #
175
+ # See Program.error.
176
+ #
177
+ def error(message)
178
+ Program.error(message)
179
+ end
180
+
181
+ #
182
+ # See Program.success.
183
+ #
184
+ def success(&block)
185
+ Program.success(&block)
186
+ end
187
+
188
+ #
189
+ # See Program.fail.
190
+ #
191
+ def fail(*messages,&block)
192
+ Program.fail(*messages,&block)
193
+ end
194
+
195
+ #
196
+ # Processes the additional arguments specified by _args_.
197
+ #
198
+ def arguments(*args)
199
+ end
200
+
201
+ end
202
+ end
203
+ end
204
+ end
@@ -0,0 +1,33 @@
1
+ #
2
+ #--
3
+ # Ronin - A Ruby platform designed for information security and data
4
+ # exploration tasks.
5
+ #
6
+ # Copyright (c) 2006-2007 Hal Brodigan (postmodern.mod3 at gmail.com)
7
+ #
8
+ # This program is free software; you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation; either version 2 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # This program is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with this program; if not, write to the Free Software
20
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
+ #++
22
+ #
23
+
24
+ require 'ronin/runner/program/commands/add'
25
+ require 'ronin/runner/program/commands/install'
26
+ require 'ronin/runner/program/commands/list'
27
+ require 'ronin/runner/program/commands/update'
28
+ require 'ronin/runner/program/commands/uninstall'
29
+ require 'ronin/runner/program/commands/remove'
30
+ require 'ronin/runner/program/commands/help'
31
+ require 'ronin/extensions'
32
+
33
+ ronin_require 'ronin/runner/program/commands'
@@ -0,0 +1,73 @@
1
+ #
2
+ #--
3
+ # Ronin - A Ruby platform designed for information security and data
4
+ # exploration tasks.
5
+ #
6
+ # Copyright (c) 2006-2007 Hal Brodigan (postmodern.mod3 at gmail.com)
7
+ #
8
+ # This program is free software; you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation; either version 2 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # This program is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with this program; if not, write to the Free Software
20
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
+ #++
22
+ #
23
+
24
+ require 'ronin/runner/program/command'
25
+ require 'ronin/cache/overlay'
26
+
27
+ module Ronin
28
+ module Runner
29
+ module Program
30
+ class AddCommand < Command
31
+
32
+ command :add
33
+
34
+ options('PATH [options]') do |opts|
35
+ opts.settings.media = nil
36
+ opts.settings.uri = nil
37
+
38
+ opts.options do
39
+ opts.on('-m','--media MEDIA','Spedify the media-type of the repository') do |media|
40
+ opts.settings.media = media
41
+ end
42
+
43
+ opts.on('-U','--uri URI','Specify the source URI of the repository') do |uri|
44
+ opts.settings.uri = uri
45
+ end
46
+ end
47
+
48
+ opts.arguments do
49
+ opts.arg('PATH','Add the repository located at the specified PATH')
50
+ end
51
+
52
+ opts.summary('Add a local repository located at the specified PATH to the repository cache')
53
+
54
+ end
55
+
56
+ def arguments(*args)
57
+ unless args.length==1
58
+ fail('add: only one repository path maybe specified')
59
+ end
60
+
61
+ path = args.first
62
+
63
+ Cache::Overlay.save_cache do
64
+ Cache::Overlay.add(path,options.settings.media,options.settings.uri) do |repo|
65
+ puts "Overlay #{repo} added."
66
+ end
67
+ end
68
+ end
69
+
70
+ end
71
+ end
72
+ end
73
+ end