ronin 1.5.1 → 2.0.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (499) hide show
  1. checksums.yaml +4 -4
  2. data/.document +0 -1
  3. data/.github/workflows/ruby.yml +4 -5
  4. data/.gitignore +1 -0
  5. data/.mailmap +1 -0
  6. data/.ruby-version +1 -1
  7. data/.yardopts +0 -2
  8. data/ChangeLog.md +239 -148
  9. data/Gemfile +58 -45
  10. data/README.md +147 -178
  11. data/Rakefile +3 -50
  12. data/bin/ronin +2 -3
  13. data/data/new/project/.gitignore +15 -0
  14. data/data/new/project/.ruby-version.erb +1 -0
  15. data/data/new/project/Dockerfile.erb +9 -0
  16. data/data/new/project/Gemfile.erb +16 -0
  17. data/data/new/project/Rakefile +43 -0
  18. data/data/new/project/project.rb.erb +14 -0
  19. data/data/new/script.rb.erb +6 -0
  20. data/data/tips/cli/console.txt +4 -0
  21. data/data/tips/cli/help.txt +12 -0
  22. data/data/tips/ruby/array_join.txt +5 -0
  23. data/data/tips/ruby/binary_string.txt +4 -0
  24. data/data/tips/ruby/file_binread.txt +4 -0
  25. data/data/tips/ruby/file_each_line.txt +6 -0
  26. data/data/tips/ruby/force_encoding.txt +4 -0
  27. data/data/tips/ruby/integer_binary_format.txt +10 -0
  28. data/data/tips/ruby/integer_chr.txt +5 -0
  29. data/data/tips/ruby/integer_hex_format.txt +10 -0
  30. data/data/tips/ruby/string_bytes.txt +17 -0
  31. data/data/tips/ruby/string_chars.txt +17 -0
  32. data/data/tips/ruby/string_ord.txt +5 -0
  33. data/data/tips/ruby/string_split.txt +13 -0
  34. data/data/tips/scripting/array_pack.txt +5 -0
  35. data/data/tips/scripting/base64_decode.txt +5 -0
  36. data/data/tips/scripting/base64_encode.txt +5 -0
  37. data/data/tips/scripting/build_wordlist.txt +9 -0
  38. data/data/tips/scripting/chars.txt +8 -0
  39. data/data/tips/scripting/chars_strings_in.txt +12 -0
  40. data/data/tips/scripting/dir_traversal.txt +5 -0
  41. data/data/tips/scripting/dns_get_address.txt +5 -0
  42. data/data/tips/scripting/dns_get_addresses.txt +5 -0
  43. data/data/tips/scripting/extract_ips.txt +6 -0
  44. data/data/tips/scripting/file_each_row.txt +6 -0
  45. data/data/tips/scripting/file_hexdump.txt +4 -0
  46. data/data/tips/scripting/float_pack.txt +5 -0
  47. data/data/tips/scripting/ftp_connect.txt +14 -0
  48. data/data/tips/scripting/generate_self_signed_cert.txt +20 -0
  49. data/data/tips/scripting/http_get_body.txt +5 -0
  50. data/data/tips/scripting/http_get_headers.txt +17 -0
  51. data/data/tips/scripting/integer_pack.txt +5 -0
  52. data/data/tips/scripting/ip_range_cidr.txt +6 -0
  53. data/data/tips/scripting/ip_range_glob.txt +6 -0
  54. data/data/tips/scripting/load_cert.txt +5 -0
  55. data/data/tips/scripting/md5.txt +5 -0
  56. data/data/tips/scripting/printing_messages.txt +11 -0
  57. data/data/tips/scripting/random_alpha.txt +5 -0
  58. data/data/tips/scripting/random_alpha_numeric.txt +5 -0
  59. data/data/tips/scripting/random_hex.txt +5 -0
  60. data/data/tips/scripting/read_wordlist.txt +7 -0
  61. data/data/tips/scripting/ronin_support.txt +5 -0
  62. data/data/tips/scripting/sha1.txt +5 -0
  63. data/data/tips/scripting/sha256.txt +5 -0
  64. data/data/tips/scripting/sha512.txt +5 -0
  65. data/data/tips/scripting/ssl_cert.txt +10 -0
  66. data/data/tips/scripting/ssl_socket.txt +12 -0
  67. data/data/tips/scripting/string_hexdump.txt +5 -0
  68. data/data/tips/scripting/string_random_case.txt +5 -0
  69. data/data/tips/scripting/string_unpack.txt +5 -0
  70. data/data/tips/scripting/tcp_accept.txt +6 -0
  71. data/data/tips/scripting/tcp_banner.txt +5 -0
  72. data/data/tips/scripting/tcp_connect.txt +12 -0
  73. data/data/tips/scripting/tcp_open.txt +5 -0
  74. data/data/tips/scripting/tcp_send.txt +5 -0
  75. data/data/tips/scripting/tcp_server_loop.txt +6 -0
  76. data/data/tips/scripting/try.txt +4 -0
  77. data/data/tips/scripting/udp_connect.txt +8 -0
  78. data/data/tips/scripting/udp_open.txt +5 -0
  79. data/data/tips/scripting/udp_recv.txt +7 -0
  80. data/data/tips/scripting/udp_send.txt +5 -0
  81. data/data/tips/scripting/udp_server_loop.txt +7 -0
  82. data/data/tips/scripting/unix_accept.txt +7 -0
  83. data/data/tips/scripting/unix_connect.txt +12 -0
  84. data/data/tips/scripting/zlib_deflate.txt +5 -0
  85. data/data/tips/scripting/zlib_inflate.txt +5 -0
  86. data/gemspec.yml +73 -57
  87. data/lib/ronin/cli/char_set_options.rb +181 -0
  88. data/lib/ronin/cli/cipher_command.rb +149 -0
  89. data/lib/ronin/{script/exceptions/build_failed.rb → cli/command.rb} +11 -6
  90. data/lib/ronin/cli/commands/asn.rb +284 -0
  91. data/lib/ronin/cli/commands/banner_grab.rb +84 -0
  92. data/lib/ronin/cli/commands/bitflip.rb +132 -0
  93. data/lib/ronin/cli/commands/cert_dump.rb +285 -0
  94. data/lib/ronin/cli/commands/cert_gen.rb +395 -0
  95. data/lib/ronin/cli/commands/cert_grab.rb +128 -0
  96. data/lib/ronin/cli/commands/decode.rb +143 -0
  97. data/lib/ronin/cli/commands/decrypt.rb +67 -0
  98. data/lib/ronin/cli/commands/dns.rb +183 -0
  99. data/lib/ronin/cli/commands/email_addr.rb +127 -0
  100. data/lib/ronin/cli/commands/encode.rb +143 -0
  101. data/lib/ronin/cli/commands/encrypt.rb +67 -0
  102. data/lib/ronin/cli/commands/entropy.rb +75 -0
  103. data/lib/ronin/cli/commands/escape.rb +121 -0
  104. data/lib/ronin/cli/commands/extract.rb +138 -0
  105. data/lib/ronin/cli/commands/grep.rb +238 -0
  106. data/lib/ronin/cli/commands/hexdump.rb +475 -0
  107. data/lib/ronin/cli/commands/highlight.rb +121 -0
  108. data/lib/ronin/cli/commands/hmac.rb +102 -0
  109. data/lib/ronin/cli/commands/homoglyph.rb +98 -0
  110. data/lib/ronin/cli/commands/host.rb +305 -0
  111. data/lib/ronin/cli/commands/http.rb +354 -0
  112. data/lib/ronin/cli/commands/ip.rb +242 -0
  113. data/lib/ronin/cli/commands/iprange.rb +138 -0
  114. data/lib/ronin/cli/commands/irb.rb +106 -0
  115. data/lib/ronin/cli/commands/md5.rb +67 -0
  116. data/lib/ronin/cli/commands/netcat.rb +419 -0
  117. data/lib/ronin/cli/commands/new/project.rb +119 -0
  118. data/lib/ronin/cli/commands/new/script.rb +68 -0
  119. data/lib/ronin/cli/commands/new.rb +65 -0
  120. data/lib/ronin/cli/commands/proxy.rb +519 -0
  121. data/lib/ronin/cli/commands/public_suffix_list.rb +118 -0
  122. data/lib/ronin/cli/commands/quote.rb +114 -0
  123. data/lib/ronin/cli/commands/rot.rb +114 -0
  124. data/lib/ronin/cli/commands/sha1.rb +58 -0
  125. data/lib/ronin/cli/commands/sha256.rb +67 -0
  126. data/lib/ronin/cli/commands/sha512.rb +67 -0
  127. data/lib/ronin/cli/commands/strings.rb +151 -0
  128. data/lib/ronin/cli/commands/tips.rb +190 -0
  129. data/lib/ronin/cli/commands/tld_list.rb +118 -0
  130. data/lib/ronin/cli/commands/typo.rb +80 -0
  131. data/lib/ronin/cli/commands/typosquat.rb +123 -0
  132. data/lib/ronin/cli/commands/unescape.rb +121 -0
  133. data/lib/ronin/cli/commands/unhexdump.rb +213 -0
  134. data/lib/ronin/cli/commands/unquote.rb +114 -0
  135. data/lib/ronin/cli/commands/url.rb +151 -0
  136. data/lib/ronin/cli/commands/xor.rb +91 -0
  137. data/lib/ronin/cli/file_processor_command.rb +94 -0
  138. data/lib/ronin/cli/http_shell.rb +362 -0
  139. data/lib/ronin/cli/key_options.rb +61 -0
  140. data/lib/ronin/cli/method_options.rb +71 -0
  141. data/lib/ronin/cli/pattern_options.rb +343 -0
  142. data/lib/ronin/cli/printing/http.rb +153 -0
  143. data/lib/ronin/cli/printing/syntax_highlighting.rb +96 -0
  144. data/lib/ronin/{ui/cli/commands.rb → cli/string_methods_command.rb} +23 -12
  145. data/lib/ronin/cli/string_processor_command.rb +185 -0
  146. data/lib/ronin/cli/typo_options.rb +80 -0
  147. data/lib/ronin/cli/value_processor_command.rb +97 -0
  148. data/lib/ronin/cli.rb +70 -0
  149. data/lib/ronin/config.rb +2 -10
  150. data/lib/ronin/{database/exceptions/invalid_config.rb → root.rb} +6 -7
  151. data/lib/ronin/ui.rb +4 -4
  152. data/lib/ronin/version.rb +3 -4
  153. data/lib/ronin.rb +9 -5
  154. data/man/ronin-asn.1 +124 -0
  155. data/man/ronin-asn.1.md +86 -0
  156. data/man/ronin-banner-grab.1 +45 -0
  157. data/man/ronin-banner-grab.1.md +33 -0
  158. data/man/ronin-bitflip.1 +123 -0
  159. data/man/ronin-bitflip.1.md +92 -0
  160. data/man/ronin-cert-dump.1 +99 -0
  161. data/man/ronin-cert-dump.1.md +68 -0
  162. data/man/ronin-cert-gen.1 +144 -0
  163. data/man/ronin-cert-gen.1.md +104 -0
  164. data/man/ronin-cert-grab.1 +68 -0
  165. data/man/ronin-cert-grab.1.md +47 -0
  166. data/man/ronin-decode.1 +103 -0
  167. data/man/ronin-decode.1.md +77 -0
  168. data/man/ronin-decrypt.1 +75 -0
  169. data/man/ronin-decrypt.1.md +56 -0
  170. data/man/ronin-dns.1 +45 -0
  171. data/man/ronin-dns.1.md +33 -0
  172. data/man/ronin-email-addr.1 +76 -0
  173. data/man/ronin-email-addr.1.md +54 -0
  174. data/man/ronin-encode.1 +103 -0
  175. data/man/ronin-encode.1.md +77 -0
  176. data/man/ronin-encrypt.1 +75 -0
  177. data/man/ronin-encrypt.1.md +56 -0
  178. data/man/ronin-entropy.1 +43 -0
  179. data/man/ronin-entropy.1.md +32 -0
  180. data/man/ronin-escape.1 +94 -0
  181. data/man/ronin-escape.1.md +70 -0
  182. data/man/ronin-extract.1 +263 -0
  183. data/man/ronin-extract.1.md +197 -0
  184. data/man/ronin-grep.1 +275 -0
  185. data/man/ronin-grep.1.md +206 -0
  186. data/man/ronin-help.1 +3 -15
  187. data/man/ronin-help.1.md +3 -12
  188. data/man/ronin-hexdump.1 +323 -0
  189. data/man/ronin-hexdump.1.md +197 -0
  190. data/man/ronin-highlight.1 +42 -0
  191. data/man/ronin-highlight.1.md +31 -0
  192. data/man/ronin-hmac.1 +66 -0
  193. data/man/ronin-hmac.1.md +49 -0
  194. data/man/ronin-homoglyph.1 +49 -0
  195. data/man/ronin-homoglyph.1.md +36 -0
  196. data/man/ronin-host.1 +99 -0
  197. data/man/ronin-host.1.md +74 -0
  198. data/man/ronin-http.1 +141 -0
  199. data/man/ronin-http.1.md +105 -0
  200. data/man/ronin-ip.1 +145 -0
  201. data/man/ronin-ip.1.md +103 -0
  202. data/man/ronin-iprange.1 +46 -0
  203. data/man/ronin-iprange.1.md +34 -0
  204. data/man/ronin-irb.1 +35 -0
  205. data/man/ronin-irb.1.md +25 -0
  206. data/man/ronin-md5.1 +54 -0
  207. data/man/ronin-md5.1.md +40 -0
  208. data/man/ronin-netcat.1 +110 -0
  209. data/man/ronin-netcat.1.md +82 -0
  210. data/man/ronin-new-project.1 +54 -0
  211. data/man/ronin-new-project.1.md +40 -0
  212. data/man/ronin-new-script.1 +37 -0
  213. data/man/ronin-new-script.1.md +27 -0
  214. data/man/ronin-new.1 +51 -0
  215. data/man/ronin-new.1.md +38 -0
  216. data/man/{ronin-net-proxy.1 → ronin-proxy.1} +45 -37
  217. data/man/{ronin-net-proxy.1.md → ronin-proxy.1.md} +39 -32
  218. data/man/ronin-public-suffix-list.1 +55 -0
  219. data/man/ronin-public-suffix-list.1.md +41 -0
  220. data/man/ronin-quote.1 +78 -0
  221. data/man/ronin-quote.1.md +58 -0
  222. data/man/ronin-rot.1 +62 -0
  223. data/man/ronin-rot.1.md +46 -0
  224. data/man/ronin-sha1.1 +54 -0
  225. data/man/ronin-sha1.1.md +40 -0
  226. data/man/ronin-sha256.1 +54 -0
  227. data/man/ronin-sha256.1.md +40 -0
  228. data/man/ronin-sha512.1 +54 -0
  229. data/man/ronin-sha512.1.md +40 -0
  230. data/man/ronin-strings.1 +115 -0
  231. data/man/ronin-strings.1.md +86 -0
  232. data/man/ronin-tips.1 +35 -0
  233. data/man/ronin-tips.1.md +25 -0
  234. data/man/ronin-tld-list.1 +55 -0
  235. data/man/ronin-tld-list.1.md +41 -0
  236. data/man/ronin-typo.1 +61 -0
  237. data/man/ronin-typo.1.md +45 -0
  238. data/man/ronin-typosquat.1 +65 -0
  239. data/man/ronin-typosquat.1.md +48 -0
  240. data/man/ronin-unescape.1 +94 -0
  241. data/man/ronin-unescape.1.md +70 -0
  242. data/man/ronin-unhexdump.1 +187 -0
  243. data/man/ronin-unhexdump.1.md +107 -0
  244. data/man/ronin-unquote.1 +78 -0
  245. data/man/ronin-unquote.1.md +58 -0
  246. data/man/ronin-url.1 +85 -0
  247. data/man/ronin-url.1.md +63 -0
  248. data/man/ronin-xor.1 +62 -0
  249. data/man/ronin-xor.1.md +46 -0
  250. data/man/ronin.1 +25 -6
  251. data/man/ronin.1.md +20 -5
  252. data/ronin.gemspec +1 -1
  253. data/spec/cli/command_spec.rb +10 -0
  254. data/spec/cli/commands/decode_spec.rb +152 -0
  255. data/spec/cli/commands/encode_spec.rb +152 -0
  256. data/spec/cli/commands/escape_spec.rb +128 -0
  257. data/spec/cli/commands/quote_spec.rb +76 -0
  258. data/spec/cli/commands/unescape_spec.rb +128 -0
  259. data/spec/cli/commands/unquote_spec.rb +80 -0
  260. data/spec/cli/fixtures/file.txt +3 -0
  261. data/spec/cli/fixtures/file2.txt +3 -0
  262. data/spec/cli/key_options_spec.rb +56 -0
  263. data/spec/cli/method_options_spec.rb +71 -0
  264. data/spec/cli/string_methods_command_spec.rb +25 -0
  265. data/spec/cli/string_processor_command_spec.rb +258 -0
  266. data/spec/cli/value_processor_command_spec.rb +127 -0
  267. data/spec/spec_helper.rb +2 -57
  268. data/spec/version_spec.rb +11 -0
  269. metadata +301 -455
  270. data/bin/ronin-campaigns +0 -20
  271. data/bin/ronin-console +0 -20
  272. data/bin/ronin-creds +0 -20
  273. data/bin/ronin-database +0 -20
  274. data/bin/ronin-emails +0 -20
  275. data/bin/ronin-exec +0 -20
  276. data/bin/ronin-fuzzer +0 -20
  277. data/bin/ronin-help +0 -20
  278. data/bin/ronin-hosts +0 -20
  279. data/bin/ronin-install +0 -20
  280. data/bin/ronin-ips +0 -20
  281. data/bin/ronin-net-proxy +0 -20
  282. data/bin/ronin-repos +0 -20
  283. data/bin/ronin-uninstall +0 -20
  284. data/bin/ronin-update +0 -20
  285. data/bin/ronin-urls +0 -20
  286. data/bin/ronin-wordlist +0 -20
  287. data/lib/bond/completions/ronin.rb +0 -154
  288. data/lib/ronin/address.rb +0 -124
  289. data/lib/ronin/arch.rb +0 -136
  290. data/lib/ronin/author.rb +0 -66
  291. data/lib/ronin/auto_load.rb +0 -91
  292. data/lib/ronin/bootstrap.rb +0 -27
  293. data/lib/ronin/campaign.rb +0 -129
  294. data/lib/ronin/credential.rb +0 -119
  295. data/lib/ronin/database/database.rb +0 -325
  296. data/lib/ronin/database/exceptions/unknown_repository.rb +0 -25
  297. data/lib/ronin/database/exceptions.rb +0 -21
  298. data/lib/ronin/database/migrations/1.0.0.rb +0 -569
  299. data/lib/ronin/database/migrations/1.1.0.rb +0 -125
  300. data/lib/ronin/database/migrations/exceptions/duplicate_migration.rb +0 -29
  301. data/lib/ronin/database/migrations/exceptions/unknown_migration.rb +0 -27
  302. data/lib/ronin/database/migrations/exceptions.rb +0 -21
  303. data/lib/ronin/database/migrations/graph.rb +0 -300
  304. data/lib/ronin/database/migrations/migration.rb +0 -66
  305. data/lib/ronin/database/migrations/migrations.rb +0 -185
  306. data/lib/ronin/database/migrations.rb +0 -22
  307. data/lib/ronin/database.rb +0 -21
  308. data/lib/ronin/email_address.rb +0 -257
  309. data/lib/ronin/environment.rb +0 -30
  310. data/lib/ronin/exceptions/duplicate_repository.rb +0 -23
  311. data/lib/ronin/exceptions/repository_not_found.rb +0 -23
  312. data/lib/ronin/exceptions.rb +0 -21
  313. data/lib/ronin/host_name.rb +0 -271
  314. data/lib/ronin/host_name_ip_address.rb +0 -45
  315. data/lib/ronin/installation.rb +0 -225
  316. data/lib/ronin/ip_address.rb +0 -348
  317. data/lib/ronin/ip_address_mac_address.rb +0 -45
  318. data/lib/ronin/license.rb +0 -121
  319. data/lib/ronin/mac_address.rb +0 -111
  320. data/lib/ronin/model/has_authors.rb +0 -111
  321. data/lib/ronin/model/has_description.rb +0 -73
  322. data/lib/ronin/model/has_license.rb +0 -129
  323. data/lib/ronin/model/has_name.rb +0 -91
  324. data/lib/ronin/model/has_title.rb +0 -71
  325. data/lib/ronin/model/has_unique_name.rb +0 -127
  326. data/lib/ronin/model/has_version.rb +0 -77
  327. data/lib/ronin/model/importable.rb +0 -65
  328. data/lib/ronin/model/model.rb +0 -165
  329. data/lib/ronin/model/types/description.rb +0 -60
  330. data/lib/ronin/model/types.rb +0 -20
  331. data/lib/ronin/model.rb +0 -20
  332. data/lib/ronin/open_port.rb +0 -112
  333. data/lib/ronin/organization.rb +0 -46
  334. data/lib/ronin/os.rb +0 -157
  335. data/lib/ronin/os_guess.rb +0 -45
  336. data/lib/ronin/password.rb +0 -165
  337. data/lib/ronin/port.rb +0 -126
  338. data/lib/ronin/repositories.rb +0 -23
  339. data/lib/ronin/repository.rb +0 -771
  340. data/lib/ronin/ronin.rb +0 -43
  341. data/lib/ronin/script/buildable.rb +0 -156
  342. data/lib/ronin/script/deployable.rb +0 -202
  343. data/lib/ronin/script/exceptions/deploy_failed.rb +0 -27
  344. data/lib/ronin/script/exceptions/exception.rb +0 -25
  345. data/lib/ronin/script/exceptions/not_built.rb +0 -27
  346. data/lib/ronin/script/exceptions/test_failed.rb +0 -27
  347. data/lib/ronin/script/exceptions.rb +0 -24
  348. data/lib/ronin/script/path.rb +0 -293
  349. data/lib/ronin/script/script.rb +0 -384
  350. data/lib/ronin/script/testable.rb +0 -365
  351. data/lib/ronin/script.rb +0 -21
  352. data/lib/ronin/service.rb +0 -39
  353. data/lib/ronin/service_credential.rb +0 -31
  354. data/lib/ronin/software.rb +0 -55
  355. data/lib/ronin/spec/database.rb +0 -56
  356. data/lib/ronin/target.rb +0 -66
  357. data/lib/ronin/tcp_port.rb +0 -36
  358. data/lib/ronin/udp_port.rb +0 -32
  359. data/lib/ronin/ui/cli/class_command.rb +0 -137
  360. data/lib/ronin/ui/cli/cli.rb +0 -148
  361. data/lib/ronin/ui/cli/command.rb +0 -649
  362. data/lib/ronin/ui/cli/commands/campaigns.rb +0 -165
  363. data/lib/ronin/ui/cli/commands/console.rb +0 -106
  364. data/lib/ronin/ui/cli/commands/creds.rb +0 -108
  365. data/lib/ronin/ui/cli/commands/database.rb +0 -204
  366. data/lib/ronin/ui/cli/commands/emails.rb +0 -86
  367. data/lib/ronin/ui/cli/commands/exec.rb +0 -127
  368. data/lib/ronin/ui/cli/commands/fuzzer.rb +0 -306
  369. data/lib/ronin/ui/cli/commands/help.rb +0 -87
  370. data/lib/ronin/ui/cli/commands/hosts.rb +0 -177
  371. data/lib/ronin/ui/cli/commands/install.rb +0 -136
  372. data/lib/ronin/ui/cli/commands/ips.rb +0 -178
  373. data/lib/ronin/ui/cli/commands/net/proxy.rb +0 -411
  374. data/lib/ronin/ui/cli/commands/repos.rb +0 -164
  375. data/lib/ronin/ui/cli/commands/uninstall.rb +0 -90
  376. data/lib/ronin/ui/cli/commands/update.rb +0 -125
  377. data/lib/ronin/ui/cli/commands/urls.rb +0 -141
  378. data/lib/ronin/ui/cli/commands/wordlist.rb +0 -181
  379. data/lib/ronin/ui/cli/exceptions/unknown_command.rb +0 -27
  380. data/lib/ronin/ui/cli/exceptions.rb +0 -20
  381. data/lib/ronin/ui/cli/model_command.rb +0 -182
  382. data/lib/ronin/ui/cli/printing.rb +0 -167
  383. data/lib/ronin/ui/cli/resources_command.rb +0 -117
  384. data/lib/ronin/ui/cli/script_command.rb +0 -212
  385. data/lib/ronin/ui/cli.rb +0 -21
  386. data/lib/ronin/ui/console/commands.rb +0 -86
  387. data/lib/ronin/ui/console/console.rb +0 -215
  388. data/lib/ronin/ui/console/context.rb +0 -106
  389. data/lib/ronin/ui/console/shell.rb +0 -184
  390. data/lib/ronin/ui/console.rb +0 -22
  391. data/lib/ronin/url.rb +0 -546
  392. data/lib/ronin/url_query_param.rb +0 -73
  393. data/lib/ronin/url_query_param_name.rb +0 -89
  394. data/lib/ronin/url_scheme.rb +0 -53
  395. data/lib/ronin/user_name.rb +0 -47
  396. data/lib/ronin/vendor.rb +0 -39
  397. data/lib/ronin/web_credential.rb +0 -76
  398. data/man/ronin-campaigns.1 +0 -105
  399. data/man/ronin-campaigns.1.md +0 -78
  400. data/man/ronin-console.1 +0 -96
  401. data/man/ronin-console.1.md +0 -72
  402. data/man/ronin-creds.1 +0 -89
  403. data/man/ronin-creds.1.md +0 -66
  404. data/man/ronin-database.1 +0 -111
  405. data/man/ronin-database.1.md +0 -82
  406. data/man/ronin-emails.1 +0 -97
  407. data/man/ronin-emails.1.md +0 -72
  408. data/man/ronin-exec.1 +0 -65
  409. data/man/ronin-exec.1.md +0 -49
  410. data/man/ronin-fuzzer.1 +0 -95
  411. data/man/ronin-fuzzer.1.md +0 -73
  412. data/man/ronin-hosts.1 +0 -105
  413. data/man/ronin-hosts.1.md +0 -78
  414. data/man/ronin-install.1 +0 -104
  415. data/man/ronin-install.1.md +0 -79
  416. data/man/ronin-ips.1 +0 -109
  417. data/man/ronin-ips.1.md +0 -81
  418. data/man/ronin-repos.1 +0 -102
  419. data/man/ronin-repos.1.md +0 -77
  420. data/man/ronin-uninstall.1 +0 -88
  421. data/man/ronin-uninstall.1.md +0 -67
  422. data/man/ronin-update.1 +0 -88
  423. data/man/ronin-update.1.md +0 -67
  424. data/man/ronin-urls.1 +0 -113
  425. data/man/ronin-urls.1.md +0 -84
  426. data/man/ronin-wordlist.1 +0 -71
  427. data/man/ronin-wordlist.1.md +0 -54
  428. data/spec/arch_spec.rb +0 -77
  429. data/spec/author_spec.rb +0 -26
  430. data/spec/campaign_spec.rb +0 -13
  431. data/spec/classes/my_script.rb +0 -21
  432. data/spec/credential_spec.rb +0 -29
  433. data/spec/database_spec.rb +0 -28
  434. data/spec/email_address_spec.rb +0 -83
  435. data/spec/helpers/repos/installed/ronin.yml +0 -7
  436. data/spec/helpers/repos/installed/scripts/.keep +0 -0
  437. data/spec/helpers/repos/local/lib/init.rb +0 -1
  438. data/spec/helpers/repos/local/lib/stuff/another_test.rb +0 -6
  439. data/spec/helpers/repos/local/lib/stuff/test.rb +0 -4
  440. data/spec/helpers/repos/local/ronin.yml +0 -7
  441. data/spec/helpers/repos/local/scripts/.keep +0 -0
  442. data/spec/helpers/repos/remote/ronin.yml +0 -7
  443. data/spec/helpers/repos/remote/scripts/.keep +0 -0
  444. data/spec/helpers/repos/scripts/ronin.yml +0 -7
  445. data/spec/helpers/repos/scripts/scripts/cached/cached.rb +0 -10
  446. data/spec/helpers/repos/scripts/scripts/cached/missing.rb +0 -10
  447. data/spec/helpers/repos/scripts/scripts/cached/modified.rb +0 -10
  448. data/spec/helpers/repos/scripts/scripts/cached/unmodified.rb +0 -10
  449. data/spec/helpers/repos/scripts/scripts/failures/exceptions.rb +0 -11
  450. data/spec/helpers/repos/scripts/scripts/failures/load_errors.rb +0 -11
  451. data/spec/helpers/repos/scripts/scripts/failures/name_errors.rb +0 -8
  452. data/spec/helpers/repos/scripts/scripts/failures/no_method_errors.rb +0 -10
  453. data/spec/helpers/repos/scripts/scripts/failures/syntax_errors.rb +0 -11
  454. data/spec/helpers/repos/scripts/scripts/failures/validation_errors.rb +0 -11
  455. data/spec/helpers/repos/scripts/scripts/my_scripts/test.rb +0 -16
  456. data/spec/helpers/repositories.rb +0 -11
  457. data/spec/host_name_spec.rb +0 -92
  458. data/spec/installation_spec.rb +0 -40
  459. data/spec/ip_address_spec.rb +0 -109
  460. data/spec/license_spec.rb +0 -25
  461. data/spec/mac_address_spec.rb +0 -47
  462. data/spec/model/has_authors_spec.rb +0 -79
  463. data/spec/model/has_description_spec.rb +0 -76
  464. data/spec/model/has_license_spec.rb +0 -73
  465. data/spec/model/has_name_spec.rb +0 -54
  466. data/spec/model/has_title_spec.rb +0 -42
  467. data/spec/model/has_version_spec.rb +0 -87
  468. data/spec/model/model_spec.rb +0 -98
  469. data/spec/model/models/authored_model.rb +0 -11
  470. data/spec/model/models/base_model.rb +0 -13
  471. data/spec/model/models/described_model.rb +0 -9
  472. data/spec/model/models/inherited_model.rb +0 -16
  473. data/spec/model/models/licensed_model.rb +0 -11
  474. data/spec/model/models/named_model.rb +0 -9
  475. data/spec/model/models/titled_model.rb +0 -9
  476. data/spec/model/models/versioned_model.rb +0 -11
  477. data/spec/os_spec.rb +0 -48
  478. data/spec/password_spec.rb +0 -47
  479. data/spec/port_spec.rb +0 -51
  480. data/spec/repository_spec.rb +0 -270
  481. data/spec/ronin_spec.rb +0 -25
  482. data/spec/script/buildable_spec.rb +0 -51
  483. data/spec/script/classes/buildable_class.rb +0 -15
  484. data/spec/script/classes/deployable_class.rb +0 -13
  485. data/spec/script/classes/script_class.rb +0 -19
  486. data/spec/script/classes/testable_class.rb +0 -19
  487. data/spec/script/deployable_spec.rb +0 -55
  488. data/spec/script/path_spec.rb +0 -185
  489. data/spec/script/script_spec.rb +0 -128
  490. data/spec/script/testable_spec.rb +0 -117
  491. data/spec/service_spec.rb +0 -24
  492. data/spec/software_spec.rb +0 -46
  493. data/spec/ui/cli/classes/test_command.rb +0 -26
  494. data/spec/ui/cli/cli_spec.rb +0 -34
  495. data/spec/ui/cli/command_spec.rb +0 -291
  496. data/spec/url_query_param_spec.rb +0 -41
  497. data/spec/url_scheme_spec.rb +0 -21
  498. data/spec/url_spec.rb +0 -179
  499. data/spec/vendor_spec.rb +0 -25
@@ -1,771 +0,0 @@
1
- #
2
- # Copyright (c) 2006-2021 Hal Brodigan (postmodern.mod3 at gmail.com)
3
- #
4
- # This file is part of ronin.
5
- #
6
- # Ronin is free software: you can redistribute it and/or modify
7
- # it under the terms of the GNU General Public License as published by
8
- # the Free Software Foundation, either version 3 of the License, or
9
- # (at your option) any later version.
10
- #
11
- # Ronin 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 General Public License for more details.
15
- #
16
- # You should have received a copy of the GNU General Public License
17
- # along with Ronin. If not, see <https://www.gnu.org/licenses/>.
18
- #
19
-
20
- require 'ronin/exceptions/duplicate_repository'
21
- require 'ronin/exceptions/repository_not_found'
22
- require 'ronin/model/has_name'
23
- require 'ronin/model/has_title'
24
- require 'ronin/model/has_description'
25
- require 'ronin/model/has_license'
26
- require 'ronin/model/has_authors'
27
- require 'ronin/model'
28
- require 'ronin/config'
29
-
30
- require 'pullr'
31
- require 'data_paths'
32
- require 'yaml'
33
-
34
- module Ronin
35
- #
36
- # Represents a container for user scripts and miscallaneous code,
37
- # that can be distributed over common SCMs ([Git](http://git-scm.com/),
38
- # [Mercurial (Hg)](http://mercurial.selenic.com/),
39
- # [SubVersion (SVN)](http://subversion.tigris.org/), Rsync).
40
- #
41
- class Repository
42
-
43
- include Model
44
- include Model::HasName
45
- include Model::HasTitle
46
- include Model::HasDescription
47
- include Model::HasAuthors
48
- include Model::HasLicense
49
- include DataPaths
50
-
51
- # The default domain that repositories are added from
52
- LOCAL_DOMAIN = 'localhost'
53
-
54
- # Repository metadata file name
55
- METADATA_FILE = 'ronin.yml'
56
-
57
- # Repository `bin/` directory
58
- BIN_DIR = 'bin'
59
-
60
- # Repository `lib/` directory
61
- LIB_DIR = 'lib'
62
-
63
- # The `init.rb` file to load from the {LIB_DIR}
64
- INIT_FILE = 'init.rb'
65
-
66
- # Repository `data/` directory
67
- DATA_DIR = 'data'
68
-
69
- # Directories containing {Script}s
70
- SCRIPT_DIRS = %w[scripts cache]
71
-
72
- # The primary key of the repository
73
- property :id, Serial
74
-
75
- # The SCM used by the repository
76
- property :scm, String
77
-
78
- # Local path to the repository
79
- property :path, FilePath, :required => true, :unique => true
80
-
81
- # URI that the repository was installed from
82
- property :uri, URI
83
-
84
- # Specifies whether the repository was installed remotely
85
- # or added using a local directory.
86
- property :installed, Boolean, :default => false
87
-
88
- # Name of the repository
89
- property :name, String, :default => proc { |repo,name|
90
- repo.path.basename
91
- }
92
-
93
- # The domain the repository belongs to
94
- property :domain, String, :required => true
95
-
96
- # Title of the repository
97
- property :title, Text
98
-
99
- # Source View URI of the repository
100
- property :source, URI
101
-
102
- # Website URI for the repository
103
- property :website, URI
104
-
105
- # Description of the repository
106
- property :description, Text
107
-
108
- # The script paths from the repository
109
- has 0..n, :script_paths, :model => 'Script::Path'
110
-
111
- # The `bin/` directory
112
- attr_reader :bin_dir
113
-
114
- # The `lib/` directory
115
- attr_reader :lib_dir
116
-
117
- # The `data/` directory
118
- attr_reader :data_dir
119
-
120
- # Directories containing {Script}s.
121
- attr_reader :script_dirs
122
-
123
- #
124
- # Creates a new {Repository} object.
125
- #
126
- # @param [Hash] attributes
127
- # The attributes of the repository.
128
- #
129
- # @option attributes [String] :path
130
- # The path to the repository.
131
- #
132
- # @option attributes [Symbol] :scm
133
- # The SCM used by the repository. Can be either:
134
- #
135
- # * `:git`
136
- # * `:mercurial` / `:hg`
137
- # * `:sub_version` / `:svn`
138
- # * `:rsync`
139
- #
140
- # @option attributes [String, URI] :uri
141
- # The URI the repository resides at.
142
- #
143
- # @yield [repo]
144
- # If a block is given, the repository will be passed to it.
145
- #
146
- # @yieldparam [Repository] repo
147
- # The newly created repository.
148
- #
149
- # @api private
150
- #
151
- def initialize(attributes={})
152
- super(attributes)
153
-
154
- @bin_dir = self.path.join(BIN_DIR)
155
- @lib_dir = self.path.join(LIB_DIR)
156
- @data_dir = self.path.join(DATA_DIR)
157
- @script_dirs = SCRIPT_DIRS.map { |dir| self.path.join(dir) }
158
-
159
- initialize_metadata
160
-
161
- @activated = false
162
-
163
- yield self if block_given?
164
- end
165
-
166
- #
167
- # Searches for the Repository with a given name, and potentially
168
- # installed from the given domain.
169
- #
170
- # @param [String] name
171
- # The name of the repository.
172
- #
173
- # @return [Repository]
174
- # The matching repository.
175
- #
176
- # @raise [RepositoryNotFound]
177
- # No repository could be found with the given name or domain.
178
- #
179
- # @example Load the repository with the given name
180
- # Repository.find('postmodern-repo')
181
- #
182
- # @example Load the repository with the given name and domain.
183
- # Repository.find('postmodern-repo@github.com')
184
- #
185
- # @since 1.0.0
186
- #
187
- # @api private
188
- #
189
- def Repository.find(name)
190
- name, domain = name.to_s.split('@',2)
191
-
192
- query = {:name => name}
193
- query[:domain] = domain if domain
194
-
195
- unless (repo = Repository.first(query))
196
- if domain
197
- raise(RepositoryNotFound,"Repository #{name.dump} from domain #{domain.dump} cannot be found")
198
- else
199
- raise(RepositoryNotFound,"Repository #{name.dump} cannot be found")
200
- end
201
- end
202
-
203
- return repo
204
- end
205
-
206
- #
207
- # Adds an Repository with the given options.
208
- #
209
- # @return [Repository]
210
- # The added repository.
211
- #
212
- # @raise [ArgumentError]
213
- # The `:path` option was not specified.
214
- #
215
- # @raise [RepositoryNotFound]
216
- # The path of the repository did not exist or was not a directory.
217
- #
218
- # @raise [DuplicateRepository]
219
- # The repository was already added or installed.
220
- #
221
- # @since 1.0.0
222
- #
223
- # @api private
224
- #
225
- def Repository.add(options={})
226
- unless options.has_key?(:path)
227
- raise(ArgumentError,"the :path option was not given")
228
- end
229
-
230
- path = Pathname.new(options[:path]).expand_path
231
-
232
- unless path.directory?
233
- raise(RepositoryNotFound,"Repository #{path} cannot be found")
234
- end
235
-
236
- if Repository.count(:path => path) > 0
237
- raise(DuplicateRepository,"a Repository at the path #{path} was already added")
238
- end
239
-
240
- # create the repository
241
- repo = Repository.new(options.merge(
242
- :path => path,
243
- :installed => false,
244
- :domain => LOCAL_DOMAIN
245
- ))
246
-
247
- if Repository.count(:name => repo.name, :domain => repo.domain) > 0
248
- raise(DuplicateRepository,"the Repository #{repo} already exists in the database")
249
- end
250
-
251
- # save the repository
252
- if repo.save
253
- # cache any files from within the `cache/` directory of the
254
- # repository
255
- repo.cache_scripts!
256
- end
257
-
258
- return repo
259
- end
260
-
261
- #
262
- # Installs an repository.
263
- #
264
- # @param [Hash] options
265
- # Additional options.
266
- #
267
- # @option options [Addressable::URI, String] :uri
268
- # The URI to the repository.
269
- #
270
- # @option options [Symbol] :scm
271
- # The SCM used by the repository. May be either:
272
- #
273
- # * `:git`
274
- # * `:mercurial` / `:hg`
275
- # * `:sub_version` / `:svn`
276
- # * `:rsync`
277
- #
278
- # @return [Repository]
279
- # The newly installed repository.
280
- #
281
- # @raise [ArgumentError]
282
- # The `:uri` option must be specified.
283
- #
284
- # @raise [DuplicateRepository]
285
- # An repository already exists with the same `name` and `host`
286
- # properties.
287
- #
288
- # @since 1.0.0
289
- #
290
- # @api private
291
- #
292
- def Repository.install(options={})
293
- unless options[:uri]
294
- raise(ArgumentError,":uri must be passed to Repository.install")
295
- end
296
-
297
- remote_repo = Pullr::RemoteRepository.new(options)
298
-
299
- name = remote_repo.name
300
- domain = if remote_repo.uri.scheme
301
- remote_repo.uri.host
302
- else
303
- # Use a regexp to pull out the host-name, if the URI
304
- # lacks a scheme.
305
- remote_repo.uri.to_s.match(/\@([^@:\/]+)/)[1]
306
- end
307
-
308
- if Repository.count(:name => name, :domain => domain) > 0
309
- raise(DuplicateRepository,"a Repository already exists with the name #{name.dump} from domain #{domain.dump}")
310
- end
311
-
312
- path = File.join(Config::REPOS_DIR,name,domain)
313
-
314
- # pull down the remote repository
315
- local_repo = remote_repo.pull(path)
316
-
317
- # add the new remote repository
318
- repo = Repository.new(
319
- :path => path,
320
- :scm => local_repo.scm,
321
- :uri => remote_repo.uri,
322
- :installed => true,
323
- :name => name,
324
- :domain => domain
325
- )
326
-
327
- # save the repository
328
- if repo.save
329
- # cache any files from within the `cache/` directory of the
330
- # repository
331
- repo.cache_scripts!
332
- end
333
-
334
- return repo
335
- end
336
-
337
- #
338
- # Updates all repositories.
339
- #
340
- # @yield [repo]
341
- # If a block is given, it will be passed each updated repository.
342
- #
343
- # @yieldparam [Repository] repo
344
- # An updated repository.
345
- #
346
- # @since 1.0.0
347
- #
348
- # @api private
349
- #
350
- def Repository.update!
351
- Repository.each do |repo|
352
- # update the repositories contents
353
- repo.update!
354
-
355
- yield repo if block_given?
356
- end
357
- end
358
-
359
- #
360
- # Uninstalls the repository with the given name or domain.
361
- #
362
- # @param [String] name
363
- # The name of the repository to uninstall.
364
- #
365
- # @return [nil]
366
- #
367
- # @example Uninstall the repository with the given name
368
- # Repository.uninstall('postmodern-repo')
369
- #
370
- # @example Uninstall the repository with the given name and domain.
371
- # Repository.uninstall('postmodern-repo/github.com')
372
- #
373
- # @api private
374
- #
375
- def Repository.uninstall(name)
376
- Repository.find(name).uninstall!
377
- end
378
-
379
- #
380
- # Activates all installed or added repositories.
381
- #
382
- # @return [Array<Repository>]
383
- # The activated repository.
384
- #
385
- # @see #activate!
386
- #
387
- # @since 1.0.0
388
- #
389
- # @api private
390
- #
391
- def Repository.activate!
392
- Repository.each { |repo| repo.activate! }
393
- end
394
-
395
- #
396
- # Deactivates all installed or added repositories.
397
- #
398
- # @return [Array<Repository>]
399
- # The deactivated repositories.
400
- #
401
- # @see #deactivate!
402
- #
403
- # @since 1.0.0
404
- #
405
- # @api private
406
- #
407
- def Repository.deactivate!
408
- Repository.reverse_each { |repo| repo.deactivate! }
409
- end
410
-
411
- #
412
- # Determines if the repository was added locally.
413
- #
414
- # @return [Boolean]
415
- # Specifies whether the repository was added locally.
416
- #
417
- # @since 1.0.0
418
- #
419
- # @api private
420
- #
421
- def local?
422
- self.domain == LOCAL_DOMAIN
423
- end
424
-
425
- #
426
- # Determines if the repository was installed remotely.
427
- #
428
- # @return [Boolean]
429
- # Specifies whether the repository was installed from a remote URI.
430
- #
431
- # @since 1.0.0
432
- #
433
- # @api private
434
- #
435
- def remote?
436
- self.domain != LOCAL_DOMAIN
437
- end
438
-
439
- #
440
- # The executable scripts in the `bin/` directory.
441
- #
442
- # @return [Array<String>]
443
- # The executable script names.
444
- #
445
- # @since 1.0.0
446
- #
447
- # @api private
448
- #
449
- def executables
450
- scripts = []
451
-
452
- if @bin_dir.directory?
453
- @bin_dir.entries.each do |path|
454
- scripts << path.basename.to_s if path.file?
455
- end
456
- end
457
-
458
- return scripts
459
- end
460
-
461
- #
462
- # All paths within the `cache/` directory of the repository.
463
- #
464
- # @yield [path]
465
- # If a block is given, it will be passed each matching path.
466
- #
467
- # @yieldparam [Pathname] path
468
- # A matching path.
469
- #
470
- # @return [Enumerator]
471
- # If no block is given, an Enumerator object will be returned.
472
- #
473
- # @since 1.0.0
474
- #
475
- # @api private
476
- #
477
- def each_script(&block)
478
- return enum_for(__method__) unless block
479
-
480
- @script_dirs.each do |dir|
481
- Pathname.glob(dir.join('**','*.rb'),&block)
482
- end
483
- end
484
-
485
- #
486
- # Determines if the repository has been activated.
487
- #
488
- # @return [Boolean]
489
- # Specifies whether the repository has been activated.
490
- #
491
- # @api private
492
- #
493
- def activated?
494
- @activated == true
495
- end
496
-
497
- #
498
- # Activates the repository by adding the {#lib_dir} to the `$LOAD_PATH`
499
- # global variable.
500
- #
501
- # @api private
502
- #
503
- def activate!
504
- # add the data/ directory
505
- register_data_path(@data_dir) if @data_dir.directory?
506
-
507
- if @lib_dir.directory?
508
- # ensure all paths added to $LOAD_PATH are Strings
509
- path = @lib_dir.to_s
510
-
511
- $LOAD_PATH << path unless $LOAD_PATH.include?(path)
512
- end
513
-
514
- # load the lib/init.rb file
515
- init_path = self.path.join(LIB_DIR,INIT_FILE)
516
- require init_path if init_path.file?
517
-
518
- @activated = true
519
- return true
520
- end
521
-
522
- #
523
- # Deactivates the repository by removing the {#lib_dir} from the
524
- # `$LOAD_PATH` global variable.
525
- #
526
- # @api private
527
- #
528
- def deactivate!
529
- unregister_data_paths
530
-
531
- $LOAD_PATH.delete(@lib_dir.to_s)
532
-
533
- @activated = false
534
- return true
535
- end
536
-
537
- #
538
- # Finds a cached script.
539
- #
540
- # @param [String] sub_path
541
- # The sub-path within the repository to search for.
542
- #
543
- # @return [Script::Path, nil]
544
- # The matching script path.
545
- #
546
- # @since 1.1.0
547
- #
548
- # @api private
549
- #
550
- def find_script(sub_path)
551
- paths = @script_dirs.map { |dir| File.join(dir,sub_path) }
552
-
553
- return script_paths.first(:path => paths)
554
- end
555
-
556
- #
557
- # Clears the {#script_paths} and re-saves the cached files within the
558
- # `cache/` directory.
559
- #
560
- # @return [Repository]
561
- # The cleaned repository.
562
- #
563
- # @since 1.0.0
564
- #
565
- # @api private
566
- #
567
- def cache_scripts!
568
- clean_scripts!
569
-
570
- each_script do |path|
571
- self.script_paths.new(:path => path).cache
572
- end
573
-
574
- return self
575
- end
576
-
577
- #
578
- # Syncs the {#script_paths} of the repository, and adds any new cached
579
- # files.
580
- #
581
- # @return [Repository]
582
- # The cleaned repository.
583
- #
584
- # @since 1.0.0
585
- #
586
- # @api private
587
- #
588
- def sync_scripts!
589
- # activates the repository before caching it's objects
590
- activate!
591
-
592
- new_paths = each_script.to_a
593
-
594
- self.script_paths.each do |script_path|
595
- # filter out pre-existing paths within the `cached/` directory
596
- new_paths.delete(script_path.path)
597
-
598
- # sync the cached file and catch any exceptions
599
- script_path.sync
600
- end
601
-
602
- # cache the new paths within the `cache/` directory
603
- new_paths.each do |path|
604
- self.script_paths.new(:path => path).cache
605
- end
606
-
607
- # deactivates the repository
608
- deactivate!
609
- return self
610
- end
611
-
612
- #
613
- # Deletes any {#script_paths} associated with the repository.
614
- #
615
- # @return [Repository]
616
- # The cleaned repository.
617
- #
618
- # @since 1.0.0
619
- #
620
- # @api private
621
- #
622
- def clean_scripts!
623
- self.script_paths.destroy
624
- self.script_paths.clear
625
- return self
626
- end
627
-
628
- #
629
- # Updates the repository, reloads it's metadata and syncs the
630
- # cached files of the repository.
631
- #
632
- # @yield [repo]
633
- # If a block is given, it will be passed after the repository has
634
- # been updated.
635
- #
636
- # @yieldparam [Repository] repo
637
- # The updated repository.
638
- #
639
- # @return [Repository]
640
- # The updated repository.
641
- #
642
- # @since 1.0.0
643
- #
644
- # @api private
645
- #
646
- def update!
647
- local_repo = Pullr::LocalRepository.new(
648
- :path => self.path,
649
- :scm => self.scm
650
- )
651
-
652
- # only update if we have a repository
653
- local_repo.update(self.uri)
654
-
655
- # re-initialize the metadata
656
- initialize_metadata
657
-
658
- # save the repository
659
- if save
660
- # syncs the cached files of the repository
661
- sync_scripts!
662
- end
663
-
664
- yield self if block_given?
665
- return self
666
- end
667
-
668
- #
669
- # Deletes the contents of the repository.
670
- #
671
- # @yield [repo]
672
- # If a block is given, it will be passed the repository after it's
673
- # contents have been deleted.
674
- #
675
- # @yieldparam [Repository] repo
676
- # The deleted repository.
677
- #
678
- # @return [Repository]
679
- # The deleted repository.
680
- #
681
- # @since 1.0.0
682
- #
683
- # @api private
684
- #
685
- def uninstall!
686
- deactivate!
687
-
688
- FileUtils.rm_rf(self.path) if self.installed?
689
-
690
- # destroy any cached files first
691
- clean_scripts!
692
-
693
- # remove the repository from the database
694
- destroy if saved?
695
-
696
- yield self if block_given?
697
- return self
698
- end
699
-
700
- #
701
- # Converts the repository to a String.
702
- #
703
- # @return [String]
704
- # The name and domain of the repository.
705
- #
706
- def to_s
707
- "#{self.name}/#{self.domain}"
708
- end
709
-
710
- protected
711
-
712
- #
713
- # Loads the metadata from {METADATA_FILE} within the repository.
714
- #
715
- # @api private
716
- #
717
- def initialize_metadata
718
- metadata_path = self.path.join(METADATA_FILE)
719
-
720
- self.title = self.name
721
- self.description = nil
722
- self.license = nil
723
-
724
- self.source = self.uri
725
- self.website = self.source
726
- self.authors.clear
727
-
728
- if File.file?(metadata_path)
729
- metadata = YAML.load_file(metadata_path)
730
-
731
- if (title = metadata['title'])
732
- self.title = title
733
- end
734
-
735
- if (description = metadata['description'])
736
- self.description = description
737
- end
738
-
739
- if (license = metadata['license'])
740
- self.license = License.first_or_predefined(:name => license)
741
- end
742
-
743
- if (uri = metadata['uri'])
744
- self.uri ||= uri
745
- end
746
-
747
- if (source = metadata['source'])
748
- self.source = source
749
- end
750
-
751
- if (website = metadata['website'])
752
- self.website = website
753
- end
754
-
755
- case metadata['authors']
756
- when Hash
757
- metadata['authors'].each do |name,email|
758
- self.authors << Author.first_or_new(:name => name, :email => email)
759
- end
760
- when Array
761
- metadata['authors'].each do |name|
762
- self.authors << Author.first_or_new(:name => name)
763
- end
764
- end
765
- end
766
-
767
- return self
768
- end
769
-
770
- end
771
- end