ronin-support 0.1.0.pre1

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 (127) hide show
  1. data/.document +4 -0
  2. data/.rspec +1 -0
  3. data/.yardopts +1 -0
  4. data/COPYING.txt +504 -0
  5. data/ChangeLog.md +4 -0
  6. data/Gemfile +23 -0
  7. data/README.md +98 -0
  8. data/Rakefile +29 -0
  9. data/gemspec.yml +20 -0
  10. data/lib/ronin/extensions.rb +28 -0
  11. data/lib/ronin/extensions/file.rb +63 -0
  12. data/lib/ronin/extensions/ip_addr.rb +220 -0
  13. data/lib/ronin/extensions/kernel.rb +45 -0
  14. data/lib/ronin/extensions/meta.rb +22 -0
  15. data/lib/ronin/extensions/meta/object.rb +24 -0
  16. data/lib/ronin/extensions/string.rb +200 -0
  17. data/lib/ronin/formatting.rb +26 -0
  18. data/lib/ronin/formatting/binary.rb +22 -0
  19. data/lib/ronin/formatting/digest.rb +22 -0
  20. data/lib/ronin/formatting/extensions.rb +25 -0
  21. data/lib/ronin/formatting/extensions/binary.rb +24 -0
  22. data/lib/ronin/formatting/extensions/binary/file.rb +35 -0
  23. data/lib/ronin/formatting/extensions/binary/integer.rb +147 -0
  24. data/lib/ronin/formatting/extensions/binary/string.rb +363 -0
  25. data/lib/ronin/formatting/extensions/digest.rb +23 -0
  26. data/lib/ronin/formatting/extensions/digest/file.rb +117 -0
  27. data/lib/ronin/formatting/extensions/digest/string.rb +80 -0
  28. data/lib/ronin/formatting/extensions/http.rb +23 -0
  29. data/lib/ronin/formatting/extensions/http/integer.rb +57 -0
  30. data/lib/ronin/formatting/extensions/http/string.rb +102 -0
  31. data/lib/ronin/formatting/extensions/text.rb +23 -0
  32. data/lib/ronin/formatting/extensions/text/array.rb +125 -0
  33. data/lib/ronin/formatting/extensions/text/string.rb +206 -0
  34. data/lib/ronin/formatting/http.rb +22 -0
  35. data/lib/ronin/formatting/text.rb +22 -0
  36. data/lib/ronin/network.rb +29 -0
  37. data/lib/ronin/network/esmtp.rb +22 -0
  38. data/lib/ronin/network/extensions.rb +29 -0
  39. data/lib/ronin/network/extensions/esmtp.rb +22 -0
  40. data/lib/ronin/network/extensions/esmtp/net.rb +100 -0
  41. data/lib/ronin/network/extensions/http.rb +22 -0
  42. data/lib/ronin/network/extensions/http/net.rb +661 -0
  43. data/lib/ronin/network/extensions/imap.rb +22 -0
  44. data/lib/ronin/network/extensions/imap/net.rb +124 -0
  45. data/lib/ronin/network/extensions/pop3.rb +22 -0
  46. data/lib/ronin/network/extensions/pop3/net.rb +92 -0
  47. data/lib/ronin/network/extensions/smtp.rb +22 -0
  48. data/lib/ronin/network/extensions/smtp/net.rb +110 -0
  49. data/lib/ronin/network/extensions/ssl.rb +22 -0
  50. data/lib/ronin/network/extensions/ssl/net.rb +147 -0
  51. data/lib/ronin/network/extensions/tcp.rb +22 -0
  52. data/lib/ronin/network/extensions/tcp/net.rb +304 -0
  53. data/lib/ronin/network/extensions/telnet.rb +22 -0
  54. data/lib/ronin/network/extensions/telnet/net.rb +156 -0
  55. data/lib/ronin/network/extensions/udp.rb +22 -0
  56. data/lib/ronin/network/extensions/udp/net.rb +226 -0
  57. data/lib/ronin/network/http.rb +24 -0
  58. data/lib/ronin/network/http/exceptions.rb +22 -0
  59. data/lib/ronin/network/http/exceptions/unknown_request.rb +29 -0
  60. data/lib/ronin/network/http/http.rb +290 -0
  61. data/lib/ronin/network/http/proxy.rb +307 -0
  62. data/lib/ronin/network/imap.rb +49 -0
  63. data/lib/ronin/network/network.rb +41 -0
  64. data/lib/ronin/network/pop3.rb +49 -0
  65. data/lib/ronin/network/smtp.rb +24 -0
  66. data/lib/ronin/network/smtp/email.rb +143 -0
  67. data/lib/ronin/network/smtp/smtp.rb +68 -0
  68. data/lib/ronin/network/ssl.rb +47 -0
  69. data/lib/ronin/network/tcp.rb +22 -0
  70. data/lib/ronin/network/telnet.rb +109 -0
  71. data/lib/ronin/network/udp.rb +22 -0
  72. data/lib/ronin/path.rb +132 -0
  73. data/lib/ronin/support.rb +28 -0
  74. data/lib/ronin/support/inflector.rb +40 -0
  75. data/lib/ronin/support/version.rb +27 -0
  76. data/lib/ronin/templates.rb +23 -0
  77. data/lib/ronin/templates/erb.rb +75 -0
  78. data/lib/ronin/templates/template.rb +161 -0
  79. data/ronin-support.gemspec +10 -0
  80. data/spec/extensions/file_spec.rb +24 -0
  81. data/spec/extensions/ip_addr_spec.rb +171 -0
  82. data/spec/extensions/kernel_spec.rb +30 -0
  83. data/spec/extensions/string_spec.rb +177 -0
  84. data/spec/formatting/binary/helpers/hexdumps.rb +16 -0
  85. data/spec/formatting/binary/helpers/hexdumps/ascii.bin +0 -0
  86. data/spec/formatting/binary/helpers/hexdumps/hexdump_decimal_shorts.txt +17 -0
  87. data/spec/formatting/binary/helpers/hexdumps/hexdump_hex_bytes.txt +17 -0
  88. data/spec/formatting/binary/helpers/hexdumps/hexdump_hex_shorts.txt +17 -0
  89. data/spec/formatting/binary/helpers/hexdumps/hexdump_octal_bytes.txt +17 -0
  90. data/spec/formatting/binary/helpers/hexdumps/hexdump_octal_shorts.txt +17 -0
  91. data/spec/formatting/binary/helpers/hexdumps/hexdump_repeated.txt +6 -0
  92. data/spec/formatting/binary/helpers/hexdumps/od_decimal_bytes.txt +17 -0
  93. data/spec/formatting/binary/helpers/hexdumps/od_decimal_ints.txt +17 -0
  94. data/spec/formatting/binary/helpers/hexdumps/od_decimal_quads.txt +17 -0
  95. data/spec/formatting/binary/helpers/hexdumps/od_decimal_shorts.txt +17 -0
  96. data/spec/formatting/binary/helpers/hexdumps/od_hex_bytes.txt +17 -0
  97. data/spec/formatting/binary/helpers/hexdumps/od_hex_ints.txt +17 -0
  98. data/spec/formatting/binary/helpers/hexdumps/od_hex_quads.txt +17 -0
  99. data/spec/formatting/binary/helpers/hexdumps/od_hex_shorts.txt +17 -0
  100. data/spec/formatting/binary/helpers/hexdumps/od_octal_bytes.txt +17 -0
  101. data/spec/formatting/binary/helpers/hexdumps/od_octal_ints.txt +17 -0
  102. data/spec/formatting/binary/helpers/hexdumps/od_octal_quads.txt +17 -0
  103. data/spec/formatting/binary/helpers/hexdumps/od_octal_shorts.txt +17 -0
  104. data/spec/formatting/binary/helpers/hexdumps/od_repeated.txt +6 -0
  105. data/spec/formatting/binary/helpers/hexdumps/repeated.bin +1 -0
  106. data/spec/formatting/binary/integer_spec.rb +140 -0
  107. data/spec/formatting/binary/string_spec.rb +306 -0
  108. data/spec/formatting/digest/string_spec.rb +82 -0
  109. data/spec/formatting/http/integer_spec.rb +42 -0
  110. data/spec/formatting/http/string_spec.rb +76 -0
  111. data/spec/formatting/text/array_spec.rb +105 -0
  112. data/spec/formatting/text/string_spec.rb +180 -0
  113. data/spec/network/http/http_spec.rb +280 -0
  114. data/spec/network/http/proxy_spec.rb +150 -0
  115. data/spec/network/network_spec.rb +8 -0
  116. data/spec/network/ssl_spec.rb +14 -0
  117. data/spec/path_spec.rb +84 -0
  118. data/spec/spec_helper.rb +4 -0
  119. data/spec/support_spec.rb +8 -0
  120. data/spec/templates/classes/example_erb.rb +11 -0
  121. data/spec/templates/classes/example_template.rb +35 -0
  122. data/spec/templates/erb_spec.rb +21 -0
  123. data/spec/templates/helpers/data.rb +9 -0
  124. data/spec/templates/helpers/data/includes/_relative.erb +1 -0
  125. data/spec/templates/helpers/data/templates/example.erb +1 -0
  126. data/spec/templates/template_spec.rb +54 -0
  127. metadata +286 -0
@@ -0,0 +1,22 @@
1
+ #
2
+ # Ronin - A Ruby platform for exploit development and security research.
3
+ #
4
+ # Copyright (c) 2006-2010 Hal Brodigan (postmodern.mod3 at gmail.com)
5
+ #
6
+ # This library is free software; you can redistribute it and/or
7
+ # modify it under the terms of the GNU Lesser General Public
8
+ # License as published by the Free Software Foundation; either
9
+ # version 2.1 of the License, or (at your option) any later version.
10
+ #
11
+ # This library is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
+ # Lesser General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU Lesser General Public
17
+ # License along with this library; if not, write to the Free Software
18
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor,
19
+ # Boston, MA 02110-1301 USA
20
+ #
21
+
22
+ require 'ronin/network/extensions/http/net'
@@ -0,0 +1,661 @@
1
+ #
2
+ # Ronin - A Ruby platform for exploit development and security research.
3
+ #
4
+ # Copyright (c) 2006-2010 Hal Brodigan (postmodern.mod3 at gmail.com)
5
+ #
6
+ # This library is free software; you can redistribute it and/or
7
+ # modify it under the terms of the GNU Lesser General Public
8
+ # License as published by the Free Software Foundation; either
9
+ # version 2.1 of the License, or (at your option) any later version.
10
+ #
11
+ # This library is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
+ # Lesser General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU Lesser General Public
17
+ # License along with this library; if not, write to the Free Software
18
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor,
19
+ # Boston, MA 02110-1301 USA
20
+ #
21
+
22
+ require 'ronin/network/http'
23
+ require 'ronin/network/ssl'
24
+
25
+ require 'uri/query_params'
26
+ require 'net/http'
27
+
28
+ begin
29
+ require 'net/https'
30
+ rescue ::LoadError
31
+ end
32
+
33
+ module Net
34
+ #
35
+ # Starts a HTTP connection with the server.
36
+ #
37
+ # @param [Hash] options
38
+ # Additional options
39
+ #
40
+ # @option options [String, URI::HTTP] :url
41
+ # The full URL to request.
42
+ #
43
+ # @option options [String] :host
44
+ # The host the HTTP server is running on.
45
+ #
46
+ # @option options [Integer] :port (Net::HTTP.default_port)
47
+ # The port the HTTP server is listening on.
48
+ #
49
+ # @option options [String, Hash] :proxy (Ronin::Network::HTTP.proxy)
50
+ # A Hash of proxy settings to use when connecting to the HTTP server.
51
+ #
52
+ # @option options [String] :user
53
+ # The user to authenticate with when connecting to the HTTP server.
54
+ #
55
+ # @option options [String] :password
56
+ # The password to authenticate with when connecting to the HTTP server.
57
+ #
58
+ # @option options [Boolean, Hash] :ssl
59
+ # Enables SSL for the HTTP connection.
60
+ #
61
+ # @option :ssl [Symbol] :verify
62
+ # Specifies the SSL certificate verification mode.
63
+ #
64
+ # @yield [session]
65
+ # If a block is given, it will be passed the newly created HTTP
66
+ # session object.
67
+ #
68
+ # @yieldparam [Net::HTTP] session
69
+ # The newly created HTTP session.
70
+ #
71
+ # @return [Net::HTTP]
72
+ # The HTTP session object.
73
+ #
74
+ def Net.http_connect(options={},&block)
75
+ options = Ronin::Network::HTTP.expand_options(options)
76
+
77
+ host = options[:host].to_s
78
+ port = options[:port]
79
+ proxy = options[:proxy]
80
+ proxy_host = if (proxy && proxy[:host])
81
+ proxy[:host].to_s
82
+ end
83
+
84
+ sess = Net::HTTP::Proxy(
85
+ proxy_host,
86
+ proxy[:port],
87
+ proxy[:user],
88
+ proxy[:password]
89
+ ).new(host.to_s,port)
90
+
91
+ if options[:ssl]
92
+ sess.use_ssl = true
93
+ sess.verify_mode = Ronin::Network::SSL.verify(options[:ssl][:verify])
94
+ end
95
+
96
+ sess.start()
97
+
98
+ if block
99
+ if block.arity == 2
100
+ block.call(sess,options)
101
+ else
102
+ block.call(sess)
103
+ end
104
+ end
105
+
106
+ return sess
107
+ end
108
+
109
+ #
110
+ # Creates a new temporary HTTP session with the server.
111
+ #
112
+ # @param [Hash] options
113
+ # Additional options
114
+ #
115
+ # @option options [String, URI::HTTP] :url
116
+ # The full URL to request.
117
+ #
118
+ # @option options [String] :host
119
+ # The host the HTTP server is running on.
120
+ #
121
+ # @option options [Integer] :port (Net::HTTP.default_port)
122
+ # The port the HTTP server is listening on.
123
+ #
124
+ # @option options [String] :user
125
+ # The user to authenticate with when connecting to the HTTP server.
126
+ #
127
+ # @option options [String] :password
128
+ # The password to authenticate with when connecting to the HTTP server.
129
+ #
130
+ # @option options [String, Hash] :proxy (Ronin::Network::HTTP.proxy)
131
+ # A Hash of proxy settings to use when connecting to the HTTP server.
132
+ #
133
+ # @option options [Boolean, Hash] :ssl
134
+ # Enables SSL for the HTTP connection.
135
+ #
136
+ # @option :ssl [Symbol] :verify
137
+ # Specifies the SSL certificate verification mode.
138
+ #
139
+ # @yield [session]
140
+ # If a block is given, it will be passed the newly created HTTP
141
+ # session object.
142
+ #
143
+ # @yieldparam [Net::HTTP] session
144
+ # The newly created HTTP session.
145
+ #
146
+ # @return [nil]
147
+ #
148
+ # @see Net.http_connect
149
+ #
150
+ def Net.http_session(options={},&block)
151
+ Net.http_connect(options) do |sess,expanded_options|
152
+ if block
153
+ if block.arity == 2
154
+ block.call(sess,expanded_options)
155
+ else
156
+ block.call(sess)
157
+ end
158
+ end
159
+
160
+ sess.finish
161
+ end
162
+
163
+ return nil
164
+ end
165
+
166
+ #
167
+ # Connects to the HTTP server and sends an HTTP Request.
168
+ #
169
+ # @param [Hash] options
170
+ # Additional options.
171
+ #
172
+ # @option options [Symbol, String] :method
173
+ # The HTTP method to use in the request.
174
+ #
175
+ # @option options [String] :path
176
+ # The path to request from the HTTP server.
177
+ #
178
+ # @option options [Hash] :headers
179
+ # The Hash of the HTTP headers to send with the request.
180
+ # May contain either Strings or Symbols, lower-case or camel-case keys.
181
+ #
182
+ # @yield [request, (options)]
183
+ # If a block is given, it will be passed the HTTP request object.
184
+ # If the block has an arity of 2, it will also be passed the expanded
185
+ # version of the given _options_.
186
+ #
187
+ # @yieldparam [Net::HTTP::Request] request
188
+ # The HTTP request object to use in the request.
189
+ #
190
+ # @yieldparam [Hash] options
191
+ # The expanded version of the given _options_.
192
+ #
193
+ # @return [Net::HTTP::Response]
194
+ # The response of the HTTP request.
195
+ #
196
+ # @see http_session
197
+ #
198
+ def Net.http_request(options={},&block)
199
+ resp = nil
200
+
201
+ Net.http_session(options) do |http,expanded_options|
202
+ req = Ronin::Network::HTTP.request(expanded_options)
203
+
204
+ if block
205
+ if block.arity == 2
206
+ block.call(req,expanded_options)
207
+ else
208
+ block.call(req)
209
+ end
210
+ end
211
+
212
+ resp = http.request(req)
213
+ end
214
+
215
+ return resp
216
+ end
217
+
218
+ #
219
+ # Performs an HTTP Copy request.
220
+ #
221
+ # @param [Hash] options
222
+ # Additional options.
223
+ #
224
+ # @yield [response]
225
+ # If a block is given, it will be passed the response received
226
+ # from the request.
227
+ #
228
+ # @yieldparam [Net::HTTP::Response] response
229
+ # The HTTP response object.
230
+ #
231
+ # @return [Net::HTTP::Response]
232
+ # The response of the HTTP request.
233
+ #
234
+ # @see http_request
235
+ #
236
+ def Net.http_copy(options={})
237
+ resp = Net.http_request(options.merge(:method => :copy))
238
+
239
+ yield resp if block_given?
240
+ return resp
241
+ end
242
+
243
+ #
244
+ # Performs an HTTP Delete request.
245
+ #
246
+ # @param [Hash] options
247
+ # Additional options.
248
+ #
249
+ # @yield [response]
250
+ # If a block is given, it will be passed the response received from
251
+ # the request.
252
+ #
253
+ # @yieldparam [Net::HTTP::Response] response
254
+ # The HTTP response object.
255
+ #
256
+ # @return [Net::HTTP::Response]
257
+ # The response of the HTTP request.
258
+ #
259
+ # @see http_request
260
+ #
261
+ def Net.http_delete(options={},&block)
262
+ original_headers = options[:headers]
263
+
264
+ # set the HTTP Depth header
265
+ options[:headers] = {:depth => 'Infinity'}
266
+
267
+ if original_headers
268
+ options[:header].merge!(original_headers)
269
+ end
270
+
271
+ resp = Net.http_request(options.merge(:method => :delete))
272
+
273
+ yield resp if block_given?
274
+ return resp
275
+ end
276
+
277
+ #
278
+ # Performs an HTTP Get request.
279
+ #
280
+ # @param [Hash] options
281
+ # Additional options.
282
+ #
283
+ # @yield [response]
284
+ # If a block is given, it will be passed the response received from
285
+ # the request.
286
+ #
287
+ # @yieldparam [Net::HTTP::Response] response
288
+ # The HTTP response object.
289
+ #
290
+ # @return [Net::HTTP::Response]
291
+ # The response of the HTTP request.
292
+ #
293
+ # @see http_request
294
+ #
295
+ def Net.http_get(options={},&block)
296
+ resp = Net.http_request(options.merge(:method => :get))
297
+
298
+ yield resp if block_given?
299
+ return resp
300
+ end
301
+
302
+ #
303
+ # Performs an HTTP Get request.
304
+ #
305
+ # @param [Hash] options
306
+ # Additional options.
307
+ #
308
+ # @yield [response]
309
+ # If a block is given, it will be passed the response received from
310
+ # the request.
311
+ #
312
+ # @yieldparam [Net::HTTP::Response] response
313
+ # The HTTP response object.
314
+ #
315
+ # @return [String]
316
+ # The body of the HTTP response.
317
+ #
318
+ # @see http_request
319
+ #
320
+ def Net.http_get_body(options={},&block)
321
+ Net.http_get(options,&block).body
322
+ end
323
+
324
+ #
325
+ # Performs an HTTP Head request.
326
+ #
327
+ # @param [Hash] options
328
+ # Additional options.
329
+ #
330
+ # @yield [response]
331
+ # If a block is given, it will be passed the response received from
332
+ # the request.
333
+ #
334
+ # @yieldparam [Net::HTTP::Response] response
335
+ # The HTTP response object.
336
+ #
337
+ # @return [Net::HTTP::Response]
338
+ # The response of the HTTP request.
339
+ #
340
+ # @see http_request
341
+ #
342
+ def Net.http_head(options={},&block)
343
+ resp = Net.http_request(options.merge(:method => :head))
344
+
345
+ yield resp if block_given?
346
+ return resp
347
+ end
348
+
349
+ #
350
+ # Checks if the response has an HTTP OK status code.
351
+ #
352
+ # @param [Hash] options
353
+ # Additional options.
354
+ #
355
+ # @return [Boolean]
356
+ # Specifies wether the response had an HTTP OK status code or not.
357
+ #
358
+ # @see http_request
359
+ #
360
+ def Net.http_ok?(options={})
361
+ Net.http_head(options).code == 200
362
+ end
363
+
364
+ #
365
+ # Sends a HTTP Head request and returns the HTTP Server header.
366
+ #
367
+ # @param [Hash] options
368
+ # Additional options.
369
+ #
370
+ # @return [String]
371
+ # The HTTP `Server` header.
372
+ #
373
+ # @see http_request
374
+ #
375
+ def Net.http_server(options={})
376
+ Net.http_head(options)['server']
377
+ end
378
+
379
+ #
380
+ # Sends an HTTP Head request and returns the HTTP X-Powered-By header.
381
+ #
382
+ # @param [Hash] options
383
+ # Additional options.
384
+ #
385
+ # @return [String]
386
+ # The HTTP `X-Powered-By` header.
387
+ #
388
+ # @see http_request
389
+ #
390
+ def Net.http_powered_by(options={})
391
+ resp = Net.http_head(options)
392
+
393
+ if resp.code != 200
394
+ resp = Net.http_get(options)
395
+ end
396
+
397
+ return resp['x-powered-by']
398
+ end
399
+
400
+ #
401
+ # Performs an HTTP Lock request.
402
+ #
403
+ # @param [Hash] options
404
+ # Additional options.
405
+ #
406
+ # @yield [response]
407
+ # If a block is given, it will be passed the response received from
408
+ # the request.
409
+ #
410
+ # @yieldparam [Net::HTTP::Response] response
411
+ # The HTTP response object.
412
+ #
413
+ # @return [Net::HTTP::Response]
414
+ # The response of the HTTP request.
415
+ #
416
+ # @see http_request
417
+ #
418
+ def Net.http_lock(options={},&block)
419
+ resp = Net.http_request(options.merge(:method => :lock))
420
+
421
+ yield resp if block_given?
422
+ return resp
423
+ end
424
+
425
+ #
426
+ # Performs an HTTP Mkcol request.
427
+ #
428
+ # @param [Hash] options
429
+ # Additional options.
430
+ #
431
+ # @yield [response]
432
+ # If a block is given, it will be passed the response received from
433
+ # the request.
434
+ #
435
+ # @yieldparam [Net::HTTP::Response] response
436
+ # The HTTP response object.
437
+ #
438
+ # @return [Net::HTTP::Response]
439
+ # The response of the HTTP request.
440
+ #
441
+ # @see http_request
442
+ #
443
+ def Net.http_mkcol(options={},&block)
444
+ resp = Net.http_request(options.merge(:method => :mkcol))
445
+
446
+ yield resp if block_given?
447
+ return resp
448
+ end
449
+
450
+ #
451
+ # Performs an HTTP Move request.
452
+ #
453
+ # @param [Hash] options
454
+ # Additional options.
455
+ #
456
+ # @yield [response]
457
+ # If a block is given, it will be passed the response received from
458
+ # the request.
459
+ #
460
+ # @yieldparam [Net::HTTP::Response] response
461
+ # The HTTP response object.
462
+ #
463
+ # @return [Net::HTTP::Response]
464
+ # The response of the HTTP request.
465
+ #
466
+ # @see http_request
467
+ #
468
+ def Net.http_move(options={},&block)
469
+ resp = Net.http_request(options.merge(:method => :move))
470
+
471
+ yield resp if block_given?
472
+ return resp
473
+ end
474
+
475
+ #
476
+ # Performs an HTTP Options request.
477
+ #
478
+ # @param [Hash] options
479
+ # Additional options.
480
+ #
481
+ # @yield [response]
482
+ # If a block is given, it will be passed the response received from
483
+ # the request.
484
+ #
485
+ # @yieldparam [Net::HTTP::Response] response
486
+ # The HTTP response object.
487
+ #
488
+ # @return [Net::HTTP::Response]
489
+ # The response of the HTTP request.
490
+ #
491
+ # @see http_request
492
+ #
493
+ def Net.http_options(options={},&block)
494
+ resp = Net.http_request(options.merge(:method => :options))
495
+
496
+ yield resp if block_given?
497
+ return resp
498
+ end
499
+
500
+ #
501
+ # Performs an HTTP Post request.
502
+ #
503
+ # @param [Hash] options
504
+ # Additional options.
505
+ #
506
+ # @option options [Hash, String] :form_data
507
+ # The form data to send with the HTTP Post request.
508
+ #
509
+ # @yield [response]
510
+ # If a block is given, it will be passed the response received from
511
+ # the request.
512
+ #
513
+ # @yieldparam [Net::HTTP::Response] response
514
+ # The HTTP response object.
515
+ #
516
+ # @return [Net::HTTP::Response]
517
+ # The response of the HTTP request.
518
+ #
519
+ # @see http_request
520
+ #
521
+ def Net.http_post(options={},&block)
522
+ resp = Net.http_request(options.merge(:method => :post))
523
+
524
+ yield resp if block_given?
525
+ return resp
526
+ end
527
+
528
+ #
529
+ # Performs an HTTP Post request.
530
+ #
531
+ # @param [Hash] options
532
+ # Additional options.
533
+ #
534
+ # @option options [Hash, String] :form_data
535
+ # The form data to send with the HTTP Post request.
536
+ #
537
+ # @yield [response]
538
+ # If a block is given, it will be passed the response received from
539
+ # the request.
540
+ #
541
+ # @yieldparam [Net::HTTP::Response] response
542
+ # The HTTP response object.
543
+ #
544
+ # @return [String]
545
+ # The body of the HTTP response.
546
+ #
547
+ # @see http_request
548
+ #
549
+ def Net.http_post_body(options={},&block)
550
+ Net.http_post(options,&block).body
551
+ end
552
+
553
+ #
554
+ # Performs an HTTP Propfind request.
555
+ #
556
+ # @param [Hash] options
557
+ # Additional options.
558
+ #
559
+ # @yield [response]
560
+ # If a block is given, it will be passed the response received from
561
+ # the request.
562
+ #
563
+ # @yieldparam [Net::HTTP::Response] response
564
+ # The HTTP response object.
565
+ #
566
+ # @return [Net::HTTP::Response]
567
+ # The response of the HTTP request.
568
+ #
569
+ # @see http_request
570
+ #
571
+ def Net.http_prop_find(options={},&block)
572
+ original_headers = options[:headers]
573
+
574
+ # set the HTTP Depth header
575
+ options[:headers] = {:depth => '0'}
576
+
577
+ if original_headers
578
+ options[:header].merge!(original_headers)
579
+ end
580
+
581
+ resp = Net.http_request(options.merge(:method => :propfind))
582
+
583
+ yield resp if block_given?
584
+ return resp
585
+ end
586
+
587
+ #
588
+ # Performs an HTTP Proppatch request.
589
+ #
590
+ # @param [Hash] options
591
+ # Additional options.
592
+ #
593
+ # @yield [response]
594
+ # If a block is given, it will be passed the response received from
595
+ # the request.
596
+ #
597
+ # @yieldparam [Net::HTTP::Response] response
598
+ # The HTTP response object.
599
+ #
600
+ # @return [Net::HTTP::Response]
601
+ # The response of the HTTP request.
602
+ #
603
+ # @see http_request
604
+ #
605
+ def Net.http_prop_patch(options={},&block)
606
+ resp = Net.http_request(options.merge(:method => :proppatch))
607
+
608
+ yield resp if block_given?
609
+ return resp
610
+ end
611
+
612
+ #
613
+ # Performs an HTTP Trace request.
614
+ #
615
+ # @param [Hash] options
616
+ # Additional options.
617
+ #
618
+ # @yield [response]
619
+ # If a block is given, it will be passed the response received from
620
+ # the request.
621
+ #
622
+ # @yieldparam [Net::HTTP::Response] response
623
+ # The HTTP response object.
624
+ #
625
+ # @return [Net::HTTP::Response]
626
+ # The response of the HTTP request.
627
+ #
628
+ # @see http_request
629
+ #
630
+ def Net.http_trace(options={},&block)
631
+ resp = Net.http_request(options.merge(:method => :trace))
632
+
633
+ yield resp if block_given?
634
+ return resp
635
+ end
636
+
637
+ #
638
+ # Performs an HTTP Unlock request.
639
+ #
640
+ # @param [Hash] options
641
+ # Additional options.
642
+ #
643
+ # @yield [response]
644
+ # If a block is given, it will be passed the response received from
645
+ # the request.
646
+ #
647
+ # @yieldparam [Net::HTTP::Response] response
648
+ # The HTTP response object.
649
+ #
650
+ # @return [Net::HTTP::Response]
651
+ # The response of the HTTP request.
652
+ #
653
+ # @see http_request
654
+ #
655
+ def Net.http_unlock(options={},&block)
656
+ resp = Net.http_request(options.merge(:method => :unlock))
657
+
658
+ yield resp if block_given?
659
+ return resp
660
+ end
661
+ end