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,44 @@
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/extensions/meta'
25
+
26
+ require 'dm-core'
27
+ require 'dm-types'
28
+ require 'dm-serializer'
29
+ require 'dm-aggregates'
30
+
31
+ module Ronin
32
+ module Model
33
+ include DataMapper::Types
34
+
35
+ def self.included(base)
36
+ base.module_eval do
37
+ include DataMapper::Resource
38
+ include DataMapper::AutoMigrations
39
+
40
+ property :type, Discriminator
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,34 @@
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/extensions/kernel'
25
+ require 'ronin/model'
26
+ require 'ronin/arch'
27
+ require 'ronin/platform'
28
+ require 'ronin/author'
29
+ require 'ronin/license'
30
+ require 'ronin/product'
31
+
32
+ module Ronin
33
+ ronin_require 'ronin/models'
34
+ end
@@ -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
+ require 'ronin/network/tcp'
25
+ require 'ronin/network/udp'
26
+ require 'ronin/network/smtp'
27
+ require 'ronin/network/esmtp'
28
+ require 'ronin/network/pop3'
29
+ require 'ronin/network/imap'
30
+ require 'ronin/network/telnet'
31
+ require 'ronin/network/http'
@@ -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/network/extensions/esmtp'
@@ -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
+ require 'ronin/network/extensions/tcp'
25
+ require 'ronin/network/extensions/udp'
26
+ require 'ronin/network/extensions/smtp'
27
+ require 'ronin/network/extensions/esmtp'
28
+ require 'ronin/network/extensions/pop3'
29
+ require 'ronin/network/extensions/imap'
30
+ require 'ronin/network/extensions/telnet'
31
+ require 'ronin/network/extensions/http'
@@ -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/network/extensions/esmtp/net'
@@ -0,0 +1,68 @@
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/network/extensions/smtp'
25
+
26
+ module Net
27
+ #
28
+ # See <tt>Ronin::Network::SMTP.message</tt>.
29
+ #
30
+ def Net.esmtp_message(options={},&block)
31
+ Net.smtp_message(options,&block)
32
+ end
33
+
34
+ #
35
+ # Connects to the ESMTP server on the specified _host_ with the given
36
+ # _options_. If a _block_ is given it will be passed the newly created
37
+ # <tt>Net::SMTP</tt> object.
38
+ #
39
+ # _options_ may contain the following keys:
40
+ # <tt>:port</tt>:: The port to connect to, defaults to
41
+ # <tt>Ronin::Network::SMTP.default_port</tt>.
42
+ # <tt>:helo</tt>:: The HELO domain.
43
+ # <tt>:auth</tt>:: The type of authentication to use. Can be
44
+ # either <tt>:login</tt>, <tt>:plain</tt> or
45
+ # <tt>:cram_md5</tt>.
46
+ # <tt>:user</tt>:: The user name to authenticate with.
47
+ # <tt>:password</tt>:: The password to authenticate with.
48
+ #
49
+ def Net.esmtp_connect(host,options={},&block)
50
+ Net.smtp_connect(host,options) do |sess|
51
+ sess.esmtp = true
52
+ block.call(sess)
53
+ end
54
+ end
55
+
56
+ #
57
+ # Connects to the ESMTP server on the specified _host_ with the given
58
+ # _options_. If a _block_ is given it will be passed the newly created
59
+ # <tt>Net::SMTP</tt> object. After the <tt>Net::SMTP</tt> object has been
60
+ # passed to the _block_ it will be closed.
61
+ #
62
+ def Net.esmtp_session(host,options={},&block)
63
+ Net.smtp_session(host,options) do |sess|
64
+ sess.esmtp = true
65
+ block.call(sess)
66
+ end
67
+ end
68
+ 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/network/extensions/http/net'
@@ -0,0 +1,303 @@
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/network/http'
25
+ require 'ronin/extensions/uri/http'
26
+
27
+ require 'net/http'
28
+
29
+ module Net
30
+ #
31
+ # Connects to the HTTP server using the given _options_. If a _block_
32
+ # is given it will be passed the newly created <tt>Net::HTTP</tt> object.
33
+ #
34
+ # _options_ may contain the following keys:
35
+ # <tt>:host</tt>:: The host the HTTP server is running on.
36
+ # <tt>:port</tt>:: The port the HTTP server is running on. Defaults to
37
+ # <tt>Net::HTTP.default_port</tt>.
38
+ # <tt>:url</tt>:: The full URL to request.
39
+ # <tt>:user</tt>:: The user to authenticate with when connecting to the
40
+ # HTTP server.
41
+ # <tt>:password</tt>:: The password to authenticate with when connecting
42
+ # to the HTTP server.
43
+ # <tt>:path</tt>:: The path to request from the HTTP server.
44
+ # <tt>:proxy</tt>:: A Hash of proxy settings to use when connecting to
45
+ # the HTTP server. Defaults to
46
+ # <tt>Ronin::Network::HTTP.proxy</tt>.
47
+ # <tt>:host</tt>:: The HTTP proxy host to connect to.
48
+ # <tt>:port</tt>:: The HTTP proxy port to connect to.
49
+ # Defaults to <tt>Ronin::Network::HTTP.default_proxy_port</tt>.
50
+ # <tt>:user</tt>:: The user to authenticate with
51
+ # when connecting to the HTTP proxy.
52
+ # <tt>:password</tt>:: The password to authenticate with
53
+ # when connecting to the HTTP
54
+ # proxy.
55
+ #
56
+ #
57
+ def Net.http_session(options={},&block)
58
+ host = options[:host]
59
+ port = (options[:port] || ::Net::HTTP.default_port)
60
+
61
+ if options[:url]
62
+ url = URI(options[:url].to_s)
63
+
64
+ host = url.host
65
+ port = url.port
66
+
67
+ options[:user] = url.user if url.user
68
+ options[:password] = url.password if url.password
69
+
70
+ if url.query
71
+ options[:path] = "#{url.path}?#{url.query}"
72
+ else
73
+ options[:path] = url.path
74
+ end
75
+ end
76
+
77
+ proxy = (options[:proxy] || Ronin::Network::HTTP.proxy)
78
+
79
+ if proxy
80
+ proxy_host = proxy[:host]
81
+ proxy_port = (proxy[:port] || Ronin::Network::HTTP.default_proxy_port)
82
+ proxy_user = proxy[:user]
83
+ proxy_pass = proxy[:password]
84
+ end
85
+
86
+ sess = Net::HTTP::Proxy(proxy_host,proxy_port,proxy_user,proxy_pass).start(host,port)
87
+
88
+ block.call(sess) if block
89
+ return sess
90
+ end
91
+
92
+ #
93
+ # Performes an HTTP Copy request with the given _options_. If a _block_
94
+ # is given, it will be passed the response from the HTTP server.
95
+ # Returns the response from the HTTP server.
96
+ #
97
+ def Net.http_copy(options={},&block)
98
+ Net.http_session(options) do |http|
99
+ resp = http.request(Ronin::Network::HTTP.request(:copy,options))
100
+
101
+ block.call(resp) if block
102
+ return resp
103
+ end
104
+ end
105
+
106
+ #
107
+ # Performes an HTTP Delete request with the given _options_. If a _block_
108
+ # is given, it will be passed the response from the HTTP server.
109
+ # Returns the response from the HTTP server.
110
+ #
111
+ def Net.http_delete(options={},&block)
112
+ Net.http_session(options) do |http|
113
+ req = Ronin::Network::HTTP.request(:delete,options)
114
+ req['Depth'] = (options[:depth].to_s || 'Infinity')
115
+
116
+ resp = http.request(req)
117
+
118
+ block.call(resp) if block
119
+ return resp
120
+ end
121
+ end
122
+
123
+ #
124
+ # Performes an HTTP Get request with the given _options_. If a _block_
125
+ # is given, it will be passed the response from the HTTP server.
126
+ # Returns the response from the HTTP server.
127
+ #
128
+ def Net.http_get(options={},&block)
129
+ Net.http_session(options) do |http|
130
+ resp = http.request(Ronin::Network::HTTP.request(:get,options))
131
+
132
+ block.call(resp) if block
133
+ return resp
134
+ end
135
+ end
136
+
137
+ #
138
+ # Performes an HTTP Get request with the given _options_. If a _block_
139
+ # is given, it will be passed the response body from the HTTP server.
140
+ # Returns the response body from the HTTP server.
141
+ #
142
+ def Net.http_get_body(options={},&block)
143
+ Net.http_get(options,&block).body
144
+ end
145
+
146
+ #
147
+ # Performes an HTTP Head request with the given _options_. If a _block_
148
+ # is given, it will be passed the response from the HTTP server.
149
+ # Returns the response from the HTTP server.
150
+ #
151
+ def Net.http_head(options={},&block)
152
+ Net.http_session(options) do |http|
153
+ resp = http.request(Ronin::Network::HTTP.request(:head,options))
154
+
155
+ block.call(resp) if block
156
+ return resp
157
+ end
158
+ end
159
+
160
+ #
161
+ # Performes an HTTP Lock request with the given _options_. If a _block_
162
+ # is given, it will be passed the response from the HTTP server.
163
+ # Returns the response from the HTTP server.
164
+ #
165
+ def Net.http_lock(options={},&block)
166
+ Net.http_session(options) do |http|
167
+ resp = http.request(Ronin::Network::HTTP.request(:lock,options),options[:body])
168
+
169
+ block.call(resp) if block
170
+ return resp
171
+ end
172
+ end
173
+
174
+ #
175
+ # Performes an HTTP Mkcol request with the given _options_. If a _block_
176
+ # is given, it will be passed the response from the HTTP server.
177
+ # Returns the response from the HTTP server.
178
+ #
179
+ def Net.http_mkcol(options={},&block)
180
+ Net.http_session(options) do |http|
181
+ resp = http.request(Ronin::Network::HTTP.request(:mkcol,options),options[:body])
182
+
183
+ block.call(resp) if block
184
+ return resp
185
+ end
186
+ end
187
+
188
+ #
189
+ # Performes an HTTP Move request with the given _options_. If a _block_
190
+ # is given, it will be passed the response from the HTTP server.
191
+ # Returns the response from the HTTP server.
192
+ #
193
+ def Net.http_move(options={},&block)
194
+ Net.http_session(options) do |http|
195
+ resp = http.request(Ronin::Network::HTTP.request(:move,options))
196
+
197
+ block.call(resp) if block
198
+ return resp
199
+ end
200
+ end
201
+
202
+ #
203
+ # Performes an HTTP Options request with the given _options_. If a _block_
204
+ # is given, it will be passed the response from the HTTP server.
205
+ # Returns the response from the HTTP server.
206
+ #
207
+ def Net.http_options(options={},&block)
208
+ Net.http_session(options) do |http|
209
+ resp = http.request(Ronin::Network::HTTP.request(:options,options))
210
+
211
+ block.call(resp) if block
212
+ return resp
213
+ end
214
+ end
215
+
216
+ #
217
+ # Performes an HTTP Post request with the given _options_. If a _block_
218
+ # is given, it will be passed the response from the HTTP server.
219
+ # Returns the response from the HTTP server.
220
+ #
221
+ def Net.http_post(options={},&block)
222
+ Net.http_session(options) do |http|
223
+ url = URI(options[:url].to_s)
224
+ post_data = (options[:post_data] || url.query_params)
225
+
226
+ req = Ronin::Network::HTTP.request(:post,options)
227
+ req.set_form_data(post_data)
228
+
229
+ resp = http.request(req)
230
+
231
+ block.call(resp) if block
232
+ return resp
233
+ end
234
+ end
235
+
236
+ #
237
+ # Performes an HTTP Post request with the given _options_. If a _block_
238
+ # is given, it will be passed the response body from the HTTP server.
239
+ # Returns the response body from the HTTP server.
240
+ #
241
+ def Net.http_post_body(options={},&block)
242
+ Net.http_post(options,&block).body
243
+ end
244
+
245
+ #
246
+ # Performes an HTTP Propfind request with the given _options_. If a
247
+ # _block_ is given, it will be passed the response from the HTTP server.
248
+ # Returns the response from the HTTP server.
249
+ #
250
+ def Net.http_prop_find(options={},&block)
251
+ Net.http_session(options) do |http|
252
+ req = Ronin::Network::HTTP.request(:propfind,options)
253
+ req['Depth'] = (options[:depth] || '0')
254
+
255
+ resp = http.request(req,options[:body])
256
+
257
+ block.call(resp) if block
258
+ return resp
259
+ end
260
+ end
261
+
262
+ #
263
+ # Performes an HTTP Proppath request with the given _options_. If a
264
+ # _block_ is given, it will be passed the response from the HTTP server.
265
+ # Returns the response from the HTTP server.
266
+ #
267
+ def Net.http_prop_path(options={},&block)
268
+ Net.http_session(options) do |http|
269
+ resp = http.request(Ronin::Network::HTTP.request(:proppath,options),options[:body])
270
+
271
+ block.call(resp) if block
272
+ return resp
273
+ end
274
+ end
275
+
276
+ #
277
+ # Performes an HTTP Trace request with the given _options_. If a _block_
278
+ # is given, it will be passed the response from the HTTP server.
279
+ # Returns the response from the HTTP server.
280
+ #
281
+ def Net.http_trace(options={},&block)
282
+ Net.http_session(options) do |http|
283
+ resp = http.request(Ronin::Network::HTTP.request(:trace,options))
284
+
285
+ block.call(resp) if block
286
+ return resp
287
+ end
288
+ end
289
+
290
+ #
291
+ # Performes an HTTP Unlock request with the given _options_. If a _block_
292
+ # is given, it will be passed the response from the HTTP server.
293
+ # Returns the response from the HTTP server.
294
+ #
295
+ def Net.http_unlock(options={},&block)
296
+ Net.http_session(options) do |http|
297
+ resp = http.request(Ronin::Network::HTTP.request(:unlock,options),options[:body])
298
+
299
+ block.call(resp) if block
300
+ return resp
301
+ end
302
+ end
303
+ end