ronin-support 0.5.1 → 1.0.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (517) hide show
  1. checksums.yaml +7 -0
  2. data/.editorconfig +11 -0
  3. data/.github/workflows/ruby.yml +27 -0
  4. data/.gitignore +7 -6
  5. data/.mailmap +1 -0
  6. data/.ruby-version +1 -0
  7. data/.yardopts +1 -2
  8. data/ChangeLog.md +533 -137
  9. data/Gemfile +20 -20
  10. data/README.md +137 -61
  11. data/Rakefile +29 -10
  12. data/data/text/homoglyphs/ascii.txt +8 -0
  13. data/data/text/homoglyphs/cyrillic.txt +33 -0
  14. data/data/text/homoglyphs/full_width.txt +81 -0
  15. data/data/text/homoglyphs/greek.txt +21 -0
  16. data/data/text/homoglyphs/latin_numbers.txt +14 -0
  17. data/data/text/homoglyphs/punctuation.txt +7 -0
  18. data/data/text/patterns/network/public_suffix.rb.erb +44 -0
  19. data/examples/ssl_proxy.rb +38 -0
  20. data/examples/tcp_proxy.rb +41 -0
  21. data/gemspec.yml +25 -15
  22. data/lib/ronin/support/archive/core_ext/file.rb +118 -0
  23. data/lib/ronin/{formatting/sql.rb → support/archive/core_ext.rb} +6 -7
  24. data/lib/ronin/support/archive/mixin.rb +213 -0
  25. data/lib/ronin/support/archive/tar/reader.rb +135 -0
  26. data/lib/ronin/support/archive/tar/writer.rb +197 -0
  27. data/lib/ronin/support/archive/tar.rb +155 -0
  28. data/lib/ronin/support/archive/zip/reader/entry.rb +134 -0
  29. data/lib/ronin/support/archive/zip/reader/statistics.rb +76 -0
  30. data/lib/ronin/support/archive/zip/reader.rb +273 -0
  31. data/lib/ronin/support/archive/zip/writer.rb +175 -0
  32. data/lib/ronin/support/archive/zip.rb +105 -0
  33. data/lib/ronin/support/archive.rb +211 -0
  34. data/lib/ronin/support/binary/array.rb +255 -0
  35. data/lib/ronin/support/binary/bit_flip.rb +147 -0
  36. data/lib/ronin/support/binary/buffer.rb +2027 -0
  37. data/lib/ronin/support/binary/byte_slice.rb +324 -0
  38. data/lib/ronin/support/binary/core_ext/array.rb +75 -0
  39. data/lib/ronin/support/binary/core_ext/float.rb +80 -0
  40. data/lib/ronin/support/binary/core_ext/integer.rb +305 -0
  41. data/lib/ronin/support/binary/core_ext/io.rb +38 -0
  42. data/lib/ronin/support/binary/core_ext/string.rb +115 -0
  43. data/lib/ronin/{formatting/extensions/text.rb → support/binary/core_ext.rb} +9 -9
  44. data/lib/ronin/support/binary/cstring.rb +259 -0
  45. data/lib/ronin/support/binary/ctypes/aggregate_type.rb +98 -0
  46. data/lib/ronin/support/binary/ctypes/arch/arm/big_endian.rb +77 -0
  47. data/lib/ronin/support/binary/ctypes/arch/arm.rb +75 -0
  48. data/lib/ronin/support/binary/ctypes/arch/arm64/big_endian.rb +77 -0
  49. data/lib/ronin/support/binary/ctypes/arch/arm64.rb +75 -0
  50. data/lib/ronin/support/binary/ctypes/arch/mips/little_endian.rb +77 -0
  51. data/lib/ronin/support/binary/ctypes/arch/mips.rb +75 -0
  52. data/lib/ronin/support/binary/ctypes/arch/mips64/little_endian.rb +77 -0
  53. data/lib/ronin/support/binary/ctypes/arch/mips64.rb +75 -0
  54. data/lib/ronin/support/binary/ctypes/arch/ppc.rb +75 -0
  55. data/lib/ronin/support/binary/ctypes/arch/ppc64.rb +75 -0
  56. data/lib/ronin/support/binary/ctypes/arch/x86.rb +75 -0
  57. data/lib/ronin/support/binary/ctypes/arch/x86_64.rb +75 -0
  58. data/lib/ronin/support/binary/ctypes/arch.rb +30 -0
  59. data/lib/ronin/support/binary/ctypes/array_object_type.rb +164 -0
  60. data/lib/ronin/support/binary/ctypes/array_type.rb +232 -0
  61. data/lib/ronin/support/binary/ctypes/big_endian.rb +195 -0
  62. data/lib/ronin/support/binary/ctypes/char_type.rb +59 -0
  63. data/lib/ronin/support/binary/ctypes/char_types.rb +39 -0
  64. data/lib/ronin/support/binary/ctypes/enum_type.rb +181 -0
  65. data/lib/ronin/support/binary/ctypes/float32_type.rb +50 -0
  66. data/lib/ronin/support/binary/ctypes/float64_type.rb +50 -0
  67. data/lib/ronin/support/binary/ctypes/float_type.rb +62 -0
  68. data/lib/ronin/support/binary/ctypes/int16_type.rb +50 -0
  69. data/lib/ronin/support/binary/ctypes/int32_type.rb +50 -0
  70. data/lib/ronin/support/binary/ctypes/int64_type.rb +50 -0
  71. data/lib/ronin/support/binary/ctypes/int8_type.rb +41 -0
  72. data/lib/ronin/support/binary/ctypes/int_type.rb +62 -0
  73. data/lib/ronin/support/binary/ctypes/little_endian.rb +195 -0
  74. data/lib/ronin/support/binary/ctypes/mixin.rb +135 -0
  75. data/lib/ronin/support/binary/ctypes/native.rb +205 -0
  76. data/lib/ronin/support/binary/ctypes/network.rb +29 -0
  77. data/lib/ronin/support/binary/ctypes/object_type.rb +55 -0
  78. data/lib/ronin/support/binary/ctypes/os/bsd.rb +65 -0
  79. data/lib/ronin/support/binary/ctypes/os/freebsd.rb +215 -0
  80. data/lib/ronin/support/binary/ctypes/os/linux.rb +193 -0
  81. data/lib/ronin/support/binary/ctypes/os/macos.rb +151 -0
  82. data/lib/ronin/support/binary/ctypes/os/netbsd.rb +147 -0
  83. data/lib/ronin/support/binary/ctypes/os/openbsd.rb +168 -0
  84. data/lib/ronin/support/binary/ctypes/os/unix.rb +78 -0
  85. data/lib/ronin/support/binary/ctypes/os/windows.rb +125 -0
  86. data/lib/ronin/support/binary/ctypes/os.rb +125 -0
  87. data/lib/ronin/support/binary/ctypes/scalar_type.rb +200 -0
  88. data/lib/ronin/support/binary/ctypes/string_type.rb +143 -0
  89. data/lib/ronin/support/binary/ctypes/struct_object_type.rb +173 -0
  90. data/lib/ronin/support/binary/ctypes/struct_type.rb +359 -0
  91. data/lib/ronin/support/binary/ctypes/type.rb +193 -0
  92. data/lib/ronin/support/binary/ctypes/type_resolver.rb +206 -0
  93. data/lib/ronin/support/binary/ctypes/uint16_type.rb +50 -0
  94. data/lib/ronin/support/binary/ctypes/uint32_type.rb +50 -0
  95. data/lib/ronin/support/binary/ctypes/uint64_type.rb +50 -0
  96. data/lib/ronin/support/binary/ctypes/uint8_type.rb +41 -0
  97. data/lib/ronin/support/binary/ctypes/uint_type.rb +59 -0
  98. data/lib/ronin/support/binary/ctypes/unbounded_array_type.rb +258 -0
  99. data/lib/ronin/support/binary/ctypes/union_object_type.rb +173 -0
  100. data/lib/ronin/support/binary/ctypes/union_type.rb +261 -0
  101. data/lib/ronin/support/binary/ctypes.rb +462 -0
  102. data/lib/ronin/support/binary/hexdump/core_ext/file.rb +118 -0
  103. data/lib/ronin/support/binary/hexdump/core_ext/string.rb +115 -0
  104. data/lib/ronin/support/binary/hexdump/core_ext.rb +20 -0
  105. data/lib/ronin/support/binary/hexdump/parser.rb +492 -0
  106. data/lib/ronin/support/binary/hexdump.rb +20 -0
  107. data/lib/ronin/support/binary/memory.rb +268 -0
  108. data/lib/ronin/support/binary/packet.rb +33 -0
  109. data/lib/ronin/support/binary/stack.rb +256 -0
  110. data/lib/ronin/support/binary/stream/methods.rb +1755 -0
  111. data/lib/ronin/support/binary/stream.rb +151 -0
  112. data/lib/ronin/support/binary/struct/member.rb +86 -0
  113. data/lib/ronin/support/binary/struct.rb +830 -0
  114. data/lib/ronin/support/binary/template.rb +284 -0
  115. data/lib/ronin/support/binary/union.rb +162 -0
  116. data/lib/ronin/support/binary.rb +26 -0
  117. data/lib/ronin/support/cli/ansi.rb +330 -0
  118. data/lib/ronin/support/cli/io_shell/core_ext/io.rb +67 -0
  119. data/lib/ronin/{fuzzing/extensions.rb → support/cli/io_shell/core_ext.rb} +6 -7
  120. data/lib/ronin/support/cli/io_shell.rb +161 -0
  121. data/lib/ronin/support/cli/printing.rb +216 -0
  122. data/lib/ronin/support/cli.rb +20 -0
  123. data/lib/ronin/support/compression/core_ext/file.rb +70 -0
  124. data/lib/ronin/support/compression/core_ext/string.rb +101 -0
  125. data/lib/ronin/{formatting/html.rb → support/compression/core_ext.rb} +6 -7
  126. data/lib/ronin/support/compression/gzip/reader.rb +70 -0
  127. data/lib/ronin/support/compression/gzip/writer.rb +74 -0
  128. data/lib/ronin/support/compression/gzip.rb +105 -0
  129. data/lib/ronin/support/compression/mixin.rb +180 -0
  130. data/lib/ronin/{network/extensions/esmtp/net.rb → support/compression/zlib.rb} +9 -10
  131. data/lib/ronin/support/compression.rb +174 -0
  132. data/lib/ronin/{extensions → support/core_ext}/enumerable.rb +5 -6
  133. data/lib/ronin/{extensions → support/core_ext}/file.rb +11 -34
  134. data/lib/ronin/support/core_ext/integer.rb +37 -0
  135. data/lib/ronin/support/core_ext/ipaddr.rb +65 -0
  136. data/lib/ronin/{extensions → support/core_ext}/kernel.rb +10 -9
  137. data/lib/ronin/{extensions → support/core_ext}/resolv.rb +5 -28
  138. data/lib/ronin/{extensions → support/core_ext}/string.rb +117 -57
  139. data/lib/ronin/support/core_ext.rb +33 -0
  140. data/lib/ronin/support/crypto/cert.rb +522 -0
  141. data/lib/ronin/support/crypto/cert_chain.rb +204 -0
  142. data/lib/ronin/support/crypto/cipher/aes.rb +71 -0
  143. data/lib/ronin/support/crypto/cipher/aes128.rb +54 -0
  144. data/lib/ronin/support/crypto/cipher/aes256.rb +54 -0
  145. data/lib/ronin/support/crypto/cipher.rb +194 -0
  146. data/lib/ronin/support/crypto/core_ext/file.rb +660 -0
  147. data/lib/ronin/support/crypto/core_ext/string.rb +548 -0
  148. data/lib/ronin/{binary.rb → support/crypto/core_ext.rb} +7 -8
  149. data/lib/ronin/support/crypto/hmac.rb +48 -0
  150. data/lib/ronin/support/crypto/key/dh.rb +122 -0
  151. data/lib/ronin/support/crypto/key/dsa.rb +103 -0
  152. data/lib/ronin/support/crypto/key/ec.rb +99 -0
  153. data/lib/ronin/support/crypto/key/methods.rb +163 -0
  154. data/lib/ronin/support/crypto/key/rsa.rb +169 -0
  155. data/lib/ronin/support/crypto/key.rb +105 -0
  156. data/lib/ronin/support/crypto/mixin.rb +620 -0
  157. data/lib/ronin/{network/extensions/http/net.rb → support/crypto/openssl.rb} +9 -10
  158. data/lib/ronin/support/crypto.rb +779 -0
  159. data/lib/ronin/support/encoding/base16/core_ext/string.rb +63 -0
  160. data/lib/ronin/support/encoding/base16/core_ext.rb +19 -0
  161. data/lib/ronin/support/encoding/base16.rb +82 -0
  162. data/lib/ronin/support/encoding/base32/core_ext/string.rb +63 -0
  163. data/lib/ronin/support/encoding/base32/core_ext.rb +19 -0
  164. data/lib/ronin/support/encoding/base32.rb +164 -0
  165. data/lib/ronin/support/encoding/base64/core_ext/string.rb +76 -0
  166. data/lib/ronin/support/encoding/base64/core_ext.rb +19 -0
  167. data/lib/ronin/support/encoding/base64.rb +78 -0
  168. data/lib/ronin/support/encoding/c/core_ext/integer.rb +82 -0
  169. data/lib/ronin/support/encoding/c/core_ext/string.rb +125 -0
  170. data/lib/ronin/support/encoding/c/core_ext.rb +20 -0
  171. data/lib/ronin/support/encoding/c.rb +277 -0
  172. data/lib/ronin/support/encoding/core_ext/string.rb +107 -0
  173. data/lib/ronin/support/encoding/core_ext.rb +33 -0
  174. data/lib/ronin/support/encoding/hex/core_ext/integer.rb +82 -0
  175. data/lib/ronin/support/encoding/hex/core_ext/string.rb +133 -0
  176. data/lib/ronin/support/encoding/hex/core_ext.rb +22 -0
  177. data/lib/ronin/support/encoding/hex.rb +248 -0
  178. data/lib/ronin/support/encoding/html/core_ext/integer.rb +106 -0
  179. data/lib/ronin/support/encoding/html/core_ext/string.rb +130 -0
  180. data/lib/ronin/support/encoding/html/core_ext.rb +20 -0
  181. data/lib/ronin/support/encoding/html.rb +233 -0
  182. data/lib/ronin/support/encoding/http/core_ext/integer.rb +95 -0
  183. data/lib/ronin/support/encoding/http/core_ext/string.rb +129 -0
  184. data/lib/ronin/support/encoding/http/core_ext.rb +20 -0
  185. data/lib/ronin/support/encoding/http.rb +241 -0
  186. data/lib/ronin/support/encoding/js/core_ext/integer.rb +67 -0
  187. data/lib/ronin/support/encoding/js/core_ext/string.rb +125 -0
  188. data/lib/ronin/support/encoding/js/core_ext.rb +20 -0
  189. data/lib/ronin/support/encoding/js.rb +279 -0
  190. data/lib/ronin/support/encoding/powershell/core_ext/integer.rb +87 -0
  191. data/lib/ronin/support/encoding/powershell/core_ext/string.rb +145 -0
  192. data/lib/ronin/support/encoding/powershell/core_ext.rb +20 -0
  193. data/lib/ronin/support/encoding/powershell.rb +297 -0
  194. data/lib/ronin/support/encoding/punycode/core_ext/string.rb +63 -0
  195. data/lib/ronin/support/encoding/punycode/core_ext.rb +19 -0
  196. data/lib/ronin/support/encoding/punycode.rb +76 -0
  197. data/lib/ronin/support/encoding/quoted_printable/core_ext/string.rb +75 -0
  198. data/lib/ronin/support/encoding/quoted_printable/core_ext.rb +19 -0
  199. data/lib/ronin/support/encoding/quoted_printable.rb +102 -0
  200. data/lib/ronin/support/encoding/ruby/core_ext/string.rb +129 -0
  201. data/lib/ronin/{formatting/binary.rb → support/encoding/ruby/core_ext.rb} +6 -7
  202. data/lib/ronin/support/encoding/ruby.rb +235 -0
  203. data/lib/ronin/support/encoding/shell/core_ext/integer.rb +89 -0
  204. data/lib/ronin/support/encoding/shell/core_ext/string.rb +134 -0
  205. data/lib/ronin/support/encoding/shell/core_ext.rb +20 -0
  206. data/lib/ronin/support/encoding/shell.rb +293 -0
  207. data/lib/ronin/{network/extensions → support/encoding}/smtp.rb +7 -7
  208. data/lib/ronin/support/encoding/sql/core_ext/string.rb +114 -0
  209. data/lib/ronin/{formatting/http.rb → support/encoding/sql/core_ext.rb} +6 -7
  210. data/lib/ronin/support/encoding/sql.rb +124 -0
  211. data/lib/ronin/support/encoding/uri/core_ext/integer.rb +149 -0
  212. data/lib/ronin/support/encoding/uri/core_ext/string.rb +195 -0
  213. data/lib/ronin/support/encoding/uri/core_ext.rb +20 -0
  214. data/lib/ronin/support/encoding/uri.rb +424 -0
  215. data/lib/ronin/support/encoding/uuencoding/core_ext/string.rb +73 -0
  216. data/lib/ronin/support/encoding/uuencoding/core_ext.rb +19 -0
  217. data/lib/ronin/support/encoding/uuencoding.rb +70 -0
  218. data/lib/ronin/support/encoding/xml/core_ext/integer.rb +100 -0
  219. data/lib/ronin/support/encoding/xml/core_ext/string.rb +124 -0
  220. data/lib/ronin/support/encoding/xml/core_ext.rb +20 -0
  221. data/lib/ronin/support/encoding/xml.rb +328 -0
  222. data/lib/ronin/support/encoding.rb +46 -0
  223. data/lib/ronin/support/home.rb +88 -0
  224. data/lib/ronin/support/mixin.rb +42 -0
  225. data/lib/ronin/support/network/asn/dns_record.rb +112 -0
  226. data/lib/ronin/support/network/asn/list.rb +269 -0
  227. data/lib/ronin/support/network/asn/record.rb +164 -0
  228. data/lib/ronin/support/network/asn/record_set.rb +226 -0
  229. data/lib/ronin/support/network/asn.rb +88 -0
  230. data/lib/ronin/{binary/hexdump.rb → support/network/core_ext.rb} +6 -7
  231. data/lib/ronin/support/network/dns/idn.rb +38 -0
  232. data/lib/ronin/support/network/dns/mixin.rb +941 -0
  233. data/lib/ronin/support/network/dns/resolver.rb +707 -0
  234. data/lib/ronin/support/network/dns.rb +1109 -0
  235. data/lib/ronin/support/network/domain.rb +70 -0
  236. data/lib/ronin/support/network/email_address.rb +574 -0
  237. data/lib/ronin/support/network/esmtp/mixin.rb +115 -0
  238. data/lib/ronin/support/network/exceptions.rb +43 -0
  239. data/lib/ronin/support/network/ftp/mixin.rb +106 -0
  240. data/lib/ronin/support/network/host.rb +1473 -0
  241. data/lib/ronin/support/network/http/cookie.rb +245 -0
  242. data/lib/ronin/support/network/http/core_ext/uri/http.rb +63 -0
  243. data/lib/ronin/support/network/http/core_ext.rb +19 -0
  244. data/lib/ronin/support/network/http/mixin.rb +890 -0
  245. data/lib/ronin/support/network/http/request.rb +215 -0
  246. data/lib/ronin/support/network/http/set_cookie.rb +210 -0
  247. data/lib/ronin/support/network/http/user_agents.rb +115 -0
  248. data/lib/ronin/support/network/http.rb +2582 -0
  249. data/lib/ronin/support/network/imap/mixin.rb +133 -0
  250. data/lib/ronin/support/network/ip/mixin.rb +114 -0
  251. data/lib/ronin/support/network/ip.rb +540 -0
  252. data/lib/ronin/support/network/ip_range/cidr.rb +252 -0
  253. data/lib/ronin/support/network/ip_range/glob.rb +309 -0
  254. data/lib/ronin/support/network/ip_range/range.rb +249 -0
  255. data/lib/ronin/support/network/ip_range.rb +284 -0
  256. data/lib/ronin/support/network/mixin.rb +58 -0
  257. data/lib/ronin/support/network/packet.rb +27 -0
  258. data/lib/ronin/support/network/pop3/mixin.rb +113 -0
  259. data/lib/ronin/support/network/proxy.rb +602 -0
  260. data/lib/ronin/support/network/public_suffix/list.rb +339 -0
  261. data/lib/ronin/support/network/public_suffix/suffix.rb +118 -0
  262. data/lib/ronin/support/network/public_suffix/suffix_set.rb +150 -0
  263. data/lib/ronin/support/network/public_suffix.rb +41 -0
  264. data/lib/ronin/support/network/smtp/email.rb +190 -0
  265. data/lib/ronin/support/network/smtp/mixin.rb +290 -0
  266. data/lib/ronin/{extensions/meta.rb → support/network/smtp.rb} +6 -7
  267. data/lib/ronin/support/network/ssl/local_cert.rb +114 -0
  268. data/lib/ronin/support/network/ssl/local_key.rb +84 -0
  269. data/lib/ronin/support/network/ssl/mixin.rb +740 -0
  270. data/lib/ronin/{network/extensions/imap/net.rb → support/network/ssl/openssl.rb} +9 -10
  271. data/lib/ronin/support/network/ssl/proxy.rb +296 -0
  272. data/lib/ronin/support/network/ssl.rb +173 -0
  273. data/lib/ronin/support/network/tcp/mixin.rb +400 -0
  274. data/lib/ronin/support/network/tcp/proxy.rb +435 -0
  275. data/lib/ronin/support/network/tcp.rb +443 -0
  276. data/lib/ronin/support/network/telnet/mixin.rb +150 -0
  277. data/lib/ronin/support/network/telnet.rb +90 -0
  278. data/lib/ronin/support/network/tld/list.rb +266 -0
  279. data/lib/ronin/support/network/tld.rb +41 -0
  280. data/lib/ronin/support/network/tls/mixin.rb +670 -0
  281. data/lib/ronin/support/network/tls/proxy.rb +135 -0
  282. data/lib/ronin/support/network/tls.rb +53 -0
  283. data/lib/ronin/support/network/udp/mixin.rb +389 -0
  284. data/lib/ronin/support/network/udp/proxy.rb +192 -0
  285. data/lib/ronin/support/network/udp.rb +435 -0
  286. data/lib/ronin/support/network/unix/mixin.rb +273 -0
  287. data/lib/ronin/support/network.rb +37 -0
  288. data/lib/ronin/support/path.rb +136 -0
  289. data/lib/ronin/{network/extensions/dns/net.rb → support/text/core_ext/regexp.rb} +8 -9
  290. data/lib/ronin/support/text/core_ext/string.rb +46 -0
  291. data/lib/ronin/support/text/core_ext.rb +23 -0
  292. data/lib/ronin/support/text/entropy/core_ext/string.rb +45 -0
  293. data/lib/ronin/support/text/entropy/core_ext.rb +19 -0
  294. data/lib/ronin/support/text/entropy.rb +66 -0
  295. data/lib/ronin/support/text/erb/mixin.rb +44 -0
  296. data/lib/ronin/support/text/erb.rb +19 -0
  297. data/lib/ronin/support/text/homoglyph/core_ext/string.rb +108 -0
  298. data/lib/ronin/{formatting/digest.rb → support/text/homoglyph/core_ext.rb} +6 -7
  299. data/lib/ronin/{network/http/exceptions/unknown_request.rb → support/text/homoglyph/exceptions.rb} +10 -9
  300. data/lib/ronin/support/text/homoglyph/table.rb +228 -0
  301. data/lib/ronin/support/text/homoglyph.rb +142 -0
  302. data/lib/ronin/support/text/mixin.rb +31 -0
  303. data/lib/ronin/support/text/patterns/credentials.rb +75 -0
  304. data/lib/ronin/support/text/patterns/crypto.rb +67 -0
  305. data/lib/ronin/support/text/patterns/file_system.rb +93 -0
  306. data/lib/ronin/support/text/patterns/language.rb +37 -0
  307. data/lib/ronin/support/text/patterns/network/public_suffix.rb +44 -0
  308. data/lib/ronin/support/text/patterns/network.rb +140 -0
  309. data/lib/ronin/support/text/patterns/numeric.rb +52 -0
  310. data/lib/ronin/support/text/patterns/pii.rb +105 -0
  311. data/lib/ronin/support/text/patterns/source_code.rb +148 -0
  312. data/lib/ronin/support/text/patterns.rb +25 -0
  313. data/lib/ronin/support/text/random/mixin.rb +437 -0
  314. data/lib/ronin/support/text/random.rb +419 -0
  315. data/lib/ronin/support/text/typo/core_ext/string.rb +123 -0
  316. data/lib/ronin/support/text/typo/core_ext.rb +19 -0
  317. data/lib/ronin/support/text/typo/exceptions.rb +28 -0
  318. data/lib/ronin/support/text/typo/generator.rb +161 -0
  319. data/lib/ronin/support/text/typo.rb +260 -0
  320. data/lib/ronin/support/text.rb +26 -0
  321. data/lib/ronin/support/version.rb +6 -7
  322. data/lib/ronin/support.rb +20 -15
  323. data/ronin-support.gemspec +3 -1
  324. metadata +462 -369
  325. data/.gemtest +0 -0
  326. data/lib/ronin/binary/hexdump/parser.rb +0 -403
  327. data/lib/ronin/binary/struct.rb +0 -567
  328. data/lib/ronin/binary/template.rb +0 -454
  329. data/lib/ronin/extensions/ip_addr.rb +0 -217
  330. data/lib/ronin/extensions/meta/object.rb +0 -24
  331. data/lib/ronin/extensions/regexp.rb +0 -157
  332. data/lib/ronin/extensions.rb +0 -29
  333. data/lib/ronin/formatting/extensions/binary/array.rb +0 -61
  334. data/lib/ronin/formatting/extensions/binary/base64.rb +0 -106
  335. data/lib/ronin/formatting/extensions/binary/file.rb +0 -77
  336. data/lib/ronin/formatting/extensions/binary/float.rb +0 -65
  337. data/lib/ronin/formatting/extensions/binary/integer.rb +0 -180
  338. data/lib/ronin/formatting/extensions/binary/string.rb +0 -345
  339. data/lib/ronin/formatting/extensions/binary.rb +0 -26
  340. data/lib/ronin/formatting/extensions/digest/file.rb +0 -129
  341. data/lib/ronin/formatting/extensions/digest/string.rb +0 -86
  342. data/lib/ronin/formatting/extensions/digest.rb +0 -21
  343. data/lib/ronin/formatting/extensions/html/integer.rb +0 -142
  344. data/lib/ronin/formatting/extensions/html/string.rb +0 -194
  345. data/lib/ronin/formatting/extensions/html.rb +0 -21
  346. data/lib/ronin/formatting/extensions/http/integer.rb +0 -69
  347. data/lib/ronin/formatting/extensions/http/string.rb +0 -110
  348. data/lib/ronin/formatting/extensions/http.rb +0 -21
  349. data/lib/ronin/formatting/extensions/sql/string.rb +0 -128
  350. data/lib/ronin/formatting/extensions/sql.rb +0 -20
  351. data/lib/ronin/formatting/extensions/text/array.rb +0 -137
  352. data/lib/ronin/formatting/extensions/text/string.rb +0 -297
  353. data/lib/ronin/formatting/extensions.rb +0 -24
  354. data/lib/ronin/formatting/text.rb +0 -20
  355. data/lib/ronin/formatting.rb +0 -25
  356. data/lib/ronin/fuzzing/extensions/string.rb +0 -209
  357. data/lib/ronin/fuzzing/fuzzer.rb +0 -110
  358. data/lib/ronin/fuzzing/fuzzing.rb +0 -360
  359. data/lib/ronin/fuzzing/mutator.rb +0 -161
  360. data/lib/ronin/fuzzing/repeater.rb +0 -81
  361. data/lib/ronin/fuzzing/template.rb +0 -133
  362. data/lib/ronin/fuzzing.rb +0 -21
  363. data/lib/ronin/mixin.rb +0 -89
  364. data/lib/ronin/network/dns.rb +0 -201
  365. data/lib/ronin/network/esmtp.rb +0 -113
  366. data/lib/ronin/network/extensions/dns.rb +0 -20
  367. data/lib/ronin/network/extensions/esmtp.rb +0 -20
  368. data/lib/ronin/network/extensions/http/uri/http.rb +0 -228
  369. data/lib/ronin/network/extensions/http.rb +0 -21
  370. data/lib/ronin/network/extensions/imap.rb +0 -20
  371. data/lib/ronin/network/extensions/pop3/net.rb +0 -24
  372. data/lib/ronin/network/extensions/pop3.rb +0 -20
  373. data/lib/ronin/network/extensions/smtp/net.rb +0 -24
  374. data/lib/ronin/network/extensions/ssl/net.rb +0 -24
  375. data/lib/ronin/network/extensions/ssl.rb +0 -20
  376. data/lib/ronin/network/extensions/tcp/net.rb +0 -24
  377. data/lib/ronin/network/extensions/tcp.rb +0 -20
  378. data/lib/ronin/network/extensions/telnet/net.rb +0 -24
  379. data/lib/ronin/network/extensions/telnet.rb +0 -20
  380. data/lib/ronin/network/extensions/udp/net.rb +0 -24
  381. data/lib/ronin/network/extensions/udp.rb +0 -20
  382. data/lib/ronin/network/extensions.rb +0 -29
  383. data/lib/ronin/network/ftp.rb +0 -149
  384. data/lib/ronin/network/http/exceptions.rb +0 -20
  385. data/lib/ronin/network/http/http.rb +0 -1127
  386. data/lib/ronin/network/http/proxy.rb +0 -330
  387. data/lib/ronin/network/http.rb +0 -22
  388. data/lib/ronin/network/imap.rb +0 -158
  389. data/lib/ronin/network/mixins/dns.rb +0 -55
  390. data/lib/ronin/network/mixins/esmtp.rb +0 -164
  391. data/lib/ronin/network/mixins/ftp.rb +0 -155
  392. data/lib/ronin/network/mixins/http.rb +0 -227
  393. data/lib/ronin/network/mixins/imap.rb +0 -156
  394. data/lib/ronin/network/mixins/mixin.rb +0 -58
  395. data/lib/ronin/network/mixins/pop3.rb +0 -149
  396. data/lib/ronin/network/mixins/smtp.rb +0 -159
  397. data/lib/ronin/network/mixins/ssl.rb +0 -148
  398. data/lib/ronin/network/mixins/tcp.rb +0 -368
  399. data/lib/ronin/network/mixins/telnet.rb +0 -208
  400. data/lib/ronin/network/mixins/udp.rb +0 -381
  401. data/lib/ronin/network/mixins/unix.rb +0 -279
  402. data/lib/ronin/network/mixins.rb +0 -29
  403. data/lib/ronin/network/network.rb +0 -45
  404. data/lib/ronin/network/pop3.rb +0 -124
  405. data/lib/ronin/network/proxy.rb +0 -578
  406. data/lib/ronin/network/smtp/email.rb +0 -174
  407. data/lib/ronin/network/smtp/smtp.rb +0 -230
  408. data/lib/ronin/network/smtp.rb +0 -22
  409. data/lib/ronin/network/ssl.rb +0 -186
  410. data/lib/ronin/network/tcp/proxy.rb +0 -417
  411. data/lib/ronin/network/tcp/tcp.rb +0 -443
  412. data/lib/ronin/network/tcp.rb +0 -21
  413. data/lib/ronin/network/telnet.rb +0 -264
  414. data/lib/ronin/network/udp/proxy.rb +0 -191
  415. data/lib/ronin/network/udp/udp.rb +0 -450
  416. data/lib/ronin/network/udp.rb +0 -21
  417. data/lib/ronin/network/unix.rb +0 -286
  418. data/lib/ronin/network.rb +0 -31
  419. data/lib/ronin/path.rb +0 -137
  420. data/lib/ronin/spec/ui/output.rb +0 -22
  421. data/lib/ronin/support/inflector.rb +0 -92
  422. data/lib/ronin/support/support.rb +0 -42
  423. data/lib/ronin/templates/erb.rb +0 -78
  424. data/lib/ronin/templates/template.rb +0 -169
  425. data/lib/ronin/templates.rb +0 -21
  426. data/lib/ronin/ui/output/helpers.rb +0 -296
  427. data/lib/ronin/ui/output/output.rb +0 -146
  428. data/lib/ronin/ui/output/terminal/color.rb +0 -124
  429. data/lib/ronin/ui/output/terminal/raw.rb +0 -103
  430. data/lib/ronin/ui/output/terminal.rb +0 -21
  431. data/lib/ronin/ui/output.rb +0 -21
  432. data/lib/ronin/ui/shell.rb +0 -286
  433. data/lib/ronin/wordlist.rb +0 -287
  434. data/spec/binary/hexdump/helpers/hexdumps/ascii.bin +0 -0
  435. data/spec/binary/hexdump/helpers/hexdumps/hexdump_decimal_shorts.txt +0 -17
  436. data/spec/binary/hexdump/helpers/hexdumps/hexdump_hex_bytes.txt +0 -17
  437. data/spec/binary/hexdump/helpers/hexdumps/hexdump_hex_shorts.txt +0 -17
  438. data/spec/binary/hexdump/helpers/hexdumps/hexdump_octal_bytes.txt +0 -17
  439. data/spec/binary/hexdump/helpers/hexdumps/hexdump_octal_shorts.txt +0 -17
  440. data/spec/binary/hexdump/helpers/hexdumps/hexdump_repeated.txt +0 -6
  441. data/spec/binary/hexdump/helpers/hexdumps/od_decimal_bytes.txt +0 -17
  442. data/spec/binary/hexdump/helpers/hexdumps/od_decimal_ints.txt +0 -17
  443. data/spec/binary/hexdump/helpers/hexdumps/od_decimal_quads.txt +0 -17
  444. data/spec/binary/hexdump/helpers/hexdumps/od_decimal_shorts.txt +0 -17
  445. data/spec/binary/hexdump/helpers/hexdumps/od_doubles.txt +0 -17
  446. data/spec/binary/hexdump/helpers/hexdumps/od_floats.txt +0 -17
  447. data/spec/binary/hexdump/helpers/hexdumps/od_hex_bytes.txt +0 -17
  448. data/spec/binary/hexdump/helpers/hexdumps/od_hex_ints.txt +0 -17
  449. data/spec/binary/hexdump/helpers/hexdumps/od_hex_quads.txt +0 -17
  450. data/spec/binary/hexdump/helpers/hexdumps/od_hex_shorts.txt +0 -17
  451. data/spec/binary/hexdump/helpers/hexdumps/od_named_chars.txt +0 -17
  452. data/spec/binary/hexdump/helpers/hexdumps/od_octal_bytes.txt +0 -17
  453. data/spec/binary/hexdump/helpers/hexdumps/od_octal_ints.txt +0 -17
  454. data/spec/binary/hexdump/helpers/hexdumps/od_octal_quads.txt +0 -17
  455. data/spec/binary/hexdump/helpers/hexdumps/od_octal_shorts.txt +0 -17
  456. data/spec/binary/hexdump/helpers/hexdumps/od_repeated.txt +0 -6
  457. data/spec/binary/hexdump/helpers/hexdumps/repeated.bin +0 -1
  458. data/spec/binary/hexdump/helpers/hexdumps.rb +0 -13
  459. data/spec/binary/hexdump/parser_spec.rb +0 -302
  460. data/spec/binary/struct_spec.rb +0 -496
  461. data/spec/binary/template_spec.rb +0 -414
  462. data/spec/extensions/enumerable_spec.rb +0 -24
  463. data/spec/extensions/file_spec.rb +0 -63
  464. data/spec/extensions/ip_addr_spec.rb +0 -203
  465. data/spec/extensions/kernel_spec.rb +0 -30
  466. data/spec/extensions/regexp_spec.rb +0 -482
  467. data/spec/extensions/resolv_spec.rb +0 -18
  468. data/spec/extensions/string_spec.rb +0 -179
  469. data/spec/formatting/binary/array_spec.rb +0 -26
  470. data/spec/formatting/binary/base64_spec.rb +0 -50
  471. data/spec/formatting/binary/float_spec.rb +0 -34
  472. data/spec/formatting/binary/integer_spec.rb +0 -166
  473. data/spec/formatting/binary/string_spec.rb +0 -197
  474. data/spec/formatting/digest/string_spec.rb +0 -82
  475. data/spec/formatting/html/integer_spec.rb +0 -66
  476. data/spec/formatting/html/string_spec.rb +0 -103
  477. data/spec/formatting/http/integer_spec.rb +0 -42
  478. data/spec/formatting/http/string_spec.rb +0 -76
  479. data/spec/formatting/sql/string_spec.rb +0 -75
  480. data/spec/formatting/text/array_spec.rb +0 -105
  481. data/spec/formatting/text/string_spec.rb +0 -162
  482. data/spec/fuzzing/extensions/string_spec.rb +0 -87
  483. data/spec/fuzzing/fuzzer_spec.rb +0 -109
  484. data/spec/fuzzing/fuzzing_spec.rb +0 -24
  485. data/spec/fuzzing/mutator_spec.rb +0 -112
  486. data/spec/fuzzing/repeater_spec.rb +0 -57
  487. data/spec/fuzzing/template_spec.rb +0 -54
  488. data/spec/mixin_spec.rb +0 -53
  489. data/spec/network/dns_spec.rb +0 -201
  490. data/spec/network/ftp_spec.rb +0 -81
  491. data/spec/network/http/http_spec.rb +0 -466
  492. data/spec/network/http/proxy_spec.rb +0 -148
  493. data/spec/network/network_spec.rb +0 -8
  494. data/spec/network/proxy_spec.rb +0 -121
  495. data/spec/network/shared/unix_server.rb +0 -31
  496. data/spec/network/smtp/email_spec.rb +0 -100
  497. data/spec/network/ssl_spec.rb +0 -70
  498. data/spec/network/tcp/proxy_spec.rb +0 -116
  499. data/spec/network/tcp/tcp_spec.rb +0 -273
  500. data/spec/network/telnet_spec.rb +0 -67
  501. data/spec/network/udp/udp_spec.rb +0 -271
  502. data/spec/network/unix_spec.rb +0 -183
  503. data/spec/path_spec.rb +0 -86
  504. data/spec/spec_helper.rb +0 -9
  505. data/spec/support/inflector_spec.rb +0 -22
  506. data/spec/support_spec.rb +0 -8
  507. data/spec/templates/classes/example_erb.rb +0 -11
  508. data/spec/templates/classes/example_template.rb +0 -35
  509. data/spec/templates/erb_spec.rb +0 -21
  510. data/spec/templates/helpers/data/includes/_relative.erb +0 -1
  511. data/spec/templates/helpers/data/templates/example.erb +0 -1
  512. data/spec/templates/helpers/data.rb +0 -9
  513. data/spec/templates/template_spec.rb +0 -54
  514. data/spec/ui/classes/test_shell.rb +0 -22
  515. data/spec/ui/output_spec.rb +0 -32
  516. data/spec/ui/shell_spec.rb +0 -83
  517. data/spec/wordlist_spec.rb +0 -151
@@ -1,1127 +0,0 @@
1
- #
2
- # Copyright (c) 2006-2012 Hal Brodigan (postmodern.mod3 at gmail.com)
3
- #
4
- # This file is part of Ronin Support.
5
- #
6
- # Ronin Support is free software: you can redistribute it and/or modify
7
- # it under the terms of the GNU Lesser General Public License as published
8
- # by the Free Software Foundation, either version 3 of the License, or
9
- # (at your option) any later version.
10
- #
11
- # Ronin Support 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
14
- # GNU Lesser General Public License for more details.
15
- #
16
- # You should have received a copy of the GNU Lesser General Public License
17
- # along with Ronin Support. If not, see <http://www.gnu.org/licenses/>.
18
- #
19
-
20
- require 'ronin/network/http/exceptions/unknown_request'
21
- require 'ronin/network/http/proxy'
22
- require 'ronin/network/ssl'
23
-
24
- require 'uri/query_params'
25
- require 'net/http'
26
-
27
- begin
28
- require 'net/https'
29
- rescue ::LoadError
30
- $stderr.puts "WARNING: could not load 'net/https'"
31
- end
32
-
33
- module Ronin
34
- module Network
35
- #
36
- # Provides helper methods for communicating with HTTP Servers.
37
- #
38
- module HTTP
39
- #
40
- # The Ronin HTTP proxy to use.
41
- #
42
- # @return [Proxy]
43
- # The Ronin HTTP proxy.
44
- #
45
- # @note
46
- # If the `HTTP_PROXY` environment variable is specified, it will
47
- # be used as the default value.
48
- #
49
- # @see Proxy.new
50
- # @see Proxy.parse
51
- #
52
- # @api public
53
- #
54
- def self.proxy
55
- @proxy ||= if ENV['HTTP_PROXY']
56
- Proxy.parse(ENV['HTTP_PROXY'])
57
- else
58
- Proxy.new
59
- end
60
- end
61
-
62
- #
63
- # Sets the Ronin HTTP proxy to use.
64
- #
65
- # @param [Proxy, URI::HTTP, Hash, String] new_proxy
66
- # The new proxy information to use.
67
- #
68
- # @return [Proxy]
69
- # The new proxy.
70
- #
71
- # @raise [ArgumentError]
72
- # The given proxy information was not a {Proxy}, `URI::HTTP`,
73
- # `Hash` or {String}.
74
- #
75
- # @api public
76
- #
77
- def self.proxy=(new_proxy)
78
- @proxy = Proxy.create(new_proxy)
79
- end
80
-
81
- #
82
- # The default Ronin HTTP User-Agent string.
83
- #
84
- # @return [String, nil]
85
- # The default Ronin HTTP User-Agent.
86
- #
87
- # @api public
88
- #
89
- def self.user_agent
90
- @user_agent ||= nil
91
- end
92
-
93
- #
94
- # Sets the default Ronin HTTP User-Agent string.
95
- #
96
- # @param [String] agent
97
- # The new User-Agent string to use.
98
- #
99
- # @api public
100
- #
101
- def self.user_agent=(agent)
102
- @user_agent = agent
103
- end
104
-
105
- #
106
- # Expands the URL into options.
107
- #
108
- # @param [URI::HTTP, String] url
109
- # The URL to expand.
110
- #
111
- # @return [Hash{Symbol => Object}]
112
- # The options for the URL.
113
- #
114
- # @api private
115
- #
116
- def self.expand_url(url)
117
- new_options = {}
118
-
119
- url = case url
120
- when URI
121
- url
122
- when Hash
123
- URI::HTTP.build(url)
124
- else
125
- URI(url.to_s)
126
- end
127
-
128
- new_options[:ssl] = {} if url.scheme == 'https'
129
-
130
- new_options[:host] = url.host
131
- new_options[:port] = url.port
132
-
133
- new_options[:user] = url.user if url.user
134
- new_options[:password] = url.password if url.password
135
-
136
- new_options[:path] = unless url.path.empty?
137
- url.path
138
- else
139
- '/'
140
- end
141
- new_options[:path] += "?#{url.query}" if url.query
142
-
143
- return new_options
144
- end
145
-
146
- #
147
- # Expands the given HTTP options.
148
- #
149
- # @param [Hash] options
150
- # HTTP options.
151
- #
152
- # @option options [String, URI::HTTP, URI::HTTPS] :url
153
- # The URL to request.
154
- #
155
- # @option options [String] :host
156
- # The host to connect to.
157
- #
158
- # @option options [String] :port (Net::HTTP.default_port)
159
- # The port to connect to.
160
- #
161
- # @option options [String] :user
162
- # The user to authenticate as.
163
- #
164
- # @option options [String] :password
165
- # The password to authenticate with.
166
- #
167
- # @option options [String] :path ('/')
168
- # The path to request.
169
- #
170
- # @option options [String, Hash] :proxy (HTTP.proxy)
171
- # The Proxy information.
172
- #
173
- # @return [Hash]
174
- # The expanded version of options.
175
- #
176
- # @api private
177
- #
178
- def self.expand_options(options={})
179
- new_options = options.dup
180
-
181
- new_options[:port] ||= Net::HTTP.default_port
182
- new_options[:path] ||= '/'
183
-
184
- if new_options[:ssl] == true
185
- new_options[:ssl] = {}
186
- end
187
-
188
- if (url = new_options.delete(:url))
189
- new_options.merge!(HTTP.expand_url(url))
190
- end
191
-
192
- new_options[:proxy] = if new_options.has_key?(:proxy)
193
- HTTP::Proxy.create(new_options[:proxy])
194
- else
195
- HTTP.proxy
196
- end
197
-
198
- return new_options
199
- end
200
-
201
- #
202
- # Converts an underscored, dashed, lowercase or uppercase HTTP header
203
- # name to the standard camel-case HTTP header name.
204
- #
205
- # @param [Symbol, String] name
206
- # The unformatted HTTP header name.
207
- #
208
- # @return [String]
209
- # The camel-case HTTP header name.
210
- #
211
- # @api private
212
- #
213
- def self.header_name(name)
214
- words = name.to_s.split(/[\s+_-]/)
215
-
216
- words.each { |word| word.capitalize! }
217
- return words.join('-')
218
- end
219
-
220
- #
221
- # Converts underscored, dashed, lowercase and uppercase HTTP headers
222
- # to standard camel-cased HTTP headers.
223
- #
224
- # @param [Hash{Symbol,String => String}] options
225
- # Ronin HTTP headers.
226
- #
227
- # @return [Hash]
228
- # The camel-cased HTTP headers created from the given options.
229
- #
230
- # @api private
231
- #
232
- def self.headers(options={})
233
- headers = {}
234
-
235
- if user_agent
236
- headers['User-Agent'] = user_agent
237
- end
238
-
239
- if options
240
- options.each do |name,value|
241
- headers[HTTP.header_name(name)] = value.to_s
242
- end
243
- end
244
-
245
- return headers
246
- end
247
-
248
- #
249
- # Creates a specific type of HTTP request object.
250
- #
251
- # @param [Hash] options
252
- # The HTTP options for the request.
253
- #
254
- # @option options [Symbol, String] :method
255
- # The HTTP method to use for the request.
256
- #
257
- # @option options [String] :path ('/')
258
- # The path to request.
259
- #
260
- # @option options [String] :query
261
- # The query-string to append to the request path.
262
- #
263
- # @option options [String] :query_params
264
- # The query-params to append to the request path.
265
- #
266
- # @option options [String] :body
267
- # The body of the request.
268
- #
269
- # @option options [Hash, String] :form_data
270
- # The form data that may be sent in the body of the request.
271
- #
272
- # @option options [String] :user
273
- # The user to authenticate as.
274
- #
275
- # @option options [String] :password
276
- # The password to authenticate with.
277
- #
278
- # @option options [Hash{Symbol,String => String}] :headers
279
- # Additional HTTP headers to use for the request.
280
- #
281
- # @return [HTTP::Request]
282
- # The new HTTP Request object.
283
- #
284
- # @raise [ArgumentError]
285
- # The `:method` option must be specified.
286
- #
287
- # @raise [UnknownRequest]
288
- # The `:method` option did not match a known Net::HTTP request
289
- # class.
290
- #
291
- # @see HTTP.expand_options
292
- #
293
- # @api private
294
- #
295
- def self.request(options={})
296
- unless options[:method]
297
- raise(ArgumentError,"the :method option must be specified")
298
- end
299
-
300
- name = options[:method].to_s.capitalize
301
-
302
- unless Net::HTTP.const_defined?(name)
303
- raise(UnknownRequest,"unknown HTTP request type #{name.dump}")
304
- end
305
-
306
- headers = headers(options[:headers])
307
- path = (options[:path] || '/').to_s
308
- query = if options[:query]
309
- URI.escape(options[:query])
310
- elsif options[:query_params]
311
- URI::QueryParams.dump(options[:query_params])
312
- end
313
-
314
- if query
315
- # append the query-string onto the path
316
- path += if path.include?('?')
317
- "&#{query}"
318
- else
319
- "?#{query}"
320
- end
321
- end
322
-
323
- request = Net::HTTP.const_get(name).new(path,headers)
324
-
325
- if request.request_body_permitted?
326
- if options[:form_data]
327
- request.set_form_data(options[:form_data])
328
- elsif options[:body]
329
- request.body = options[:body]
330
- end
331
- end
332
-
333
- if options[:user]
334
- user = options[:user].to_s
335
- password = if options[:password]
336
- options[:password].to_s
337
- end
338
-
339
- request.basic_auth(user,password)
340
- end
341
-
342
- return request
343
- end
344
-
345
- #
346
- # Starts a HTTP connection with the server.
347
- #
348
- # @param [Hash] options
349
- # Additional options
350
- #
351
- # @option options [String, URI::HTTP] :url
352
- # The full URL to request.
353
- #
354
- # @option options [String] :host
355
- # The host the HTTP server is running on.
356
- #
357
- # @option options [Integer] :port (Net::HTTP.default_port)
358
- # The port the HTTP server is listening on.
359
- #
360
- # @option options [String, Hash] :proxy (HTTP.proxy)
361
- # A Hash of proxy settings to use when connecting to the HTTP server.
362
- #
363
- # @option options [String] :user
364
- # The user to authenticate with when connecting to the HTTP server.
365
- #
366
- # @option options [String] :password
367
- # The password to authenticate with when connecting to the HTTP server.
368
- #
369
- # @option options [Boolean, Hash] :ssl
370
- # Enables SSL for the HTTP connection.
371
- #
372
- # @option :ssl [Symbol] :verify
373
- # Specifies the SSL certificate verification mode.
374
- #
375
- # @yield [http]
376
- # If a block is given, it will be passed the newly created HTTP
377
- # session object.
378
- #
379
- # @yieldparam [Net::HTTP] http
380
- # The newly created HTTP session.
381
- #
382
- # @return [Net::HTTP]
383
- # The HTTP session object.
384
- #
385
- # @api public
386
- #
387
- def http_connect(options={},&block)
388
- options = HTTP.expand_options(options)
389
-
390
- host = options[:host].to_s
391
- port = options[:port]
392
- proxy = options[:proxy]
393
- proxy_host = if (proxy && proxy[:host])
394
- proxy[:host].to_s
395
- end
396
-
397
- http = Net::HTTP::Proxy(
398
- proxy_host,
399
- proxy[:port],
400
- proxy[:user],
401
- proxy[:password]
402
- ).new(host,port)
403
-
404
- if options[:ssl]
405
- http.use_ssl = true
406
- http.verify_mode = SSL::VERIFY[options[:ssl][:verify]]
407
- end
408
-
409
- http.start()
410
-
411
- if block
412
- if block.arity == 2
413
- block.call(http,options)
414
- else
415
- block.call(http)
416
- end
417
- end
418
-
419
- return http
420
- end
421
-
422
- #
423
- # Creates a new temporary HTTP session with the server.
424
- #
425
- # @param [Hash] options
426
- # Additional options
427
- #
428
- # @option options [String, URI::HTTP] :url
429
- # The full URL to request.
430
- #
431
- # @option options [String] :host
432
- # The host the HTTP server is running on.
433
- #
434
- # @option options [Integer] :port (Net::HTTP.default_port)
435
- # The port the HTTP server is listening on.
436
- #
437
- # @option options [String] :user
438
- # The user to authenticate with when connecting to the HTTP server.
439
- #
440
- # @option options [String] :password
441
- # The password to authenticate with when connecting to the HTTP server.
442
- #
443
- # @option options [String, Hash] :proxy (HTTP.proxy)
444
- # A Hash of proxy settings to use when connecting to the HTTP server.
445
- #
446
- # @option options [Boolean, Hash] :ssl
447
- # Enables SSL for the HTTP connection.
448
- #
449
- # @option :ssl [Symbol] :verify
450
- # Specifies the SSL certificate verification mode.
451
- #
452
- # @yield [http]
453
- # If a block is given, it will be passed the newly created HTTP
454
- # session object.
455
- #
456
- # @yieldparam [Net::HTTP] http
457
- # The newly created HTTP session.
458
- #
459
- # @return [nil]
460
- #
461
- # @see #http_connect
462
- #
463
- # @api public
464
- #
465
- def http_session(options={},&block)
466
- http_connect(options) do |http,expanded_options|
467
- if block
468
- if block.arity == 2
469
- block.call(http,expanded_options)
470
- else
471
- block.call(http)
472
- end
473
- end
474
-
475
- http.finish
476
- end
477
-
478
- return nil
479
- end
480
-
481
- #
482
- # Connects to the HTTP server and sends an HTTP Request.
483
- #
484
- # @param [Hash] options
485
- # Additional options.
486
- #
487
- # @option options [Symbol, String] :method
488
- # The HTTP method to use in the request.
489
- #
490
- # @option options [String] :path
491
- # The path to request from the HTTP server.
492
- #
493
- # @option options [Hash] :headers
494
- # The Hash of the HTTP headers to send with the request.
495
- # May contain either Strings or Symbols, lower-case or camel-case keys.
496
- #
497
- # @option options [String] :body
498
- # The body of the request.
499
- #
500
- # @option options [Hash, String] :form_data
501
- # The form data that may be sent in the body of the request.
502
- #
503
- # @yield [request, (options)]
504
- # If a block is given, it will be passed the HTTP request object.
505
- # If the block has an arity of 2, it will also be passed the expanded
506
- # version of the given _options_.
507
- #
508
- # @yieldparam [Net::HTTP::Request] request
509
- # The HTTP request object to use in the request.
510
- #
511
- # @yieldparam [Hash] options
512
- # The expanded version of the given _options_.
513
- #
514
- # @return [Net::HTTP::Response]
515
- # The response of the HTTP request.
516
- #
517
- # @see #http_session
518
- #
519
- # @api public
520
- #
521
- def http_request(options={},&block)
522
- response = nil
523
-
524
- http_session(options) do |http,expanded_options|
525
- req = HTTP.request(expanded_options)
526
-
527
- if block
528
- if block.arity == 2
529
- block.call(req,expanded_options)
530
- else
531
- block.call(req)
532
- end
533
- end
534
-
535
- response = http.request(req)
536
- end
537
-
538
- return response
539
- end
540
-
541
- #
542
- # Returns the Status Code of the Response.
543
- #
544
- # @param [Hash] options
545
- # Additional options.
546
- #
547
- # @option options [Symbol, String] :method (:head)
548
- # The method to use for the request.
549
- #
550
- # @return [Integer]
551
- # The HTTP Response Status.
552
- #
553
- # @see #http_request
554
- #
555
- # @since 0.2.0
556
- #
557
- # @api public
558
- #
559
- def http_status(options={})
560
- options = {:method => :head}.merge(options)
561
-
562
- return http_request(options).code.to_i
563
- end
564
-
565
- #
566
- # Checks if the response has an HTTP OK status code.
567
- #
568
- # @param [Hash] options
569
- # Additional options.
570
- #
571
- # @option options [Symbol, String] :method (:head)
572
- # The method to use for the request.
573
- #
574
- # @return [Boolean]
575
- # Specifies whether the response had an HTTP OK status code or not.
576
- #
577
- # @see #http_status
578
- #
579
- # @api public
580
- #
581
- def http_ok?(options={})
582
- http_status(options) == 200
583
- end
584
-
585
- #
586
- # Sends a HTTP Head request and returns the HTTP Server header.
587
- #
588
- # @param [Hash] options
589
- # Additional options.
590
- #
591
- # @option options [Symbol, String] :method (:head)
592
- # The method to use for the request.
593
- #
594
- # @return [String]
595
- # The HTTP `Server` header.
596
- #
597
- # @see #http_request
598
- #
599
- # @api public
600
- #
601
- def http_server(options={})
602
- options = {:method => :head}.merge(options)
603
-
604
- return http_request(options)['server']
605
- end
606
-
607
- #
608
- # Sends an HTTP Head request and returns the HTTP X-Powered-By header.
609
- #
610
- # @param [Hash] options
611
- # Additional options.
612
- #
613
- # @option options [Symbol, String] :method (:get)
614
- # The method to use for the request.
615
- #
616
- # @return [String]
617
- # The HTTP `X-Powered-By` header.
618
- #
619
- # @see #http_request
620
- #
621
- # @api public
622
- #
623
- def http_powered_by(options={})
624
- options = {:method => :get}.merge(options)
625
-
626
- return http_request(options)['x-powered-by']
627
- end
628
-
629
- #
630
- # Performs an HTTP Copy request.
631
- #
632
- # @param [Hash] options
633
- # Additional options.
634
- #
635
- # @yield [response]
636
- # If a block is given, it will be passed the response received
637
- # from the request.
638
- #
639
- # @yieldparam [Net::HTTP::Response] response
640
- # The HTTP response object.
641
- #
642
- # @return [Net::HTTP::Response]
643
- # The response of the HTTP request.
644
- #
645
- # @see #http_request
646
- #
647
- # @api public
648
- #
649
- def http_copy(options={})
650
- response = http_request(options.merge(:method => :copy))
651
-
652
- yield response if block_given?
653
- return response
654
- end
655
-
656
- #
657
- # Performs an HTTP Delete request.
658
- #
659
- # @param [Hash] options
660
- # Additional options.
661
- #
662
- # @yield [response]
663
- # If a block is given, it will be passed the response received from
664
- # the request.
665
- #
666
- # @yieldparam [Net::HTTP::Response] response
667
- # The HTTP response object.
668
- #
669
- # @return [Net::HTTP::Response]
670
- # The response of the HTTP request.
671
- #
672
- # @see #http_request
673
- #
674
- # @api public
675
- #
676
- def http_delete(options={},&block)
677
- original_headers = options[:headers]
678
-
679
- # set the HTTP Depth header
680
- options[:headers] = {:depth => 'Infinity'}
681
-
682
- if original_headers
683
- options[:header].merge!(original_headers)
684
- end
685
-
686
- response = http_request(options.merge(:method => :delete))
687
-
688
- yield response if block_given?
689
- return response
690
- end
691
-
692
- #
693
- # Performs an HTTP Get request.
694
- #
695
- # @param [Hash] options
696
- # Additional options.
697
- #
698
- # @yield [response]
699
- # If a block is given, it will be passed the response received from
700
- # the request.
701
- #
702
- # @yieldparam [Net::HTTP::Response] response
703
- # The HTTP response object.
704
- #
705
- # @return [Net::HTTP::Response]
706
- # The response of the HTTP request.
707
- #
708
- # @see #http_request
709
- #
710
- # @api public
711
- #
712
- def http_get(options={},&block)
713
- response = http_request(options.merge(:method => :get))
714
-
715
- yield response if block_given?
716
- return response
717
- end
718
-
719
- #
720
- # Performs an HTTP Get request and returns the Response Headers.
721
- #
722
- # @param [Hash] options
723
- # Additional options.
724
- #
725
- # @return [Hash{String => Array<String>}]
726
- # The Headers of the HTTP response.
727
- #
728
- # @see #http_get
729
- #
730
- # @since 0.2.0
731
- #
732
- # @api public
733
- #
734
- def http_get_headers(options={})
735
- headers = {}
736
-
737
- http_get(options).each_header do |name,value|
738
- headers[HTTP.header_name(name)] = value
739
- end
740
-
741
- return headers
742
- end
743
-
744
- #
745
- # Performs an HTTP Get request and returns the Respond Body.
746
- #
747
- # @param [Hash] options
748
- # Additional options.
749
- #
750
- # @return [String]
751
- # The body of the HTTP response.
752
- #
753
- # @see #http_get
754
- #
755
- # @api public
756
- #
757
- def http_get_body(options={})
758
- http_get(options).body
759
- end
760
-
761
- #
762
- # Performs an HTTP Head request.
763
- #
764
- # @param [Hash] options
765
- # Additional options.
766
- #
767
- # @yield [response]
768
- # If a block is given, it will be passed the response received from
769
- # the request.
770
- #
771
- # @yieldparam [Net::HTTP::Response] response
772
- # The HTTP response object.
773
- #
774
- # @return [Net::HTTP::Response]
775
- # The response of the HTTP request.
776
- #
777
- # @see #http_request
778
- #
779
- # @api public
780
- #
781
- def http_head(options={},&block)
782
- response = http_request(options.merge(:method => :head))
783
-
784
- yield response if block_given?
785
- return response
786
- end
787
-
788
- #
789
- # Performs an HTTP Lock request.
790
- #
791
- # @param [Hash] options
792
- # Additional options.
793
- #
794
- # @yield [response]
795
- # If a block is given, it will be passed the response received from
796
- # the request.
797
- #
798
- # @yieldparam [Net::HTTP::Response] response
799
- # The HTTP response object.
800
- #
801
- # @return [Net::HTTP::Response]
802
- # The response of the HTTP request.
803
- #
804
- # @see #http_request
805
- #
806
- # @api public
807
- #
808
- def http_lock(options={},&block)
809
- response = http_request(options.merge(:method => :lock))
810
-
811
- yield response if block_given?
812
- return response
813
- end
814
-
815
- #
816
- # Performs an HTTP Mkcol request.
817
- #
818
- # @param [Hash] options
819
- # Additional options.
820
- #
821
- # @yield [response]
822
- # If a block is given, it will be passed the response received from
823
- # the request.
824
- #
825
- # @yieldparam [Net::HTTP::Response] response
826
- # The HTTP response object.
827
- #
828
- # @return [Net::HTTP::Response]
829
- # The response of the HTTP request.
830
- #
831
- # @see #http_request
832
- #
833
- # @api public
834
- #
835
- def http_mkcol(options={},&block)
836
- response = http_request(options.merge(:method => :mkcol))
837
-
838
- yield response if block_given?
839
- return response
840
- end
841
-
842
- #
843
- # Performs an HTTP Move request.
844
- #
845
- # @param [Hash] options
846
- # Additional options.
847
- #
848
- # @yield [response]
849
- # If a block is given, it will be passed the response received from
850
- # the request.
851
- #
852
- # @yieldparam [Net::HTTP::Response] response
853
- # The HTTP response object.
854
- #
855
- # @return [Net::HTTP::Response]
856
- # The response of the HTTP request.
857
- #
858
- # @see #http_request
859
- #
860
- # @api public
861
- #
862
- def http_move(options={},&block)
863
- response = http_request(options.merge(:method => :move))
864
-
865
- yield response if block_given?
866
- return response
867
- end
868
-
869
- #
870
- # Performs an HTTP Options request.
871
- #
872
- # @param [Hash] options
873
- # Additional options.
874
- #
875
- # @yield [response]
876
- # If a block is given, it will be passed the response received from
877
- # the request.
878
- #
879
- # @yieldparam [Net::HTTP::Response] response
880
- # The HTTP response object.
881
- #
882
- # @return [Net::HTTP::Response]
883
- # The response of the HTTP request.
884
- #
885
- # @see #http_request
886
- #
887
- # @api public
888
- #
889
- def http_options(options={},&block)
890
- response = http_request(options.merge(:method => :options))
891
-
892
- yield response if block_given?
893
- return response
894
- end
895
-
896
- #
897
- # Performs an HTTP Post request.
898
- #
899
- # @param [Hash] options
900
- # Additional options.
901
- #
902
- # @option options [Hash, String] :form_data
903
- # The form data to send with the HTTP Post request.
904
- #
905
- # @yield [response]
906
- # If a block is given, it will be passed the response received from
907
- # the request.
908
- #
909
- # @yieldparam [Net::HTTP::Response] response
910
- # The HTTP response object.
911
- #
912
- # @return [Net::HTTP::Response]
913
- # The response of the HTTP request.
914
- #
915
- # @see #http_request
916
- #
917
- # @api public
918
- #
919
- def http_post(options={},&block)
920
- response = http_request(options.merge(:method => :post))
921
-
922
- yield response if block_given?
923
- return response
924
- end
925
-
926
- #
927
- # Performs an HTTP Post request and returns the Response Headers.
928
- #
929
- # @param [Hash] options
930
- # Additional options.
931
- #
932
- # @option options [Hash, String] :form_data
933
- # The form data to send with the HTTP Post request.
934
- #
935
- # @return [Hash{String => Array<String>}]
936
- # The headers of the HTTP response.
937
- #
938
- # @see #http_post
939
- #
940
- # @since 0.2.0
941
- #
942
- # @api public
943
- #
944
- def http_post_headers(options={})
945
- headers = {}
946
-
947
- http_post(options).each_header do |name,value|
948
- headers[HTTP.header_name(name)] = value
949
- end
950
-
951
- return headers
952
- end
953
-
954
- #
955
- # Performs an HTTP Post request and returns the Response Body.
956
- #
957
- # @param [Hash] options
958
- # Additional options.
959
- #
960
- # @option options [Hash, String] :form_data
961
- # The form data to send with the HTTP Post request.
962
- #
963
- # @return [String]
964
- # The body of the HTTP response.
965
- #
966
- # @see #http_post
967
- #
968
- # @api public
969
- #
970
- def http_post_body(options={})
971
- http_post(options).body
972
- end
973
-
974
- #
975
- # Performs an HTTP PUT request.
976
- #
977
- # @param [Hash] options
978
- # Additional options.
979
- #
980
- # @option options [String] :body
981
- # The body for the request.
982
- #
983
- # @option options [Hash, String] :form_data
984
- # The form data to send with the HTTP PUT request.
985
- #
986
- # @yield [response]
987
- # If a block is given, it will be passed the response received from
988
- # the request.
989
- #
990
- # @yieldparam [Net::HTTP::Response] response
991
- # The HTTP response object.
992
- #
993
- # @return [Net::HTTP::Response]
994
- # The response of the HTTP request.
995
- #
996
- # @see #http_request
997
- #
998
- # @since 0.4.0
999
- #
1000
- # @api public
1001
- #
1002
- def http_put(options={})
1003
- response = http_request(options.merge(:method => :put))
1004
-
1005
- yield response if block_given?
1006
- return response
1007
- end
1008
-
1009
- #
1010
- # Performs an HTTP Propfind request.
1011
- #
1012
- # @param [Hash] options
1013
- # Additional options.
1014
- #
1015
- # @yield [response]
1016
- # If a block is given, it will be passed the response received from
1017
- # the request.
1018
- #
1019
- # @yieldparam [Net::HTTP::Response] response
1020
- # The HTTP response object.
1021
- #
1022
- # @return [Net::HTTP::Response]
1023
- # The response of the HTTP request.
1024
- #
1025
- # @see #http_request
1026
- #
1027
- # @api public
1028
- #
1029
- def http_prop_find(options={},&block)
1030
- original_headers = options[:headers]
1031
-
1032
- # set the HTTP Depth header
1033
- options[:headers] = {:depth => '0'}
1034
-
1035
- if original_headers
1036
- options[:header].merge!(original_headers)
1037
- end
1038
-
1039
- response = http_request(options.merge(:method => :propfind))
1040
-
1041
- yield response if block_given?
1042
- return response
1043
- end
1044
-
1045
- #
1046
- # Performs an HTTP Proppatch request.
1047
- #
1048
- # @param [Hash] options
1049
- # Additional options.
1050
- #
1051
- # @yield [response]
1052
- # If a block is given, it will be passed the response received from
1053
- # the request.
1054
- #
1055
- # @yieldparam [Net::HTTP::Response] response
1056
- # The HTTP response object.
1057
- #
1058
- # @return [Net::HTTP::Response]
1059
- # The response of the HTTP request.
1060
- #
1061
- # @see #http_request
1062
- #
1063
- # @api public
1064
- #
1065
- def http_prop_patch(options={},&block)
1066
- response = http_request(options.merge(:method => :proppatch))
1067
-
1068
- yield response if block_given?
1069
- return response
1070
- end
1071
-
1072
- #
1073
- # Performs an HTTP Trace request.
1074
- #
1075
- # @param [Hash] options
1076
- # Additional options.
1077
- #
1078
- # @yield [response]
1079
- # If a block is given, it will be passed the response received from
1080
- # the request.
1081
- #
1082
- # @yieldparam [Net::HTTP::Response] response
1083
- # The HTTP response object.
1084
- #
1085
- # @return [Net::HTTP::Response]
1086
- # The response of the HTTP request.
1087
- #
1088
- # @see #http_request
1089
- #
1090
- # @api public
1091
- #
1092
- def http_trace(options={},&block)
1093
- response = http_request(options.merge(:method => :trace))
1094
-
1095
- yield response if block_given?
1096
- return response
1097
- end
1098
-
1099
- #
1100
- # Performs an HTTP Unlock request.
1101
- #
1102
- # @param [Hash] options
1103
- # Additional options.
1104
- #
1105
- # @yield [response]
1106
- # If a block is given, it will be passed the response received from
1107
- # the request.
1108
- #
1109
- # @yieldparam [Net::HTTP::Response] response
1110
- # The HTTP response object.
1111
- #
1112
- # @return [Net::HTTP::Response]
1113
- # The response of the HTTP request.
1114
- #
1115
- # @see #http_request
1116
- #
1117
- # @api public
1118
- #
1119
- def http_unlock(options={},&block)
1120
- response = http_request(options.merge(:method => :unlock))
1121
-
1122
- yield response if block_given?
1123
- return response
1124
- end
1125
- end
1126
- end
1127
- end