ronin-support 0.5.1 → 1.0.0.beta1

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 (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