pwn 0.5.708 → 0.5.709

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 (434) hide show
  1. checksums.yaml +4 -4
  2. data/documentation/Installation.md +1 -0
  3. data/etc/default_skills/pwn/ai/agent/extrospection/osint/bridges/SKILL.md +30 -8
  4. data/etc/default_skills/pwn/ai/agent/extrospection/osint/social/SKILL.md +30 -8
  5. data/etc/default_skills/pwn/ai/agent/extrospection/osint/social/references/urls.md +1 -1
  6. data/etc/default_skills/pwn/ai/agent/extrospection/references/urls.md +0 -1
  7. data/etc/default_skills/pwn/memory_index/SKILL.md +0 -4
  8. data/etc/default_skills/pwn/plugins/aflplusplus/SKILL.md +48 -0
  9. data/etc/default_skills/pwn/plugins/android/SKILL.md +1 -0
  10. data/etc/default_skills/pwn/plugins/artifact_registry/SKILL.md +49 -0
  11. data/etc/default_skills/pwn/plugins/binary_parser/SKILL.md +54 -0
  12. data/etc/default_skills/pwn/plugins/credential_attack/SKILL.md +51 -0
  13. data/etc/default_skills/pwn/plugins/doctor/SKILL.md +57 -0
  14. data/etc/default_skills/pwn/plugins/exploit_dev/SKILL.md +61 -0
  15. data/etc/default_skills/pwn/plugins/frida/SKILL.md +49 -0
  16. data/etc/default_skills/pwn/plugins/gdb/SKILL.md +52 -0
  17. data/etc/default_skills/pwn/plugins/jobs/SKILL.md +51 -0
  18. data/etc/default_skills/pwn/plugins/nuclei/SKILL.md +48 -0
  19. data/etc/default_skills/pwn/plugins/process_tube/SKILL.md +52 -0
  20. data/etc/default_skills/pwn/plugins/radare2/SKILL.md +59 -0
  21. data/etc/default_skills/pwn/plugins/recon/SKILL.md +55 -0
  22. data/etc/default_skills/pwn/plugins/recon/references/urls.md +5 -0
  23. data/etc/default_skills/pwn/plugins/sqlmap/SKILL.md +48 -0
  24. data/etc/default_skills/pwn/plugins/transparent_browser/SKILL.md +0 -4
  25. data/etc/default_skills/pwn/plugins/volatility/SKILL.md +48 -0
  26. data/lib/pwn/ai/agent/assembly.rb +4 -1
  27. data/lib/pwn/ai/agent/btc.rb +4 -1
  28. data/lib/pwn/ai/agent/burp_suite.rb +5 -2
  29. data/lib/pwn/ai/agent/curriculum.rb +89 -30
  30. data/lib/pwn/ai/agent/dispatch.rb +27 -16
  31. data/lib/pwn/ai/agent/extrospection/osint/bridges.rb +9 -18
  32. data/lib/pwn/ai/agent/extrospection/osint/social.rb +9 -18
  33. data/lib/pwn/ai/agent/extrospection.rb +185 -60
  34. data/lib/pwn/ai/agent/gqrx.rb +4 -1
  35. data/lib/pwn/ai/agent/hacker_one.rb +5 -2
  36. data/lib/pwn/ai/agent/learning.rb +142 -25
  37. data/lib/pwn/ai/agent/loop.rb +53 -46
  38. data/lib/pwn/ai/agent/metrics.rb +133 -23
  39. data/lib/pwn/ai/agent/mistakes.rb +126 -17
  40. data/lib/pwn/ai/agent/open_goal.rb +25 -9
  41. data/lib/pwn/ai/agent/policy.rb +158 -18
  42. data/lib/pwn/ai/agent/prompt_builder.rb +21 -11
  43. data/lib/pwn/ai/agent/prompt_cache.rb +44 -13
  44. data/lib/pwn/ai/agent/reflect.rb +9 -5
  45. data/lib/pwn/ai/agent/registry.rb +65 -12
  46. data/lib/pwn/ai/agent/result.rb +19 -10
  47. data/lib/pwn/ai/agent/reward.rb +150 -32
  48. data/lib/pwn/ai/agent/sast.rb +4 -1
  49. data/lib/pwn/ai/agent/swarm.rb +72 -36
  50. data/lib/pwn/ai/agent/task_summarizer.rb +165 -36
  51. data/lib/pwn/ai/agent/tool_guard.rb +105 -6
  52. data/lib/pwn/ai/agent/transparent_browser.rb +4 -1
  53. data/lib/pwn/ai/agent/turn_finalizer.rb +41 -21
  54. data/lib/pwn/ai/agent/vuln_gen.rb +6 -3
  55. data/lib/pwn/ai/agent.rb +4 -0
  56. data/lib/pwn/ai/anthropic.rb +41 -7
  57. data/lib/pwn/ai/gemini.rb +21 -11
  58. data/lib/pwn/ai/grok.rb +44 -6
  59. data/lib/pwn/ai/http_retry.rb +40 -12
  60. data/lib/pwn/ai/ollama.rb +19 -10
  61. data/lib/pwn/ai/open_ai.rb +81 -30
  62. data/lib/pwn/ai/open_web_ui.rb +20 -14
  63. data/lib/pwn/ai/red_team/agent_protocol_abuse.rb +7 -1
  64. data/lib/pwn/ai/red_team/data_and_model_poisoning.rb +7 -1
  65. data/lib/pwn/ai/red_team/excessive_agency.rb +7 -1
  66. data/lib/pwn/ai/red_team/hidden_context_exposure.rb +7 -1
  67. data/lib/pwn/ai/red_team/insecure_output_handling.rb +7 -1
  68. data/lib/pwn/ai/red_team/jailbreak.rb +7 -1
  69. data/lib/pwn/ai/red_team/memory_poisoning.rb +7 -1
  70. data/lib/pwn/ai/red_team/multimodal_injection.rb +7 -1
  71. data/lib/pwn/ai/red_team/overreliance.rb +7 -1
  72. data/lib/pwn/ai/red_team/payload_splitting.rb +7 -1
  73. data/lib/pwn/ai/red_team/prompt_injection.rb +7 -1
  74. data/lib/pwn/ai/red_team/rag_poisoning.rb +7 -1
  75. data/lib/pwn/ai/red_team/sensitive_information_disclosure.rb +7 -1
  76. data/lib/pwn/ai/red_team/supply_chain.rb +7 -1
  77. data/lib/pwn/ai/red_team/system_prompt_extraction.rb +7 -1
  78. data/lib/pwn/ai/red_team/test_case_engine.rb +12 -9
  79. data/lib/pwn/ai/red_team/token_smuggling.rb +7 -1
  80. data/lib/pwn/ai/red_team/unbounded_consumption.rb +7 -1
  81. data/lib/pwn/ai/red_team/vector_and_embedding_weaknesses.rb +7 -1
  82. data/lib/pwn/ai/red_team.rb +4 -0
  83. data/lib/pwn/ai.rb +4 -0
  84. data/lib/pwn/aws/acm.rb +5 -2
  85. data/lib/pwn/aws/api_gateway.rb +10 -7
  86. data/lib/pwn/aws/app_stream.rb +5 -2
  87. data/lib/pwn/aws/application_auto_scaling.rb +5 -2
  88. data/lib/pwn/aws/application_discovery_service.rb +5 -2
  89. data/lib/pwn/aws/auto_scaling.rb +5 -2
  90. data/lib/pwn/aws/batch.rb +5 -2
  91. data/lib/pwn/aws/budgets.rb +5 -2
  92. data/lib/pwn/aws/cloud_formation.rb +5 -2
  93. data/lib/pwn/aws/cloud_front.rb +7 -4
  94. data/lib/pwn/aws/cloud_hsm.rb +5 -2
  95. data/lib/pwn/aws/cloud_search.rb +5 -2
  96. data/lib/pwn/aws/cloud_search_domain.rb +5 -2
  97. data/lib/pwn/aws/cloud_trail.rb +5 -2
  98. data/lib/pwn/aws/cloud_watch.rb +5 -2
  99. data/lib/pwn/aws/cloud_watch_events.rb +5 -2
  100. data/lib/pwn/aws/cloud_watch_logs.rb +5 -2
  101. data/lib/pwn/aws/code_build.rb +5 -2
  102. data/lib/pwn/aws/code_commit.rb +5 -2
  103. data/lib/pwn/aws/code_deploy.rb +5 -2
  104. data/lib/pwn/aws/code_pipeline.rb +5 -2
  105. data/lib/pwn/aws/cognito_identity.rb +5 -2
  106. data/lib/pwn/aws/cognito_identity_provider.rb +5 -2
  107. data/lib/pwn/aws/cognito_sync.rb +5 -2
  108. data/lib/pwn/aws/config_service.rb +5 -2
  109. data/lib/pwn/aws/data_pipleline.rb +5 -2
  110. data/lib/pwn/aws/database_migration_service.rb +5 -2
  111. data/lib/pwn/aws/device_farm.rb +5 -2
  112. data/lib/pwn/aws/direct_connect.rb +5 -2
  113. data/lib/pwn/aws/directory_service.rb +5 -2
  114. data/lib/pwn/aws/dynamo_db.rb +5 -2
  115. data/lib/pwn/aws/dynamo_db_streams.rb +5 -2
  116. data/lib/pwn/aws/ec2.rb +5 -2
  117. data/lib/pwn/aws/ecr.rb +5 -2
  118. data/lib/pwn/aws/ecs.rb +5 -2
  119. data/lib/pwn/aws/efs.rb +5 -2
  120. data/lib/pwn/aws/elasti_cache.rb +5 -2
  121. data/lib/pwn/aws/elastic_beanstalk.rb +8 -5
  122. data/lib/pwn/aws/elastic_load_balancing.rb +5 -2
  123. data/lib/pwn/aws/elastic_load_balancing_v2.rb +6 -3
  124. data/lib/pwn/aws/elastic_transcoder.rb +5 -2
  125. data/lib/pwn/aws/elasticsearch_service.rb +5 -2
  126. data/lib/pwn/aws/emr.rb +5 -2
  127. data/lib/pwn/aws/firehose.rb +5 -2
  128. data/lib/pwn/aws/game_lift.rb +5 -2
  129. data/lib/pwn/aws/glacier.rb +6 -3
  130. data/lib/pwn/aws/health.rb +5 -2
  131. data/lib/pwn/aws/iam.rb +10 -4
  132. data/lib/pwn/aws/import_export.rb +5 -2
  133. data/lib/pwn/aws/inspector.rb +5 -2
  134. data/lib/pwn/aws/iot.rb +5 -2
  135. data/lib/pwn/aws/iot_data_plane.rb +5 -2
  136. data/lib/pwn/aws/kinesis.rb +5 -2
  137. data/lib/pwn/aws/kinesis_analytics.rb +5 -2
  138. data/lib/pwn/aws/kms.rb +5 -2
  139. data/lib/pwn/aws/lambda.rb +5 -2
  140. data/lib/pwn/aws/lambda_preview.rb +5 -2
  141. data/lib/pwn/aws/lex.rb +5 -2
  142. data/lib/pwn/aws/lightsail.rb +5 -2
  143. data/lib/pwn/aws/machine_learning.rb +5 -2
  144. data/lib/pwn/aws/marketplace_commerce_analytics.rb +5 -2
  145. data/lib/pwn/aws/marketplace_metering.rb +5 -2
  146. data/lib/pwn/aws/ops_works.rb +5 -2
  147. data/lib/pwn/aws/ops_works_cm.rb +5 -2
  148. data/lib/pwn/aws/pinpoint.rb +5 -2
  149. data/lib/pwn/aws/polly.rb +5 -2
  150. data/lib/pwn/aws/rds.rb +5 -2
  151. data/lib/pwn/aws/redshift.rb +5 -2
  152. data/lib/pwn/aws/rekognition.rb +5 -2
  153. data/lib/pwn/aws/route53.rb +5 -2
  154. data/lib/pwn/aws/route53_domains.rb +5 -2
  155. data/lib/pwn/aws/s3.rb +5 -2
  156. data/lib/pwn/aws/service_catalog.rb +5 -2
  157. data/lib/pwn/aws/ses.rb +5 -2
  158. data/lib/pwn/aws/shield.rb +5 -2
  159. data/lib/pwn/aws/simple_db.rb +5 -2
  160. data/lib/pwn/aws/sms.rb +5 -2
  161. data/lib/pwn/aws/snowball.rb +5 -2
  162. data/lib/pwn/aws/sns.rb +5 -2
  163. data/lib/pwn/aws/sqs.rb +5 -2
  164. data/lib/pwn/aws/ssm.rb +5 -2
  165. data/lib/pwn/aws/states.rb +5 -2
  166. data/lib/pwn/aws/storage_gateway.rb +5 -2
  167. data/lib/pwn/aws/sts.rb +4 -1
  168. data/lib/pwn/aws/support.rb +5 -2
  169. data/lib/pwn/aws/swf.rb +5 -2
  170. data/lib/pwn/aws/waf.rb +5 -2
  171. data/lib/pwn/aws/waf_regional.rb +5 -2
  172. data/lib/pwn/aws/workspaces.rb +5 -2
  173. data/lib/pwn/aws/x_ray.rb +5 -2
  174. data/lib/pwn/aws.rb +4 -0
  175. data/lib/pwn/banner/anon.rb +3 -0
  176. data/lib/pwn/banner/bubble.rb +3 -0
  177. data/lib/pwn/banner/cheshire.rb +3 -0
  178. data/lib/pwn/banner/code_cave.rb +3 -0
  179. data/lib/pwn/banner/dont_panic.rb +3 -0
  180. data/lib/pwn/banner/f_society.rb +3 -0
  181. data/lib/pwn/banner/fork_bomb.rb +3 -0
  182. data/lib/pwn/banner/jmp_esp.rb +3 -0
  183. data/lib/pwn/banner/matrix.rb +5 -1
  184. data/lib/pwn/banner/ninja.rb +3 -0
  185. data/lib/pwn/banner/off_the_air.rb +3 -0
  186. data/lib/pwn/banner/pirate.rb +3 -0
  187. data/lib/pwn/banner/radare2.rb +3 -0
  188. data/lib/pwn/banner/radare2_ai.rb +3 -0
  189. data/lib/pwn/banner/white_rabbit.rb +3 -0
  190. data/lib/pwn/banner.rb +6 -2
  191. data/lib/pwn/blockchain/btc.rb +8 -3
  192. data/lib/pwn/blockchain/eth.rb +10 -3
  193. data/lib/pwn/blockchain.rb +4 -0
  194. data/lib/pwn/bounty/lifecycle_authz_replay.rb +46 -27
  195. data/lib/pwn/bounty.rb +4 -0
  196. data/lib/pwn/config.rb +79 -13
  197. data/lib/pwn/cron.rb +297 -20
  198. data/lib/pwn/driver.rb +2 -18
  199. data/lib/pwn/ffi/adalm_pluto.rb +65 -11
  200. data/lib/pwn/ffi/fftw.rb +31 -6
  201. data/lib/pwn/ffi/hack_rf.rb +59 -8
  202. data/lib/pwn/ffi/liquid.rb +63 -10
  203. data/lib/pwn/ffi/rtl_sdr.rb +35 -5
  204. data/lib/pwn/ffi/soapy_sdr.rb +60 -10
  205. data/lib/pwn/ffi/stdio.rb +5 -8
  206. data/lib/pwn/ffi/volk.rb +36 -7
  207. data/lib/pwn/ffi.rb +12 -0
  208. data/lib/pwn/memory.rb +136 -16
  209. data/lib/pwn/memory_index.rb +34 -19
  210. data/lib/pwn/migrate.rb +34 -24
  211. data/lib/pwn/module_skills.rb +39 -8
  212. data/lib/pwn/plugins/aflplusplus.rb +52 -0
  213. data/lib/pwn/plugins/android.rb +65 -245
  214. data/lib/pwn/plugins/artifact_registry.rb +71 -0
  215. data/lib/pwn/plugins/assembly.rb +9 -4
  216. data/lib/pwn/plugins/authentication_helper.rb +8 -5
  217. data/lib/pwn/plugins/baresip.rb +59 -12
  218. data/lib/pwn/plugins/basic_auth.rb +9 -3
  219. data/lib/pwn/plugins/beef.rb +28 -18
  220. data/lib/pwn/plugins/binary_parser.rb +133 -0
  221. data/lib/pwn/plugins/black_duck_binary_analysis.rb +63 -39
  222. data/lib/pwn/plugins/burp_suite.rb +98 -68
  223. data/lib/pwn/plugins/bus_pirate.rb +15 -8
  224. data/lib/pwn/plugins/char.rb +33 -3
  225. data/lib/pwn/plugins/credential_attack.rb +99 -0
  226. data/lib/pwn/plugins/credit_card.rb +6 -1
  227. data/lib/pwn/plugins/dao_ldap.rb +19 -13
  228. data/lib/pwn/plugins/dao_mongo.rb +11 -5
  229. data/lib/pwn/plugins/dao_postgres.rb +28 -19
  230. data/lib/pwn/plugins/dao_sqlite3.rb +15 -6
  231. data/lib/pwn/plugins/defect_dojo.rb +38 -22
  232. data/lib/pwn/plugins/detect_os.rb +5 -0
  233. data/lib/pwn/plugins/doctor.rb +149 -0
  234. data/lib/pwn/plugins/ein.rb +3 -0
  235. data/lib/pwn/plugins/exploit_dev.rb +264 -0
  236. data/lib/pwn/plugins/file_fu.rb +11 -8
  237. data/lib/pwn/plugins/frida.rb +61 -0
  238. data/lib/pwn/plugins/fuzz.rb +9 -6
  239. data/lib/pwn/plugins/gdb.rb +95 -0
  240. data/lib/pwn/plugins/git.rb +19 -14
  241. data/lib/pwn/plugins/github.rb +38 -15
  242. data/lib/pwn/plugins/google_workspace.rb +188 -45
  243. data/lib/pwn/plugins/hacker_one.rb +159 -35
  244. data/lib/pwn/plugins/hunter.rb +6 -3
  245. data/lib/pwn/plugins/ip_info.rb +9 -4
  246. data/lib/pwn/plugins/irc.rb +28 -15
  247. data/lib/pwn/plugins/jenkins.rb +65 -57
  248. data/lib/pwn/plugins/jira_data_center.rb +30 -22
  249. data/lib/pwn/plugins/jobs.rb +109 -0
  250. data/lib/pwn/plugins/json_pathify.rb +9 -5
  251. data/lib/pwn/plugins/log.rb +113 -13
  252. data/lib/pwn/plugins/mail_agent.rb +87 -79
  253. data/lib/pwn/plugins/metasploit.rb +11 -6
  254. data/lib/pwn/plugins/monkey_patch.rb +3 -0
  255. data/lib/pwn/plugins/msr206.rb +42 -28
  256. data/lib/pwn/plugins/nessus_cloud.rb +44 -4
  257. data/lib/pwn/plugins/nexpose_vuln_scan.rb +40 -24
  258. data/lib/pwn/plugins/nmap_it.rb +14 -34
  259. data/lib/pwn/plugins/nuclei.rb +57 -0
  260. data/lib/pwn/plugins/oauth2.rb +11 -5
  261. data/lib/pwn/plugins/ocr.rb +3 -0
  262. data/lib/pwn/plugins/open_api.rb +5 -2
  263. data/lib/pwn/plugins/openvas.rb +33 -25
  264. data/lib/pwn/plugins/packet.rb +152 -31
  265. data/lib/pwn/plugins/pdf_parse.rb +5 -2
  266. data/lib/pwn/plugins/pony.rb +86 -1
  267. data/lib/pwn/plugins/process_tube.rb +120 -0
  268. data/lib/pwn/plugins/ps.rb +7 -1
  269. data/lib/pwn/plugins/pwn_logger.rb +6 -2
  270. data/lib/pwn/plugins/rabbit_mq.rb +12 -7
  271. data/lib/pwn/plugins/radare2.rb +253 -0
  272. data/lib/pwn/plugins/recon.rb +161 -0
  273. data/lib/pwn/plugins/repl.rb +122 -1
  274. data/lib/pwn/plugins/scannable_codes.rb +5 -1
  275. data/lib/pwn/plugins/serial.rb +24 -14
  276. data/lib/pwn/plugins/shodan.rb +54 -35
  277. data/lib/pwn/plugins/slack_client.rb +11 -6
  278. data/lib/pwn/plugins/sock.rb +16 -8
  279. data/lib/pwn/plugins/spider.rb +5 -2
  280. data/lib/pwn/plugins/sqlmap.rb +49 -0
  281. data/lib/pwn/plugins/ssn.rb +3 -0
  282. data/lib/pwn/plugins/thread_pool.rb +6 -9
  283. data/lib/pwn/plugins/tor.rb +9 -4
  284. data/lib/pwn/plugins/transparent_browser.rb +62 -107
  285. data/lib/pwn/plugins/tty_spinner.rb +16 -2
  286. data/lib/pwn/plugins/twitter_api.rb +6 -2
  287. data/lib/pwn/plugins/uri_scheme.rb +4 -1
  288. data/lib/pwn/plugins/vault.rb +12 -3
  289. data/lib/pwn/plugins/vin.rb +24 -12
  290. data/lib/pwn/plugins/voice.rb +7 -2
  291. data/lib/pwn/plugins/volatility.rb +48 -0
  292. data/lib/pwn/plugins/vsphere.rb +9 -5
  293. data/lib/pwn/plugins/xxd.rb +12 -43
  294. data/lib/pwn/plugins/zaproxy.rb +30 -16
  295. data/lib/pwn/plugins.rb +19 -0
  296. data/lib/pwn/reports/ai_red_team.rb +6 -2
  297. data/lib/pwn/reports/csv.rb +8 -1
  298. data/lib/pwn/reports/fuzz.rb +5 -2
  299. data/lib/pwn/reports/html.rb +8 -1
  300. data/lib/pwn/reports/html_footer.rb +4 -3
  301. data/lib/pwn/reports/html_header.rb +6 -2
  302. data/lib/pwn/reports/json.rb +8 -1
  303. data/lib/pwn/reports/markdown.rb +8 -1
  304. data/lib/pwn/reports/pdf.rb +8 -1
  305. data/lib/pwn/reports/phone.rb +5 -2
  306. data/lib/pwn/reports/sast.rb +6 -2
  307. data/lib/pwn/reports/uri_buster.rb +5 -2
  308. data/lib/pwn/reports/xml.rb +8 -1
  309. data/lib/pwn/reports.rb +19 -0
  310. data/lib/pwn/sast/amqp_connect_as_guest.rb +9 -3
  311. data/lib/pwn/sast/apache_file_system_util_api.rb +9 -3
  312. data/lib/pwn/sast/aws.rb +9 -3
  313. data/lib/pwn/sast/banned_function_calls_c.rb +9 -3
  314. data/lib/pwn/sast/base64.rb +9 -3
  315. data/lib/pwn/sast/beef_hook.rb +9 -3
  316. data/lib/pwn/sast/cmd_execution_go_lang.rb +9 -3
  317. data/lib/pwn/sast/cmd_execution_java.rb +9 -3
  318. data/lib/pwn/sast/cmd_execution_python.rb +9 -3
  319. data/lib/pwn/sast/cmd_execution_ruby.rb +9 -3
  320. data/lib/pwn/sast/cmd_execution_scala.rb +9 -3
  321. data/lib/pwn/sast/csrf.rb +9 -3
  322. data/lib/pwn/sast/deserial_java.rb +9 -3
  323. data/lib/pwn/sast/emoticon.rb +9 -3
  324. data/lib/pwn/sast/eval.rb +9 -3
  325. data/lib/pwn/sast/factory.rb +9 -3
  326. data/lib/pwn/sast/http_authorization_header.rb +9 -3
  327. data/lib/pwn/sast/inner_html.rb +9 -3
  328. data/lib/pwn/sast/keystore.rb +9 -3
  329. data/lib/pwn/sast/local_storage.rb +9 -3
  330. data/lib/pwn/sast/location_hash.rb +9 -3
  331. data/lib/pwn/sast/log4j.rb +9 -3
  332. data/lib/pwn/sast/logger.rb +9 -3
  333. data/lib/pwn/sast/md5.rb +9 -3
  334. data/lib/pwn/sast/outer_html.rb +9 -3
  335. data/lib/pwn/sast/padding_oracle.rb +9 -3
  336. data/lib/pwn/sast/password.rb +9 -3
  337. data/lib/pwn/sast/php_input_mechanisms.rb +9 -3
  338. data/lib/pwn/sast/php_type_juggling.rb +9 -3
  339. data/lib/pwn/sast/pom_version.rb +9 -3
  340. data/lib/pwn/sast/port.rb +9 -3
  341. data/lib/pwn/sast/post_message.rb +9 -3
  342. data/lib/pwn/sast/private_key.rb +9 -3
  343. data/lib/pwn/sast/redirect.rb +9 -3
  344. data/lib/pwn/sast/redos.rb +9 -3
  345. data/lib/pwn/sast/shell.rb +9 -3
  346. data/lib/pwn/sast/signature.rb +9 -3
  347. data/lib/pwn/sast/sql.rb +9 -3
  348. data/lib/pwn/sast/ssl.rb +9 -3
  349. data/lib/pwn/sast/sudo.rb +9 -3
  350. data/lib/pwn/sast/task_tag.rb +9 -3
  351. data/lib/pwn/sast/test_case_engine.rb +11 -7
  352. data/lib/pwn/sast/throw_errors.rb +9 -3
  353. data/lib/pwn/sast/token.rb +9 -3
  354. data/lib/pwn/sast/type_script_type_juggling.rb +9 -3
  355. data/lib/pwn/sast/use_after_free.rb +9 -3
  356. data/lib/pwn/sast/version.rb +9 -3
  357. data/lib/pwn/sast/window_location_hash.rb +9 -3
  358. data/lib/pwn/sast.rb +4 -0
  359. data/lib/pwn/sdr/decoder/adsb.rb +36 -5
  360. data/lib/pwn/sdr/decoder/apt.rb +9 -6
  361. data/lib/pwn/sdr/decoder/base.rb +74 -22
  362. data/lib/pwn/sdr/decoder/bluetooth.rb +17 -5
  363. data/lib/pwn/sdr/decoder/dect.rb +12 -3
  364. data/lib/pwn/sdr/decoder/dsp.rb +229 -39
  365. data/lib/pwn/sdr/decoder/flex.rb +59 -11
  366. data/lib/pwn/sdr/decoder/gps.rb +12 -3
  367. data/lib/pwn/sdr/decoder/gsm.rb +24 -4
  368. data/lib/pwn/sdr/decoder/iridium.rb +12 -3
  369. data/lib/pwn/sdr/decoder/lora.rb +13 -4
  370. data/lib/pwn/sdr/decoder/lte.rb +27 -3
  371. data/lib/pwn/sdr/decoder/morse.rb +12 -3
  372. data/lib/pwn/sdr/decoder/p25.rb +12 -3
  373. data/lib/pwn/sdr/decoder/pager.rb +8 -5
  374. data/lib/pwn/sdr/decoder/pocsag.rb +29 -9
  375. data/lib/pwn/sdr/decoder/rds.rb +14 -8
  376. data/lib/pwn/sdr/decoder/rfid.rb +12 -3
  377. data/lib/pwn/sdr/decoder/rtl433.rb +12 -3
  378. data/lib/pwn/sdr/decoder/rtty.rb +8 -5
  379. data/lib/pwn/sdr/decoder/wifi.rb +12 -3
  380. data/lib/pwn/sdr/decoder/zigbee.rb +12 -3
  381. data/lib/pwn/sdr/decoder.rb +9 -0
  382. data/lib/pwn/sdr/flipper_zero.rb +17 -10
  383. data/lib/pwn/sdr/frequency_allocation.rb +4 -1
  384. data/lib/pwn/sdr/gqrx.rb +178 -119
  385. data/lib/pwn/sdr/rfidler.rb +4 -1
  386. data/lib/pwn/sdr/son_micro_rfid.rb +37 -24
  387. data/lib/pwn/sdr.rb +14 -0
  388. data/lib/pwn/sessions.rb +86 -16
  389. data/lib/pwn/setup.rb +94 -37
  390. data/lib/pwn/version.rb +1 -1
  391. data/lib/pwn/www/app_cobalt_io.rb +11 -5
  392. data/lib/pwn/www/bing.rb +10 -5
  393. data/lib/pwn/www/bug_crowd.rb +11 -5
  394. data/lib/pwn/www/checkip.rb +8 -4
  395. data/lib/pwn/www/coinbase_pro.rb +11 -5
  396. data/lib/pwn/www/duckduckgo.rb +12 -6
  397. data/lib/pwn/www/facebook.rb +11 -5
  398. data/lib/pwn/www/github.rb +11 -5
  399. data/lib/pwn/www/google.rb +11 -5
  400. data/lib/pwn/www/hacker_one.rb +20 -9
  401. data/lib/pwn/www/linkedin.rb +11 -5
  402. data/lib/pwn/www/pandora.rb +11 -5
  403. data/lib/pwn/www/pastebin.rb +9 -4
  404. data/lib/pwn/www/paypal.rb +19 -11
  405. data/lib/pwn/www/synack.rb +11 -5
  406. data/lib/pwn/www/torch.rb +13 -8
  407. data/lib/pwn/www/trading_view.rb +11 -5
  408. data/lib/pwn/www/twitter.rb +11 -5
  409. data/lib/pwn/www/uber.rb +11 -5
  410. data/lib/pwn/www/upwork.rb +11 -5
  411. data/lib/pwn/www/wayback_machine.rb +12 -6
  412. data/lib/pwn/www/youtube.rb +10 -5
  413. data/lib/pwn/www.rb +4 -0
  414. data/spec/conventions_spec.rb +118 -2
  415. data/spec/lib/pwn/ai/agent/reward_spec.rb +9 -0
  416. data/spec/lib/pwn/plugins/aflplusplus_spec.rb +13 -0
  417. data/spec/lib/pwn/plugins/artifact_registry_spec.rb +13 -0
  418. data/spec/lib/pwn/plugins/binary_parser_spec.rb +21 -0
  419. data/spec/lib/pwn/plugins/credential_attack_spec.rb +13 -0
  420. data/spec/lib/pwn/plugins/doctor_spec.rb +23 -0
  421. data/spec/lib/pwn/plugins/exploit_dev_spec.rb +23 -0
  422. data/spec/lib/pwn/plugins/frida_spec.rb +13 -0
  423. data/spec/lib/pwn/plugins/gdb_spec.rb +13 -0
  424. data/spec/lib/pwn/plugins/jobs_spec.rb +13 -0
  425. data/spec/lib/pwn/plugins/nuclei_spec.rb +13 -0
  426. data/spec/lib/pwn/plugins/process_tube_spec.rb +13 -0
  427. data/spec/lib/pwn/plugins/radare2_spec.rb +13 -0
  428. data/spec/lib/pwn/plugins/recon_spec.rb +26 -0
  429. data/spec/lib/pwn/plugins/sqlmap_spec.rb +13 -0
  430. data/spec/lib/pwn/plugins/volatility_spec.rb +13 -0
  431. data/third_party/pwn_rdoc.jsonl +126 -5
  432. metadata +47 -3
  433. data/etc/default_skills/pwn/memory_index/references/urls.md +0 -4
  434. data/etc/default_skills/pwn/plugins/transparent_browser/references/urls.md +0 -3
@@ -658,49 +658,173 @@ module PWN
658
658
 
659
659
  public_class_method def self.help
660
660
  puts "USAGE:
661
- h1_obj = #{self}.login(
662
- username: 'optional - default PWN::Env[:plugins][:hackerone][:username]',
663
- api_key: 'optional - default PWN::Env[:plugins][:hackerone][:api_key]'
661
+ # Run login and return its result
662
+ #{self}.login(
663
+ username: 'optional - username (default PWN::Env[:plugins][:hackerone][:username])',
664
+ api_key: 'optional - api token (default PWN::Env; will prompt if still nil)',
665
+ token: 'optional - alias for api_key'
664
666
  )
665
667
 
666
- reports = #{self}.get_me_reports(h1_obj: h1_obj)
667
- report = #{self}.get_report(id: 12345)
668
- report = #{self}.create_report(
669
- team_handle: 'security',
670
- title: 'Example',
671
- vulnerability_information: 'Details...'
668
+ # Run api and return its result
669
+ #{self}.api(
670
+ path: 'required - path relative to /v1/hackers (e.g. me/reports)',
671
+ method: 'optional - :get|:post|:put|:patch|:delete (default :get)',
672
+ params: 'optional - query params Hash',
673
+ body: 'optional - request body Hash/Array/String (defaults to opts[:http_body])',
674
+ username: 'optional - username value consumed by #api',
675
+ api_key: 'optional - api key value consumed by #api',
676
+ h1_obj: 'optional - session from #login (supplies username/api_key)',
677
+ raw: 'optional - return raw response (default false)',
678
+ http_method: 'optional - http method value consumed by #api (defaults to :get)',
679
+ http_body: 'optional - http body value consumed by #api'
672
680
  )
673
681
 
674
- balance = #{self}.get_balance
675
- earnings = #{self}.get_earnings
676
- payouts = #{self}.get_payouts
677
-
678
- programs = #{self}.get_programs
679
- program = #{self}.get_program(handle: 'security')
680
- scopes = #{self}.get_structured_scopes(handle: 'security')
681
- excl = #{self}.get_scope_exclusions(handle: 'security')
682
- weak = #{self}.get_weaknesses(handle: 'security')
683
-
684
- items = #{self}.get_hacktivity
685
-
686
- intents = #{self}.get_report_intents
687
- intent = #{self}.get_report_intent(id: 1)
688
- intent = #{self}.create_report_intent(body: { data: { type: 'report-intent', attributes: {} } })
689
- intent = #{self}.update_report_intent(id: 1, body: { data: { type: 'report-intent', attributes: {} } })
690
- #{self}.submit_report_intent(id: 1)
691
- #{self}.delete_report_intent(id: 1)
692
- atts = #{self}.get_report_intent_attachments(report_intent_id: 1)
693
- #{self}.delete_report_intent_attachment(report_intent_id: 1, id: 2)
694
-
695
- json = #{self}.api(
696
- path: 'me/reports',
697
- method: :get,
698
- params: { page: { number: 1 } }
682
+ # ---- Reports -------------------------------------------------------
683
+ #{self}.get_me_reports(
684
+ params: 'optional - query params Hash (e.g. page/filter)',
685
+ username: 'optional - optional, api_key: optional, h1_obj: optional'
699
686
  )
700
687
 
701
- #{self}.logout(h1_obj: h1_obj)
688
+ # Run get report and return its result
689
+ #{self}.get_report(
690
+ id: 'required - report id',
691
+ username: 'optional - optional, api_key: optional, h1_obj: optional',
692
+ params: 'optional - params value consumed by #get_report'
693
+ )
694
+
695
+ # Run create report and return its result
696
+ #{self}.create_report(
697
+ team_handle: 'required - program handle',
698
+ title: 'required - report title',
699
+ vulnerability_information: 'required - detailed description',
700
+ impact: 'optional - impact text',
701
+ severity_rating: 'optional - none|low|medium|high|critical',
702
+ weakness_id: 'optional - weakness id integer',
703
+ structured_scope_id: 'optional - structured scope id value consumed by #create_report',
704
+ body: 'optional - full JSON:API body Hash (overrides attribute kwargs)',
705
+ username: 'optional - optional, api_key: optional, h1_obj: optional'
706
+ )
707
+
708
+ # ---- Payments ------------------------------------------------------
709
+ #{self}.get_balance(
710
+ username: 'optional - optional, api_key: optional, h1_obj: optional'
711
+ )
712
+
713
+ # Run get earnings and return its result
714
+ #{self}.get_earnings(
715
+ params: 'optional - query params Hash',
716
+ username: 'optional - optional, api_key: optional, h1_obj: optional'
717
+ )
718
+
719
+ # Run get payouts and return its result
720
+ #{self}.get_payouts(
721
+ params: 'optional - query params Hash',
722
+ username: 'optional - optional, api_key: optional, h1_obj: optional'
723
+ )
724
+
725
+ # ---- Programs -------------------------------------------------------
726
+ #{self}.get_programs(
727
+ params: 'optional - query params Hash',
728
+ username: 'optional - optional, api_key: optional, h1_obj: optional'
729
+ )
730
+
731
+ # Run get program and return its result
732
+ #{self}.get_program(
733
+ handle: 'required - program handle',
734
+ username: 'optional - optional, api_key: optional, h1_obj: optional',
735
+ params: 'optional - params value consumed by #get_program'
736
+ )
737
+
738
+ # Run get structured scopes and return its result
739
+ #{self}.get_structured_scopes(
740
+ handle: 'required - program handle',
741
+ params: 'optional - params value consumed by #get_structured_scopes',
742
+ username: 'optional - optional, api_key: optional, h1_obj: optional'
743
+ )
744
+
745
+ # Run get scope exclusions and return its result
746
+ #{self}.get_scope_exclusions(
747
+ handle: 'required - program handle',
748
+ params: 'optional - params value consumed by #get_scope_exclusions',
749
+ username: 'optional - optional, api_key: optional, h1_obj: optional'
750
+ )
751
+
752
+ # Run get weaknesses and return its result
753
+ #{self}.get_weaknesses(
754
+ handle: 'required - program handle',
755
+ params: 'optional - params value consumed by #get_weaknesses',
756
+ username: 'optional - optional, api_key: optional, h1_obj: optional'
757
+ )
758
+
759
+ # ---- Hacktivity -----------------------------------------------------
760
+ #{self}.get_hacktivity(
761
+ params: 'optional - query params Hash',
762
+ username: 'optional - optional, api_key: optional, h1_obj: optional'
763
+ )
764
+
765
+ # ---- Report Intents ------------------------------------------------
766
+ #{self}.get_report_intents(
767
+ params: 'optional - params value consumed by #get_report_intents',
768
+ username: 'optional - optional, api_key: optional, h1_obj: optional'
769
+ )
770
+
771
+ # Run get report intent and return its result
772
+ #{self}.get_report_intent(
773
+ id: 'required - report intent id',
774
+ username: 'optional - optional, api_key: optional, h1_obj: optional',
775
+ params: 'optional - params value consumed by #get_report_intent'
776
+ )
777
+
778
+ # Run create report intent and return its result
779
+ #{self}.create_report_intent(
780
+ body: 'required - full JSON:API body Hash',
781
+ username: 'optional - optional, api_key: optional, h1_obj: optional'
782
+ )
783
+
784
+ # Run update report intent and return its result
785
+ #{self}.update_report_intent(
786
+ id: 'required - report intent id',
787
+ body: 'required - full JSON:API body Hash',
788
+ username: 'optional - optional, api_key: optional, h1_obj: optional'
789
+ )
790
+
791
+ # Run delete report intent and return its result
792
+ #{self}.delete_report_intent(
793
+ id: 'required - report intent id',
794
+ username: 'optional - optional, api_key: optional, h1_obj: optional'
795
+ )
796
+
797
+ # Run submit report intent and return its result
798
+ #{self}.submit_report_intent(
799
+ id: 'required - report intent id',
800
+ body: 'optional - JSON:API body Hash',
801
+ username: 'optional - optional, api_key: optional, h1_obj: optional'
802
+ )
803
+
804
+ # Run get report intent attachments and return its result
805
+ #{self}.get_report_intent_attachments(
806
+ report_intent_id: 'required - report intent id value consumed by #get_report_intent_attachments (defaults to opts[:id])',
807
+ username: 'optional - optional, api_key: optional, h1_obj: optional',
808
+ id: 'required - id value consumed by #get_report_intent_attachments',
809
+ params: 'optional - params value consumed by #get_report_intent_attachments'
810
+ )
811
+
812
+ # Run delete report intent attachment and return its result
813
+ #{self}.delete_report_intent_attachment(
814
+ report_intent_id: 'required - report intent id value consumed by #delete_report_intent_attachment',
815
+ id: 'required - attachment id',
816
+ username: 'optional - optional, api_key: optional, h1_obj: optional'
817
+ )
818
+
819
+ # Clears the session hash in-place (no server-side session to destroy)
820
+ #{self}.logout(
821
+ h1_obj: 'required - required h1_obj returned from #login method'
822
+ )
823
+
824
+ # Print the AUTHOR(S) string for this module.
702
825
  #{self}.authors
703
826
  "
827
+ constants.sort
704
828
  end
705
829
  end
706
830
  end
@@ -142,18 +142,21 @@ module PWN
142
142
 
143
143
  public_class_method def self.help
144
144
  puts "USAGE:
145
- search_results = #{self}.query(
146
- api_key: 'required hunter api key',
145
+ # Run a search using the open session.
146
+ #{self}.search(
147
+ api_key: 'required - required hunter api key',
147
148
  query: 'required - hunter search query',
148
149
  start_time: 'required - start date for the search (format is yyyy-mm-dd)',
149
150
  end_time: 'required - end date for the search (format is yyyy-mm-dd)',
150
151
  start_page: 'optional - starting page number for pagination (default is 1)',
151
152
  page_size: 'optional - number of results per page (default is 10)',
152
- fields: 'optional - comma-separated list of fields 'product,transport_protocol,protocol,banner,country,province,city,asn,org,web,updated_at' (default is nil)'
153
+ fields: 'optional - comma-separated list of fields product,transport_protocol,protocol,banner,country,province,city,asn,org,web,updated_at (default is nil)'
153
154
  )
154
155
 
156
+ # Print the AUTHOR(S) string for this module.
155
157
  #{self}.authors
156
158
  "
159
+ constants.sort
157
160
  end
158
161
  end
159
162
  end
@@ -235,29 +235,34 @@ module PWN
235
235
 
236
236
  public_class_method def self.help
237
237
  puts "USAGE:
238
- is_rfc1918 = #{self}.check_rfc1918(
238
+ # Run check rfc1918 and return its result
239
+ #{self}.check_rfc1918(
239
240
  ip: 'required - IP to check'
240
241
  )
241
242
 
242
- ip_info_struc = #{self}.get(
243
+ # Run get and return its result
244
+ #{self}.get(
243
245
  target: 'required - IP or Host to lookup',
244
246
  proxy: 'optional - use a proxy',
245
- tls_port: 'optional port to check cert for Domain Name (default: 443). Will not execute if proxy parameter is set.',
247
+ tls_port: 'optional - optional port to check cert for Domain Name (default: 443). Will not execute if proxy parameter is set.',
246
248
  skip_api: 'optional - skip the API call',
247
249
  dns_server: 'optional - DNS server to use for lookup (default: your default DNS server)'
248
250
  )
249
251
 
252
+ # Run bruteforce subdomains and return its result
250
253
  #{self}.bruteforce_subdomains(
251
254
  parent_domain: 'required - Parent Domain to brute force',
252
255
  dictionary: 'required - Dictionary to use for subdomain brute force',
253
256
  max_threads: 'optional - Maximum number of threads to use (default: 9)',
254
257
  proxy: 'optional - use a proxy',
255
- tls_port: 'optional port to check cert for Domain Name (default: 443). Will not execute if proxy parameter is set.',
258
+ tls_port: 'optional - optional port to check cert for Domain Name (default: 443). Will not execute if proxy parameter is set.',
256
259
  results_file: 'optional - File to write results to (default: /tmp/parent_domain-timestamp-pwn_bruteforce_subdomains.txt)'
257
260
  )
258
261
 
262
+ # Print the AUTHOR(S) string for this module.
259
263
  #{self}.authors
260
264
  "
265
+ constants.sort
261
266
  end
262
267
  end
263
268
  end
@@ -249,63 +249,76 @@ module PWN
249
249
 
250
250
  public_class_method def self.help
251
251
  puts "USAGE:
252
- irc_obj = #{self}.connect(
253
- host: 'required - host or ip',
254
- port: 'required - host port',
255
- nick: 'required - nickname',
252
+ # Run connect and return its result
253
+ #{self}.connect(
254
+ host: 'required - host or ip (defaults to 127.0.0.1)',
255
+ port: 'required - host port (defaults to 6667)',
256
+ nick: 'required - nick value consumed by #connect',
256
257
  real: 'optional - real name (defaults to value of nick)',
257
258
  tls: 'optional - boolean connect to host socket using TLS (defaults to false)'
258
259
  )
259
260
 
260
- #{self}.ping(
261
+ # Run join and return its result
262
+ #{self}.join(
261
263
  irc_obj: 'required - irc_obj returned from #connect method',
262
- message: 'required - message to send'
264
+ nick: 'required - nick value consumed by #join',
265
+ chan: 'required - channel to join'
263
266
  )
264
267
 
265
- #{self}.pong(
268
+ # Run names and return its result
269
+ #{self}.names(
266
270
  irc_obj: 'required - irc_obj returned from #connect method',
267
- message: 'required - message to send'
271
+ chan: 'required - channel to list names'
268
272
  )
269
273
 
274
+ # Run privmsg and return its result
270
275
  #{self}.privmsg(
271
276
  irc_obj: 'required - irc_obj returned from #connect method',
272
277
  chan: 'required - channel to send message',
273
- message: 'required - message to send'
278
+ message: 'required - message to send',
279
+ nick: 'optional - nick value consumed by #privmsg'
274
280
  )
275
281
 
276
- #{self}.join(
282
+ # Run ping and return its result
283
+ #{self}.ping(
277
284
  irc_obj: 'required - irc_obj returned from #connect method',
278
- nick: 'required - nickname',
279
- chan: 'required - channel to join'
285
+ message: 'required - message to send'
280
286
  )
281
287
 
282
- #{self}.names(
288
+ # Run pong and return its result
289
+ #{self}.pong(
283
290
  irc_obj: 'required - irc_obj returned from #connect method',
284
- chan: 'required - channel to list names'
291
+ message: 'required - message to send'
285
292
  )
286
293
 
294
+ # Run part and return its result
287
295
  #{self}.part(
288
296
  irc_obj: 'required - irc_obj returned from #connect method',
289
297
  chan: 'required - channel to part',
290
298
  message: 'optional - message to send when parting'
291
299
  )
292
300
 
301
+ # Run quit and return its result
293
302
  #{self}.quit(
294
303
  irc_obj: 'required - irc_obj returned from #connect method',
295
304
  message: 'optional - message to send when quitting'
296
305
  )
297
306
 
307
+ # Run listen and return its result
298
308
  #{self}.listen(
299
309
  irc_obj: 'required - irc_obj returned from #connect method',
300
310
  verbose: 'optional - boolean to enable verbose output (defaults to false)'
301
311
  )
302
312
 
303
- irc_obj = #{self}.disconnect(
313
+ # Run disconnect and return its result
314
+ #{self}.disconnect(
304
315
  irc_obj: 'required - irc_obj returned from #connect method'
305
316
  )
306
317
 
318
+ # Print the AUTHOR(S) string for this module.
307
319
  #{self}.authors
308
320
  "
321
+ constants.sort
309
322
  end
310
323
  end
311
324
  end
@@ -442,95 +442,103 @@ module PWN
442
442
  # Display Usage for this Module
443
443
 
444
444
  public_class_method def self.help
445
- puts %{USAGE:
446
- jenkins_obj = #{self}.connect(
447
- ip: 'required host/ip of Jenkins Server',
448
- port: 'optional tcp port (defaults to 8080),
449
- username: 'optional username (functionality will be limited if ommitted)',
450
- api_key: 'optional api_key (functionality will be limited if ommitted)',
451
- identity_file: 'optional ssh private key path to AuthN w/ Jenkins PREFERRED over username/api_key',
452
- ssl: 'optional connect over TLS (defaults to true),
453
- proxy: 'optional debug proxy rest api requests to jenkins (e.g. "http://127.0.0.1:8080")''
445
+ puts "USAGE:
446
+ # Run connect and return its result
447
+ #{self}.connect(
448
+ ip: 'required - required host/ip of Jenkins Server',
449
+ port: 'optional - optional tcp port (defaults to 8080',
450
+ username: 'optional - optional username (functionality will be limited if ommitted)',
451
+ api_key: 'optional - optional api_key (functionality will be limited if ommitted)',
452
+ identity_file: 'optional - optional ssh private key path to AuthN w/ Jenkins PREFERRED over username/api_key',
453
+ ssl: 'optional - optional connect over TLS (defaults to true',
454
+ proxy: 'optional - optional debug proxy rest api requests to jenkins (e.g. http://127.0.0.1:8080)'
454
455
  )
455
- puts jenkins_obj.public_methods
456
456
 
457
+ # Run create user and return its result
457
458
  #{self}.create_user(
458
- jenkins_obj: 'required - jenkins_obj returned from #connect method',
459
- username: 'required - user to create',
460
- password: 'optional - password for new user (will prompt if nil)'
461
- fullname: 'required - full name of new user'
462
- email: 'required - email address of new user'
459
+ jenkins_obj: 'optional - jenkins obj value consumed by #create_user',
460
+ username: 'optional - username value consumed by #create_user',
461
+ password: 'optional - password value consumed by #create_user',
462
+ fullname: 'optional - fullname value consumed by #create_user',
463
+ email: 'optional - email value consumed by #create_user'
463
464
  )
464
465
 
466
+ # Run create ssh credential and return its result
465
467
  #{self}.create_ssh_credential(
466
- jenkins_obj: 'required - jenkins_obj returned from #connect method',
467
- username: 'required - username for new credential'
468
- private_key_path: 'required - path of private ssh key for new credential'
469
- key_passphrase: 'optional - private key passphrase for new credential'
470
- credential_id: 'optional but recommended - useful when creating userland jobs',
471
- description: 'optional - description of new credential'
472
- domain: 'optional - defaults to GLOBAL',
473
- scope: 'optional - GLOBAL or SYSTEM (defaults to GLOBAL)'
468
+ jenkins_obj: 'optional - jenkins obj value consumed by #create_ssh_credential',
469
+ username: 'optional - username value consumed by #create_ssh_credential',
470
+ private_key_path: 'optional - private key path value consumed by #create_ssh_credential',
471
+ key_passphrase: 'optional - key passphrase value consumed by #create_ssh_credential',
472
+ credential_id: 'optional - credential id value consumed by #create_ssh_credential',
473
+ description: 'optional - description value consumed by #create_ssh_credential',
474
+ domain: 'optional - FQDN to query (e.g. example.com)',
475
+ scope: 'optional - scope value consumed by #create_ssh_credential'
474
476
  )
475
477
 
476
- git_repo_arr = #{self}.get_all_job_git_repos(
477
- jenkins_obj: 'required jenkins_obj returned from connect method'
478
+ # Run get all job git repos and return its result
479
+ #{self}.get_all_job_git_repos(
480
+ jenkins_obj: 'required - required jenkins_obj returned from #connect method'
478
481
  )
479
482
 
480
- git_repo_branches = #{self}.get_all_git_repo_branches_by_commit_date(
481
- jenkins_obj: 'required jenkins_obj returned from #connect method',
482
- job_name: 'required jenkins job name',
483
- git_url: 'required git url for git_repo'
483
+ # Run list nested jobs and return its result
484
+ #{self}.list_nested_jobs(
485
+ jenkins_obj: 'required - required jenkins_obj returned from #connect method',
486
+ view_path: 'required - required view path to list jobs'
484
487
  )
485
488
 
486
- nested_jobs_arr = #{self}.list_nested_jobs(
487
- jenkins_obj: 'required jenkins_obj returned from #connect method',
488
- view_path: 'required view path list jobs'
489
+ # Run list nested views and return its result
490
+ #{self}.list_nested_views(
491
+ jenkins_obj: 'required - required jenkins_obj returned from #connect method',
492
+ view_path: 'required - required view path list sub-views'
489
493
  )
490
494
 
491
- nested_views_arr = #{self}.list_nested_views(
492
- jenkins_obj: 'required jenkins_obj returned from #connect method',
493
- view_path: 'required view path list sub-views'
495
+ # Run create nested view and return its result
496
+ #{self}.create_nested_view(
497
+ jenkins_obj: 'optional - jenkins obj value consumed by #create_nested_view',
498
+ view_name: 'optional - view name value consumed by #create_nested_view',
499
+ create_in_view_path: 'optional - create in view path value consumed by #create_nested_view'
494
500
  )
495
501
 
496
- view_created_bool = #{self}.create_nested_view(
497
- jenkins_obj: 'required jenkins_obj returned from #connect method',
498
- view_path: 'required view path create',
499
- create_in_view_path: 'optional creates nested view within an existing nested view, defaults to / views'
502
+ # Run add job to nested view and return its result
503
+ #{self}.add_job_to_nested_view(
504
+ jenkins_obj: 'required - required jenkins_obj returned from #connect method',
505
+ view_path: 'required - required view path associate job',
506
+ job_name: 'required - required view path attach to a view'
500
507
  )
501
508
 
502
- add_job_to_nested_view_resp = #{self}.add_job_to_nested_view(
503
- jenkins_obj: 'required jenkins_obj returned from #connect method',
504
- view_path: 'required view path associate job',
505
- job_name: 'required view path attach to a view',
506
- )
507
-
508
- copy_job_resp = #{self}.copy_job_no_fail_on_exist(
509
- jenkins_obj: 'required jenkins_obj returned from #connect method',
510
- existing_job_name: 'required existing job to copt to new job',
511
- new_job_name: 'required name of new job'
509
+ # Run copy job no fail on exist and return its result
510
+ #{self}.copy_job_no_fail_on_exist(
511
+ jenkins_obj: 'required - required jenkins_obj returned from #connect method',
512
+ existing_job_name: 'required - required existing job to copt to new job',
513
+ new_job_name: 'required - required name of new job'
512
514
  )
513
515
 
516
+ # Run disable jobs by regex and return its result
514
517
  #{self}.disable_jobs_by_regex(
515
- jenkins_obj: 'required jenkins_obj returned from #connect method',
516
- regex: 'required regex pattern for matching jobs to disable e.g. :regex => "^M[0-9]"',
518
+ jenkins_obj: 'required - required jenkins_obj returned from #connect method',
519
+ regex: 'required - required regex pattern for matching jobs to disable e.g. :regex => ^M[0-9]'
517
520
  )
518
521
 
519
- #{self}.delete_job_by_regex(
520
- jenkins_obj: 'required jenkins_obj returned from #connect method',
521
- regex: 'required regex pattern for matching jobs to disable e.g. :regex => "^M[0-9]"',
522
+ # Run delete jobs by regex and return its result
523
+ #{self}.delete_jobs_by_regex(
524
+ jenkins_obj: 'required - required jenkins_obj returned from #connect method',
525
+ regex: 'required - required regex pattern for matching jobs to disable e.g. :regex => ^M[0-9]'
522
526
  )
523
527
 
528
+ # Run clear build queue and return its result
524
529
  #{self}.clear_build_queue(
525
- jenkins_obj: 'required jenkins_obj returned from #connect method',
530
+ jenkins_obj: 'required - required jenkins_obj returned from #connect method'
526
531
  )
527
532
 
533
+ # Run disconnect and return its result
528
534
  #{self}.disconnect(
529
- jenkins_obj: 'required jenkins_obj returned from connect method'
535
+ jenkins_obj: 'required - required jenkins_obj returned from #connect method'
530
536
  )
531
537
 
538
+ # Print the AUTHOR(S) string for this module.
532
539
  #{self}.authors
533
- }
540
+ "
541
+ constants.sort
534
542
  end
535
543
  end
536
544
  end
@@ -607,67 +607,75 @@ module PWN
607
607
 
608
608
  public_class_method def self.help
609
609
  puts "USAGE:
610
- all_fields = #{self}.get_all_fields
610
+ # Run get all fields and return its result
611
+ #{self}.get_all_fields
611
612
 
612
- user = #{self}.get_user(
613
- username: 'required - username to lookup (e.g. jane.doe')',
613
+ # Run get user and return its result
614
+ #{self}.get_user(
615
+ username: 'required - username to lookup (e.g. jane.doe) (defaults to PWN::Plugins::AuthenticationHelper.username)',
614
616
  params: 'optional - additional parameters to pass in the URI (e.g. expand, etc.)'
615
617
  )
616
618
 
617
- issue_resp = #{self}.get_issue(
619
+ # Run get issue and return its result
620
+ #{self}.get_issue(
618
621
  issue: 'required - issue to lookup (e.g. Bug, Issue, Story, or Epic ID)',
619
622
  params: 'optional - additional parameters to pass in the URI (e.g. fields, expand, etc.)'
620
623
  )
621
624
 
622
- issue_resp = #{self}.create_issue(
625
+ # Run create issue and return its result
626
+ #{self}.create_issue(
623
627
  project_key: 'required - project key (e.g. PWN)',
624
628
  summary: 'required - summary of the issue (e.g. Epic for PWN-1337)',
625
629
  issue_type: 'required - issue type (e.g. :epic, :story, :bug)',
626
630
  description: 'optional - description of the issue',
627
631
  epic_name: 'optional - name of the epic',
628
632
  additional_fields: 'optional - additional fields to set in the issue (e.g. labels, components, custom fields, etc.)',
629
- attachments: 'optional - array of attachment paths to upload to the issue (e.g. [\"/tmp/file1.txt\", \"/tmp/file2.txt\"])',
630
- comment: 'optional - comment to add to the issue (e.g. \"This is a comment\")'
633
+ attachments: 'optional - array of attachment paths to upload to the issue (e.g. [/tmp/file1.txt, /tmp/file2.txt])',
634
+ comment: 'optional - comment to add to the issue (e.g. This is a comment)'
631
635
  )
632
636
 
633
- issue_resp = #{self}.update_issue(
634
- issue: 'required - issue to update (e.g. Bug, Issue, Story, or Epic ID)',
637
+ # Run update issue and return its result
638
+ #{self}.update_issue(
635
639
  fields: 'required - fields to update in the issue (e.g. summary, description, labels, components, custom fields, etc.)',
636
- attachments: 'optional - array of attachment paths to upload to the issue (e.g. [\"/tmp/file1.txt\", \"/tmp/file2.txt\"])'
640
+ attachments: 'optional - array of attachment paths to upload to the issue (e.g. [/tmp/file1.txt, /tmp/file2.txt])',
641
+ issue: 'required - issue value consumed by #update_issue'
637
642
  )
638
643
 
639
- issue_resp = #{self}.issue_comment(
640
- issue: 'required - issue to comment on (e.g. Bug, Issue, Story, or Epic ID)',
644
+ # Run issue comment and return its result
645
+ #{self}.issue_comment(
646
+ issue: 'required - issue to delete (e.g. Bug, Issue, Story, or Epic ID)',
641
647
  comment_action: 'required - action to perform on the issue comment (e.g. :delete, :add, :update - Defaults to :add)',
642
648
  comment_id: 'optional - comment ID to delete or update (e.g. 10000)',
643
- author: 'optional - author of the comment (e.g. \"jane.doe\")',
644
- comment: 'optional - comment to add or update in the issue (e.g. \"This is a comment\")'
649
+ author: 'optional - author of the comment (e.g. jane.doe)',
650
+ comment: 'optional - comment to add or update in the issue (e.g. This is a comment)'
645
651
  )
646
652
 
647
- issue_type_metadata = #{self}.get_issue_type_metadata(
653
+ # Run get issue type metadata and return its result
654
+ #{self}.get_issue_type_metadata(
648
655
  project_key: 'required - project key (e.g. PWN)',
649
656
  issue_type_id: 'required - issue type ID (e.g. issue[:fields][:issuetype][:id] from #get_issue method)'
650
657
  )
651
658
 
652
- issue_resp = #{self}.clone_issue(
659
+ # Run clone issue and return its result
660
+ #{self}.clone_issue(
653
661
  issue: 'required - issue to clone (e.g. Bug, Issue, Story, or Epic ID)',
654
662
  copy_attachments: 'optional - boolean to indicate whether to copy attachments (Defaults to false)'
655
663
  )
656
664
 
657
- issue_resp = #{self}.delete_issue(
665
+ # Run delete issue and return its result
666
+ #{self}.delete_issue(
658
667
  issue: 'required - issue to delete (e.g. Bug, Issue, Story, or Epic ID)'
659
668
  )
660
669
 
661
- issue_resp = #{self}.delete_attachment(
670
+ # Run delete attachment and return its result
671
+ #{self}.delete_attachment(
662
672
  id: 'required - attachment ID to delete (e.g. 10000) found in #get_issue method'
663
673
  )
664
674
 
665
- **********************************************************************
666
- * For more information on the Jira Server REST API, see:
667
- * https://developer.atlassian.com/server/jira/platform/rest-apis/
668
-
675
+ # Print the AUTHOR(S) string for this module.
669
676
  #{self}.authors
670
677
  "
678
+ constants.sort
671
679
  end
672
680
  end
673
681
  end