ronin 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
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,52 @@
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
+
26
+ module Ronin
27
+ module Runner
28
+ module Program
29
+ class HelpCommand < Command
30
+
31
+ command :help
32
+
33
+ options('[COMMAND]') do |opts|
34
+ opts.arguments do
35
+ opts.arg('COMMAND','The command to view')
36
+ end
37
+
38
+ opts.summary('View a list of supported commands or information on a specific command')
39
+ end
40
+
41
+ def arguments(*args)
42
+ unless args.length<=1
43
+ fail('help: only one command maybe specified')
44
+ end
45
+
46
+ success { Program.help(args.first) }
47
+ end
48
+
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,65 @@
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 InstallCommand < Command
31
+
32
+ command :install
33
+
34
+ options('URI [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
+ options.settings.media = media
41
+ end
42
+ end
43
+
44
+ opts.arguments do
45
+ opts.arg('URI','The URI of the repository to install')
46
+ end
47
+
48
+ opts.summary('Installs the repository located at the specified URI')
49
+ end
50
+
51
+ def arguments(args)
52
+ unless args.length==1
53
+ fail('install: only one repository URI maybe specified')
54
+ end
55
+
56
+ Cache::Overlay.save_cache do
57
+ Cache::Overlay.install(:uri => args.first, :media => options.settings.media) do |repo|
58
+ puts "Overlay #{repo} has been installed."
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,81 @@
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 ListCommand < Command
31
+
32
+ command :list, :ls
33
+
34
+ options('[NAME ...] [options]') do |opts|
35
+ opts.options
36
+
37
+ opts.arguments do
38
+ opts.arg('NAME','Overlay to display')
39
+ end
40
+
41
+ opts.summary('Display all or the specified repositories within the repository cache')
42
+ end
43
+
44
+ def arguments(*args)
45
+ if args.empty?
46
+ # list all repositories by name
47
+ Cache::Overlay.each do |repo|
48
+ puts " #{repo}"
49
+ end
50
+ else
51
+ # list specified repositories
52
+ args.each do |name|
53
+ repo = Cache::Overlay.get(name)
54
+
55
+ puts "[ #{repo} ]\n\n"
56
+
57
+ puts " path: #{repo.path}" if options.settings.verbose
58
+ puts " media: #{repo.media}"
59
+ puts " uri: #{repo.uri}" if repo.uri
60
+
61
+ if repo.description
62
+ puts " description:\n\n #{repo.description}"
63
+ end
64
+
65
+ puts "\n"
66
+
67
+ if options.settings.verbose
68
+ puts " extensions:\n\n"
69
+
70
+ repo.each_extension do |ext|
71
+ puts " #{ext}"
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
77
+
78
+ end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,57 @@
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 RemoveCommand < Command
31
+
32
+ command :remove, :rm
33
+
34
+ options('NAME [NAME ...] [options]') do |opts|
35
+ opts.options
36
+
37
+ opts.arguments do
38
+ opts.arg('NAME','The repository to remove')
39
+ end
40
+
41
+ opts.summary('Remove the specified repositories')
42
+ end
43
+
44
+ def arguments(*args)
45
+ args.each do |name|
46
+ Cache::Overlay.save_cache do
47
+ Cache::Overlay.remove(name) do |repo|
48
+ puts "Removing #{repo}..."
49
+ end
50
+ end
51
+ end
52
+ end
53
+
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,57 @@
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 UninstallCommand < Command
31
+
32
+ command :uninstall
33
+
34
+ options('NAME [NAME ...] [options]') do |opts|
35
+ opts.options
36
+
37
+ opts.arguments do
38
+ opts.arg('NAME','The repository to uninstall')
39
+ end
40
+
41
+ opts.summary('Uninstall the specified repositories')
42
+ end
43
+
44
+ def arguments(*args)
45
+ args.each do |name|
46
+ Cache::Overlay.save_cache do
47
+ Cache::Overlay.uninstall(name) do |repo|
48
+ puts "Uninstalling #{repo}..."
49
+ end
50
+ end
51
+ end
52
+ end
53
+
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,55 @@
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 UpdateCommand < Command
31
+
32
+ command :update, :up
33
+
34
+ options('[NAME ...] [options]') do |opts|
35
+ opts.options
36
+
37
+ opts.arguments do
38
+ opts.arg('NAME','The repository to update')
39
+ end
40
+
41
+ opts.summary('Updates all or the specified repositories')
42
+ end
43
+
44
+ def arguments(*args)
45
+ if args.empty?
46
+ Cache::Overlay.each { |repo| repo.update }
47
+ else
48
+ args.each { |name| Cache::Overlay.update(name) }
49
+ end
50
+ end
51
+
52
+ end
53
+ end
54
+ end
55
+ 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/exceptions/unknown_command'
@@ -0,0 +1,31 @@
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 Runner
26
+ module Program
27
+ class UnknownCommand < RuntimeError
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,205 @@
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
+
26
+ require 'optparse'
27
+ require 'ostruct'
28
+
29
+ module Ronin
30
+ module Runner
31
+ class Options
32
+
33
+ # Settings used by the options
34
+ attr_reader :settings
35
+
36
+ #
37
+ # Creates a new Options object with the specified _program_ name
38
+ # and the given _banner_. If a _block_ is given, it will be passed
39
+ # the newly created Options object.
40
+ #
41
+ def initialize(program,banner=nil,&block)
42
+ @settings = OpenStruct.new
43
+ @settings.verbose = false
44
+
45
+ @help_block = proc { help }
46
+
47
+ @verbose_block = proc {
48
+ @settings.verbose = true
49
+ }
50
+
51
+ @parser = OptionParser.new do |opts|
52
+ if banner
53
+ opts.banner = "Usage: #{program} #{banner}"
54
+ opts.separator ''
55
+ end
56
+ end
57
+
58
+ block.call(self) if block
59
+ end
60
+
61
+ #
62
+ # Creates a new Options object for a Command with the specified
63
+ # _program_ name, command _name_ and the given _banner_. If a _block_
64
+ # is given, it will be passed the newly created Options object.
65
+ #
66
+ def Options.command(program,name,banner=nil,&block)
67
+ return Options.new(program,"#{name} #{banner}",&block) if banner
68
+ return Options.new(program,name,&block)
69
+ end
70
+
71
+ #
72
+ # Call the specified _block_ when the given option _flags_ are parsed.
73
+ #
74
+ def on(*flags,&block)
75
+ @parser.on(*flags,&block)
76
+ return self
77
+ end
78
+
79
+ #
80
+ # Calls the specified _block_ when the verbose option flag is parsed.
81
+ #
82
+ def on_verbose(&block)
83
+ @verbose_block = block
84
+ return self
85
+ end
86
+
87
+ #
88
+ # Calls the specified _block_ when the help option-flag is parsed.
89
+ #
90
+ def on_help(&block)
91
+ @help_block = block
92
+ return self
93
+ end
94
+
95
+ #
96
+ # Adds a section separator with the specified _text_.
97
+ #
98
+ def separator(text)
99
+ @parser.separator(text)
100
+ return self
101
+ end
102
+
103
+ #
104
+ # Adds an options section to the help message. If a _block_ is given
105
+ # it will be called before any default options are added.
106
+ #
107
+ def options(&block)
108
+ @parser.separator ' Options:'
109
+
110
+ block.call(self) if block
111
+
112
+ @parser.on('-v','--verbose','produce excess output',&(@verbose_block))
113
+ @parser.on('-h','--help','print this message',&(@help_block))
114
+ @parser.separator ''
115
+
116
+ return self
117
+ end
118
+
119
+ #
120
+ # Adds an the argument with the specified _name_ and _description_
121
+ # to the arguments section of the help message of these options.
122
+ #
123
+ def arg(name,description)
124
+ @parser.separator " #{name}\t#{description}"
125
+ return self
126
+ end
127
+
128
+ #
129
+ # Creates an arguments section in the help message and calls the
130
+ # given _block_.
131
+ #
132
+ def arguments(&block)
133
+ if block
134
+ @parser.separator ' Arguments:'
135
+
136
+ block.call(self)
137
+
138
+ @parser.separator ''
139
+ end
140
+
141
+ return self
142
+ end
143
+
144
+ #
145
+ # Addes a summary section with the specified _lines_.
146
+ #
147
+ def summary(*lines)
148
+ @parser.separator ' Summary:'
149
+
150
+ lines.each do |line|
151
+ @parser.separator " #{line}"
152
+ end
153
+
154
+ @parser.separator ''
155
+ return self
156
+ end
157
+
158
+ #
159
+ # Adds a defaults section with the specified _flags_.
160
+ #
161
+ def defaults(*flags)
162
+ @parser.separator ' Defaults:'
163
+
164
+ flags.each do |flag|
165
+ @parser.separator " #{flag}"
166
+ end
167
+
168
+ @parser.separator ''
169
+ return self
170
+ end
171
+
172
+ #
173
+ # Prints the help message and exits successfully. If a _block_ is
174
+ # given it will be called after the help message has been print
175
+ # and before the Program has exited.
176
+ #
177
+ def help(&block)
178
+ Program.success do
179
+ puts @parser
180
+
181
+ block.call(self) if block
182
+ end
183
+ end
184
+
185
+ #
186
+ # Parses the specified _argv_ Array. If a _block_ is given it will
187
+ # be passed the left-over arguments. Returns the left-over arguments.
188
+ #
189
+ def parse(argv,&block)
190
+ args = @parser.parse(argv)
191
+
192
+ block.call(self,args) if block
193
+ return args
194
+ end
195
+
196
+ #
197
+ # Returns a String representation of the OptParse parser.
198
+ #
199
+ def to_s
200
+ @parser.to_s
201
+ end
202
+
203
+ end
204
+ end
205
+ end