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.
- checksums.yaml +4 -4
- data/documentation/Installation.md +1 -0
- data/etc/default_skills/pwn/ai/agent/extrospection/osint/bridges/SKILL.md +30 -8
- data/etc/default_skills/pwn/ai/agent/extrospection/osint/social/SKILL.md +30 -8
- data/etc/default_skills/pwn/ai/agent/extrospection/osint/social/references/urls.md +1 -1
- data/etc/default_skills/pwn/ai/agent/extrospection/references/urls.md +0 -1
- data/etc/default_skills/pwn/memory_index/SKILL.md +0 -4
- data/etc/default_skills/pwn/plugins/aflplusplus/SKILL.md +48 -0
- data/etc/default_skills/pwn/plugins/android/SKILL.md +1 -0
- data/etc/default_skills/pwn/plugins/artifact_registry/SKILL.md +49 -0
- data/etc/default_skills/pwn/plugins/binary_parser/SKILL.md +54 -0
- data/etc/default_skills/pwn/plugins/credential_attack/SKILL.md +51 -0
- data/etc/default_skills/pwn/plugins/doctor/SKILL.md +57 -0
- data/etc/default_skills/pwn/plugins/exploit_dev/SKILL.md +61 -0
- data/etc/default_skills/pwn/plugins/frida/SKILL.md +49 -0
- data/etc/default_skills/pwn/plugins/gdb/SKILL.md +52 -0
- data/etc/default_skills/pwn/plugins/jobs/SKILL.md +51 -0
- data/etc/default_skills/pwn/plugins/nuclei/SKILL.md +48 -0
- data/etc/default_skills/pwn/plugins/process_tube/SKILL.md +52 -0
- data/etc/default_skills/pwn/plugins/radare2/SKILL.md +59 -0
- data/etc/default_skills/pwn/plugins/recon/SKILL.md +55 -0
- data/etc/default_skills/pwn/plugins/recon/references/urls.md +5 -0
- data/etc/default_skills/pwn/plugins/sqlmap/SKILL.md +48 -0
- data/etc/default_skills/pwn/plugins/transparent_browser/SKILL.md +0 -4
- data/etc/default_skills/pwn/plugins/volatility/SKILL.md +48 -0
- data/lib/pwn/ai/agent/assembly.rb +4 -1
- data/lib/pwn/ai/agent/btc.rb +4 -1
- data/lib/pwn/ai/agent/burp_suite.rb +5 -2
- data/lib/pwn/ai/agent/curriculum.rb +89 -30
- data/lib/pwn/ai/agent/dispatch.rb +27 -16
- data/lib/pwn/ai/agent/extrospection/osint/bridges.rb +9 -18
- data/lib/pwn/ai/agent/extrospection/osint/social.rb +9 -18
- data/lib/pwn/ai/agent/extrospection.rb +185 -60
- data/lib/pwn/ai/agent/gqrx.rb +4 -1
- data/lib/pwn/ai/agent/hacker_one.rb +5 -2
- data/lib/pwn/ai/agent/learning.rb +142 -25
- data/lib/pwn/ai/agent/loop.rb +53 -46
- data/lib/pwn/ai/agent/metrics.rb +133 -23
- data/lib/pwn/ai/agent/mistakes.rb +126 -17
- data/lib/pwn/ai/agent/open_goal.rb +25 -9
- data/lib/pwn/ai/agent/policy.rb +158 -18
- data/lib/pwn/ai/agent/prompt_builder.rb +21 -11
- data/lib/pwn/ai/agent/prompt_cache.rb +44 -13
- data/lib/pwn/ai/agent/reflect.rb +9 -5
- data/lib/pwn/ai/agent/registry.rb +65 -12
- data/lib/pwn/ai/agent/result.rb +19 -10
- data/lib/pwn/ai/agent/reward.rb +150 -32
- data/lib/pwn/ai/agent/sast.rb +4 -1
- data/lib/pwn/ai/agent/swarm.rb +72 -36
- data/lib/pwn/ai/agent/task_summarizer.rb +165 -36
- data/lib/pwn/ai/agent/tool_guard.rb +105 -6
- data/lib/pwn/ai/agent/transparent_browser.rb +4 -1
- data/lib/pwn/ai/agent/turn_finalizer.rb +41 -21
- data/lib/pwn/ai/agent/vuln_gen.rb +6 -3
- data/lib/pwn/ai/agent.rb +4 -0
- data/lib/pwn/ai/anthropic.rb +41 -7
- data/lib/pwn/ai/gemini.rb +21 -11
- data/lib/pwn/ai/grok.rb +44 -6
- data/lib/pwn/ai/http_retry.rb +40 -12
- data/lib/pwn/ai/ollama.rb +19 -10
- data/lib/pwn/ai/open_ai.rb +81 -30
- data/lib/pwn/ai/open_web_ui.rb +20 -14
- data/lib/pwn/ai/red_team/agent_protocol_abuse.rb +7 -1
- data/lib/pwn/ai/red_team/data_and_model_poisoning.rb +7 -1
- data/lib/pwn/ai/red_team/excessive_agency.rb +7 -1
- data/lib/pwn/ai/red_team/hidden_context_exposure.rb +7 -1
- data/lib/pwn/ai/red_team/insecure_output_handling.rb +7 -1
- data/lib/pwn/ai/red_team/jailbreak.rb +7 -1
- data/lib/pwn/ai/red_team/memory_poisoning.rb +7 -1
- data/lib/pwn/ai/red_team/multimodal_injection.rb +7 -1
- data/lib/pwn/ai/red_team/overreliance.rb +7 -1
- data/lib/pwn/ai/red_team/payload_splitting.rb +7 -1
- data/lib/pwn/ai/red_team/prompt_injection.rb +7 -1
- data/lib/pwn/ai/red_team/rag_poisoning.rb +7 -1
- data/lib/pwn/ai/red_team/sensitive_information_disclosure.rb +7 -1
- data/lib/pwn/ai/red_team/supply_chain.rb +7 -1
- data/lib/pwn/ai/red_team/system_prompt_extraction.rb +7 -1
- data/lib/pwn/ai/red_team/test_case_engine.rb +12 -9
- data/lib/pwn/ai/red_team/token_smuggling.rb +7 -1
- data/lib/pwn/ai/red_team/unbounded_consumption.rb +7 -1
- data/lib/pwn/ai/red_team/vector_and_embedding_weaknesses.rb +7 -1
- data/lib/pwn/ai/red_team.rb +4 -0
- data/lib/pwn/ai.rb +4 -0
- data/lib/pwn/aws/acm.rb +5 -2
- data/lib/pwn/aws/api_gateway.rb +10 -7
- data/lib/pwn/aws/app_stream.rb +5 -2
- data/lib/pwn/aws/application_auto_scaling.rb +5 -2
- data/lib/pwn/aws/application_discovery_service.rb +5 -2
- data/lib/pwn/aws/auto_scaling.rb +5 -2
- data/lib/pwn/aws/batch.rb +5 -2
- data/lib/pwn/aws/budgets.rb +5 -2
- data/lib/pwn/aws/cloud_formation.rb +5 -2
- data/lib/pwn/aws/cloud_front.rb +7 -4
- data/lib/pwn/aws/cloud_hsm.rb +5 -2
- data/lib/pwn/aws/cloud_search.rb +5 -2
- data/lib/pwn/aws/cloud_search_domain.rb +5 -2
- data/lib/pwn/aws/cloud_trail.rb +5 -2
- data/lib/pwn/aws/cloud_watch.rb +5 -2
- data/lib/pwn/aws/cloud_watch_events.rb +5 -2
- data/lib/pwn/aws/cloud_watch_logs.rb +5 -2
- data/lib/pwn/aws/code_build.rb +5 -2
- data/lib/pwn/aws/code_commit.rb +5 -2
- data/lib/pwn/aws/code_deploy.rb +5 -2
- data/lib/pwn/aws/code_pipeline.rb +5 -2
- data/lib/pwn/aws/cognito_identity.rb +5 -2
- data/lib/pwn/aws/cognito_identity_provider.rb +5 -2
- data/lib/pwn/aws/cognito_sync.rb +5 -2
- data/lib/pwn/aws/config_service.rb +5 -2
- data/lib/pwn/aws/data_pipleline.rb +5 -2
- data/lib/pwn/aws/database_migration_service.rb +5 -2
- data/lib/pwn/aws/device_farm.rb +5 -2
- data/lib/pwn/aws/direct_connect.rb +5 -2
- data/lib/pwn/aws/directory_service.rb +5 -2
- data/lib/pwn/aws/dynamo_db.rb +5 -2
- data/lib/pwn/aws/dynamo_db_streams.rb +5 -2
- data/lib/pwn/aws/ec2.rb +5 -2
- data/lib/pwn/aws/ecr.rb +5 -2
- data/lib/pwn/aws/ecs.rb +5 -2
- data/lib/pwn/aws/efs.rb +5 -2
- data/lib/pwn/aws/elasti_cache.rb +5 -2
- data/lib/pwn/aws/elastic_beanstalk.rb +8 -5
- data/lib/pwn/aws/elastic_load_balancing.rb +5 -2
- data/lib/pwn/aws/elastic_load_balancing_v2.rb +6 -3
- data/lib/pwn/aws/elastic_transcoder.rb +5 -2
- data/lib/pwn/aws/elasticsearch_service.rb +5 -2
- data/lib/pwn/aws/emr.rb +5 -2
- data/lib/pwn/aws/firehose.rb +5 -2
- data/lib/pwn/aws/game_lift.rb +5 -2
- data/lib/pwn/aws/glacier.rb +6 -3
- data/lib/pwn/aws/health.rb +5 -2
- data/lib/pwn/aws/iam.rb +10 -4
- data/lib/pwn/aws/import_export.rb +5 -2
- data/lib/pwn/aws/inspector.rb +5 -2
- data/lib/pwn/aws/iot.rb +5 -2
- data/lib/pwn/aws/iot_data_plane.rb +5 -2
- data/lib/pwn/aws/kinesis.rb +5 -2
- data/lib/pwn/aws/kinesis_analytics.rb +5 -2
- data/lib/pwn/aws/kms.rb +5 -2
- data/lib/pwn/aws/lambda.rb +5 -2
- data/lib/pwn/aws/lambda_preview.rb +5 -2
- data/lib/pwn/aws/lex.rb +5 -2
- data/lib/pwn/aws/lightsail.rb +5 -2
- data/lib/pwn/aws/machine_learning.rb +5 -2
- data/lib/pwn/aws/marketplace_commerce_analytics.rb +5 -2
- data/lib/pwn/aws/marketplace_metering.rb +5 -2
- data/lib/pwn/aws/ops_works.rb +5 -2
- data/lib/pwn/aws/ops_works_cm.rb +5 -2
- data/lib/pwn/aws/pinpoint.rb +5 -2
- data/lib/pwn/aws/polly.rb +5 -2
- data/lib/pwn/aws/rds.rb +5 -2
- data/lib/pwn/aws/redshift.rb +5 -2
- data/lib/pwn/aws/rekognition.rb +5 -2
- data/lib/pwn/aws/route53.rb +5 -2
- data/lib/pwn/aws/route53_domains.rb +5 -2
- data/lib/pwn/aws/s3.rb +5 -2
- data/lib/pwn/aws/service_catalog.rb +5 -2
- data/lib/pwn/aws/ses.rb +5 -2
- data/lib/pwn/aws/shield.rb +5 -2
- data/lib/pwn/aws/simple_db.rb +5 -2
- data/lib/pwn/aws/sms.rb +5 -2
- data/lib/pwn/aws/snowball.rb +5 -2
- data/lib/pwn/aws/sns.rb +5 -2
- data/lib/pwn/aws/sqs.rb +5 -2
- data/lib/pwn/aws/ssm.rb +5 -2
- data/lib/pwn/aws/states.rb +5 -2
- data/lib/pwn/aws/storage_gateway.rb +5 -2
- data/lib/pwn/aws/sts.rb +4 -1
- data/lib/pwn/aws/support.rb +5 -2
- data/lib/pwn/aws/swf.rb +5 -2
- data/lib/pwn/aws/waf.rb +5 -2
- data/lib/pwn/aws/waf_regional.rb +5 -2
- data/lib/pwn/aws/workspaces.rb +5 -2
- data/lib/pwn/aws/x_ray.rb +5 -2
- data/lib/pwn/aws.rb +4 -0
- data/lib/pwn/banner/anon.rb +3 -0
- data/lib/pwn/banner/bubble.rb +3 -0
- data/lib/pwn/banner/cheshire.rb +3 -0
- data/lib/pwn/banner/code_cave.rb +3 -0
- data/lib/pwn/banner/dont_panic.rb +3 -0
- data/lib/pwn/banner/f_society.rb +3 -0
- data/lib/pwn/banner/fork_bomb.rb +3 -0
- data/lib/pwn/banner/jmp_esp.rb +3 -0
- data/lib/pwn/banner/matrix.rb +5 -1
- data/lib/pwn/banner/ninja.rb +3 -0
- data/lib/pwn/banner/off_the_air.rb +3 -0
- data/lib/pwn/banner/pirate.rb +3 -0
- data/lib/pwn/banner/radare2.rb +3 -0
- data/lib/pwn/banner/radare2_ai.rb +3 -0
- data/lib/pwn/banner/white_rabbit.rb +3 -0
- data/lib/pwn/banner.rb +6 -2
- data/lib/pwn/blockchain/btc.rb +8 -3
- data/lib/pwn/blockchain/eth.rb +10 -3
- data/lib/pwn/blockchain.rb +4 -0
- data/lib/pwn/bounty/lifecycle_authz_replay.rb +46 -27
- data/lib/pwn/bounty.rb +4 -0
- data/lib/pwn/config.rb +79 -13
- data/lib/pwn/cron.rb +297 -20
- data/lib/pwn/driver.rb +2 -18
- data/lib/pwn/ffi/adalm_pluto.rb +65 -11
- data/lib/pwn/ffi/fftw.rb +31 -6
- data/lib/pwn/ffi/hack_rf.rb +59 -8
- data/lib/pwn/ffi/liquid.rb +63 -10
- data/lib/pwn/ffi/rtl_sdr.rb +35 -5
- data/lib/pwn/ffi/soapy_sdr.rb +60 -10
- data/lib/pwn/ffi/stdio.rb +5 -8
- data/lib/pwn/ffi/volk.rb +36 -7
- data/lib/pwn/ffi.rb +12 -0
- data/lib/pwn/memory.rb +136 -16
- data/lib/pwn/memory_index.rb +34 -19
- data/lib/pwn/migrate.rb +34 -24
- data/lib/pwn/module_skills.rb +39 -8
- data/lib/pwn/plugins/aflplusplus.rb +52 -0
- data/lib/pwn/plugins/android.rb +65 -245
- data/lib/pwn/plugins/artifact_registry.rb +71 -0
- data/lib/pwn/plugins/assembly.rb +9 -4
- data/lib/pwn/plugins/authentication_helper.rb +8 -5
- data/lib/pwn/plugins/baresip.rb +59 -12
- data/lib/pwn/plugins/basic_auth.rb +9 -3
- data/lib/pwn/plugins/beef.rb +28 -18
- data/lib/pwn/plugins/binary_parser.rb +133 -0
- data/lib/pwn/plugins/black_duck_binary_analysis.rb +63 -39
- data/lib/pwn/plugins/burp_suite.rb +98 -68
- data/lib/pwn/plugins/bus_pirate.rb +15 -8
- data/lib/pwn/plugins/char.rb +33 -3
- data/lib/pwn/plugins/credential_attack.rb +99 -0
- data/lib/pwn/plugins/credit_card.rb +6 -1
- data/lib/pwn/plugins/dao_ldap.rb +19 -13
- data/lib/pwn/plugins/dao_mongo.rb +11 -5
- data/lib/pwn/plugins/dao_postgres.rb +28 -19
- data/lib/pwn/plugins/dao_sqlite3.rb +15 -6
- data/lib/pwn/plugins/defect_dojo.rb +38 -22
- data/lib/pwn/plugins/detect_os.rb +5 -0
- data/lib/pwn/plugins/doctor.rb +149 -0
- data/lib/pwn/plugins/ein.rb +3 -0
- data/lib/pwn/plugins/exploit_dev.rb +264 -0
- data/lib/pwn/plugins/file_fu.rb +11 -8
- data/lib/pwn/plugins/frida.rb +61 -0
- data/lib/pwn/plugins/fuzz.rb +9 -6
- data/lib/pwn/plugins/gdb.rb +95 -0
- data/lib/pwn/plugins/git.rb +19 -14
- data/lib/pwn/plugins/github.rb +38 -15
- data/lib/pwn/plugins/google_workspace.rb +188 -45
- data/lib/pwn/plugins/hacker_one.rb +159 -35
- data/lib/pwn/plugins/hunter.rb +6 -3
- data/lib/pwn/plugins/ip_info.rb +9 -4
- data/lib/pwn/plugins/irc.rb +28 -15
- data/lib/pwn/plugins/jenkins.rb +65 -57
- data/lib/pwn/plugins/jira_data_center.rb +30 -22
- data/lib/pwn/plugins/jobs.rb +109 -0
- data/lib/pwn/plugins/json_pathify.rb +9 -5
- data/lib/pwn/plugins/log.rb +113 -13
- data/lib/pwn/plugins/mail_agent.rb +87 -79
- data/lib/pwn/plugins/metasploit.rb +11 -6
- data/lib/pwn/plugins/monkey_patch.rb +3 -0
- data/lib/pwn/plugins/msr206.rb +42 -28
- data/lib/pwn/plugins/nessus_cloud.rb +44 -4
- data/lib/pwn/plugins/nexpose_vuln_scan.rb +40 -24
- data/lib/pwn/plugins/nmap_it.rb +14 -34
- data/lib/pwn/plugins/nuclei.rb +57 -0
- data/lib/pwn/plugins/oauth2.rb +11 -5
- data/lib/pwn/plugins/ocr.rb +3 -0
- data/lib/pwn/plugins/open_api.rb +5 -2
- data/lib/pwn/plugins/openvas.rb +33 -25
- data/lib/pwn/plugins/packet.rb +152 -31
- data/lib/pwn/plugins/pdf_parse.rb +5 -2
- data/lib/pwn/plugins/pony.rb +86 -1
- data/lib/pwn/plugins/process_tube.rb +120 -0
- data/lib/pwn/plugins/ps.rb +7 -1
- data/lib/pwn/plugins/pwn_logger.rb +6 -2
- data/lib/pwn/plugins/rabbit_mq.rb +12 -7
- data/lib/pwn/plugins/radare2.rb +253 -0
- data/lib/pwn/plugins/recon.rb +161 -0
- data/lib/pwn/plugins/repl.rb +122 -1
- data/lib/pwn/plugins/scannable_codes.rb +5 -1
- data/lib/pwn/plugins/serial.rb +24 -14
- data/lib/pwn/plugins/shodan.rb +54 -35
- data/lib/pwn/plugins/slack_client.rb +11 -6
- data/lib/pwn/plugins/sock.rb +16 -8
- data/lib/pwn/plugins/spider.rb +5 -2
- data/lib/pwn/plugins/sqlmap.rb +49 -0
- data/lib/pwn/plugins/ssn.rb +3 -0
- data/lib/pwn/plugins/thread_pool.rb +6 -9
- data/lib/pwn/plugins/tor.rb +9 -4
- data/lib/pwn/plugins/transparent_browser.rb +62 -107
- data/lib/pwn/plugins/tty_spinner.rb +16 -2
- data/lib/pwn/plugins/twitter_api.rb +6 -2
- data/lib/pwn/plugins/uri_scheme.rb +4 -1
- data/lib/pwn/plugins/vault.rb +12 -3
- data/lib/pwn/plugins/vin.rb +24 -12
- data/lib/pwn/plugins/voice.rb +7 -2
- data/lib/pwn/plugins/volatility.rb +48 -0
- data/lib/pwn/plugins/vsphere.rb +9 -5
- data/lib/pwn/plugins/xxd.rb +12 -43
- data/lib/pwn/plugins/zaproxy.rb +30 -16
- data/lib/pwn/plugins.rb +19 -0
- data/lib/pwn/reports/ai_red_team.rb +6 -2
- data/lib/pwn/reports/csv.rb +8 -1
- data/lib/pwn/reports/fuzz.rb +5 -2
- data/lib/pwn/reports/html.rb +8 -1
- data/lib/pwn/reports/html_footer.rb +4 -3
- data/lib/pwn/reports/html_header.rb +6 -2
- data/lib/pwn/reports/json.rb +8 -1
- data/lib/pwn/reports/markdown.rb +8 -1
- data/lib/pwn/reports/pdf.rb +8 -1
- data/lib/pwn/reports/phone.rb +5 -2
- data/lib/pwn/reports/sast.rb +6 -2
- data/lib/pwn/reports/uri_buster.rb +5 -2
- data/lib/pwn/reports/xml.rb +8 -1
- data/lib/pwn/reports.rb +19 -0
- data/lib/pwn/sast/amqp_connect_as_guest.rb +9 -3
- data/lib/pwn/sast/apache_file_system_util_api.rb +9 -3
- data/lib/pwn/sast/aws.rb +9 -3
- data/lib/pwn/sast/banned_function_calls_c.rb +9 -3
- data/lib/pwn/sast/base64.rb +9 -3
- data/lib/pwn/sast/beef_hook.rb +9 -3
- data/lib/pwn/sast/cmd_execution_go_lang.rb +9 -3
- data/lib/pwn/sast/cmd_execution_java.rb +9 -3
- data/lib/pwn/sast/cmd_execution_python.rb +9 -3
- data/lib/pwn/sast/cmd_execution_ruby.rb +9 -3
- data/lib/pwn/sast/cmd_execution_scala.rb +9 -3
- data/lib/pwn/sast/csrf.rb +9 -3
- data/lib/pwn/sast/deserial_java.rb +9 -3
- data/lib/pwn/sast/emoticon.rb +9 -3
- data/lib/pwn/sast/eval.rb +9 -3
- data/lib/pwn/sast/factory.rb +9 -3
- data/lib/pwn/sast/http_authorization_header.rb +9 -3
- data/lib/pwn/sast/inner_html.rb +9 -3
- data/lib/pwn/sast/keystore.rb +9 -3
- data/lib/pwn/sast/local_storage.rb +9 -3
- data/lib/pwn/sast/location_hash.rb +9 -3
- data/lib/pwn/sast/log4j.rb +9 -3
- data/lib/pwn/sast/logger.rb +9 -3
- data/lib/pwn/sast/md5.rb +9 -3
- data/lib/pwn/sast/outer_html.rb +9 -3
- data/lib/pwn/sast/padding_oracle.rb +9 -3
- data/lib/pwn/sast/password.rb +9 -3
- data/lib/pwn/sast/php_input_mechanisms.rb +9 -3
- data/lib/pwn/sast/php_type_juggling.rb +9 -3
- data/lib/pwn/sast/pom_version.rb +9 -3
- data/lib/pwn/sast/port.rb +9 -3
- data/lib/pwn/sast/post_message.rb +9 -3
- data/lib/pwn/sast/private_key.rb +9 -3
- data/lib/pwn/sast/redirect.rb +9 -3
- data/lib/pwn/sast/redos.rb +9 -3
- data/lib/pwn/sast/shell.rb +9 -3
- data/lib/pwn/sast/signature.rb +9 -3
- data/lib/pwn/sast/sql.rb +9 -3
- data/lib/pwn/sast/ssl.rb +9 -3
- data/lib/pwn/sast/sudo.rb +9 -3
- data/lib/pwn/sast/task_tag.rb +9 -3
- data/lib/pwn/sast/test_case_engine.rb +11 -7
- data/lib/pwn/sast/throw_errors.rb +9 -3
- data/lib/pwn/sast/token.rb +9 -3
- data/lib/pwn/sast/type_script_type_juggling.rb +9 -3
- data/lib/pwn/sast/use_after_free.rb +9 -3
- data/lib/pwn/sast/version.rb +9 -3
- data/lib/pwn/sast/window_location_hash.rb +9 -3
- data/lib/pwn/sast.rb +4 -0
- data/lib/pwn/sdr/decoder/adsb.rb +36 -5
- data/lib/pwn/sdr/decoder/apt.rb +9 -6
- data/lib/pwn/sdr/decoder/base.rb +74 -22
- data/lib/pwn/sdr/decoder/bluetooth.rb +17 -5
- data/lib/pwn/sdr/decoder/dect.rb +12 -3
- data/lib/pwn/sdr/decoder/dsp.rb +229 -39
- data/lib/pwn/sdr/decoder/flex.rb +59 -11
- data/lib/pwn/sdr/decoder/gps.rb +12 -3
- data/lib/pwn/sdr/decoder/gsm.rb +24 -4
- data/lib/pwn/sdr/decoder/iridium.rb +12 -3
- data/lib/pwn/sdr/decoder/lora.rb +13 -4
- data/lib/pwn/sdr/decoder/lte.rb +27 -3
- data/lib/pwn/sdr/decoder/morse.rb +12 -3
- data/lib/pwn/sdr/decoder/p25.rb +12 -3
- data/lib/pwn/sdr/decoder/pager.rb +8 -5
- data/lib/pwn/sdr/decoder/pocsag.rb +29 -9
- data/lib/pwn/sdr/decoder/rds.rb +14 -8
- data/lib/pwn/sdr/decoder/rfid.rb +12 -3
- data/lib/pwn/sdr/decoder/rtl433.rb +12 -3
- data/lib/pwn/sdr/decoder/rtty.rb +8 -5
- data/lib/pwn/sdr/decoder/wifi.rb +12 -3
- data/lib/pwn/sdr/decoder/zigbee.rb +12 -3
- data/lib/pwn/sdr/decoder.rb +9 -0
- data/lib/pwn/sdr/flipper_zero.rb +17 -10
- data/lib/pwn/sdr/frequency_allocation.rb +4 -1
- data/lib/pwn/sdr/gqrx.rb +178 -119
- data/lib/pwn/sdr/rfidler.rb +4 -1
- data/lib/pwn/sdr/son_micro_rfid.rb +37 -24
- data/lib/pwn/sdr.rb +14 -0
- data/lib/pwn/sessions.rb +86 -16
- data/lib/pwn/setup.rb +94 -37
- data/lib/pwn/version.rb +1 -1
- data/lib/pwn/www/app_cobalt_io.rb +11 -5
- data/lib/pwn/www/bing.rb +10 -5
- data/lib/pwn/www/bug_crowd.rb +11 -5
- data/lib/pwn/www/checkip.rb +8 -4
- data/lib/pwn/www/coinbase_pro.rb +11 -5
- data/lib/pwn/www/duckduckgo.rb +12 -6
- data/lib/pwn/www/facebook.rb +11 -5
- data/lib/pwn/www/github.rb +11 -5
- data/lib/pwn/www/google.rb +11 -5
- data/lib/pwn/www/hacker_one.rb +20 -9
- data/lib/pwn/www/linkedin.rb +11 -5
- data/lib/pwn/www/pandora.rb +11 -5
- data/lib/pwn/www/pastebin.rb +9 -4
- data/lib/pwn/www/paypal.rb +19 -11
- data/lib/pwn/www/synack.rb +11 -5
- data/lib/pwn/www/torch.rb +13 -8
- data/lib/pwn/www/trading_view.rb +11 -5
- data/lib/pwn/www/twitter.rb +11 -5
- data/lib/pwn/www/uber.rb +11 -5
- data/lib/pwn/www/upwork.rb +11 -5
- data/lib/pwn/www/wayback_machine.rb +12 -6
- data/lib/pwn/www/youtube.rb +10 -5
- data/lib/pwn/www.rb +4 -0
- data/spec/conventions_spec.rb +118 -2
- data/spec/lib/pwn/ai/agent/reward_spec.rb +9 -0
- data/spec/lib/pwn/plugins/aflplusplus_spec.rb +13 -0
- data/spec/lib/pwn/plugins/artifact_registry_spec.rb +13 -0
- data/spec/lib/pwn/plugins/binary_parser_spec.rb +21 -0
- data/spec/lib/pwn/plugins/credential_attack_spec.rb +13 -0
- data/spec/lib/pwn/plugins/doctor_spec.rb +23 -0
- data/spec/lib/pwn/plugins/exploit_dev_spec.rb +23 -0
- data/spec/lib/pwn/plugins/frida_spec.rb +13 -0
- data/spec/lib/pwn/plugins/gdb_spec.rb +13 -0
- data/spec/lib/pwn/plugins/jobs_spec.rb +13 -0
- data/spec/lib/pwn/plugins/nuclei_spec.rb +13 -0
- data/spec/lib/pwn/plugins/process_tube_spec.rb +13 -0
- data/spec/lib/pwn/plugins/radare2_spec.rb +13 -0
- data/spec/lib/pwn/plugins/recon_spec.rb +26 -0
- data/spec/lib/pwn/plugins/sqlmap_spec.rb +13 -0
- data/spec/lib/pwn/plugins/volatility_spec.rb +13 -0
- data/third_party/pwn_rdoc.jsonl +126 -5
- metadata +47 -3
- data/etc/default_skills/pwn/memory_index/references/urls.md +0 -4
- data/etc/default_skills/pwn/plugins/transparent_browser/references/urls.md +0 -3
data/lib/pwn/plugins/file_fu.rb
CHANGED
|
@@ -116,27 +116,30 @@ module PWN
|
|
|
116
116
|
|
|
117
117
|
public_class_method def self.help
|
|
118
118
|
puts "USAGE:
|
|
119
|
+
# Run recurse in dir and return its result
|
|
119
120
|
#{self}.recurse_in_dir(
|
|
120
|
-
dir_path: 'optional path to dir defaults to .',
|
|
121
|
-
include_extensions: 'optional - array of file extensions to search for in scan (e.g. [
|
|
122
|
-
exclude_extensions: 'optional - array of file extensions to exclude from scan (e.g. [
|
|
123
|
-
)
|
|
124
|
-
puts entry
|
|
125
|
-
end
|
|
121
|
+
dir_path: 'optional - optional path to dir defaults to .',
|
|
122
|
+
include_extensions: 'optional - array of file extensions to search for in scan (e.g. [.js, .php])',
|
|
123
|
+
exclude_extensions: 'optional - array of file extensions to exclude from scan (e.g. [.log, .txt, .spec])'
|
|
124
|
+
)
|
|
126
125
|
|
|
126
|
+
# Run untar gz file and return its result
|
|
127
127
|
#{self}.untar_gz_file(
|
|
128
128
|
tar_gz_file: 'required - path to .tar.gz file',
|
|
129
129
|
destination: 'required - destination folder to save extracted contents'
|
|
130
130
|
)
|
|
131
131
|
|
|
132
|
+
# Run shift file up and return its result
|
|
132
133
|
#{self}.shift_file_up(
|
|
133
134
|
path: 'required - path to file to shift up',
|
|
134
|
-
bytes: 'required - number of bytes to shift up',
|
|
135
|
-
buffer_size: 'optional - buffer size to use when shifting
|
|
135
|
+
bytes: 'required - number of bytes to shift up (remove from beginning)',
|
|
136
|
+
buffer_size: 'optional - buffer size to use when shifting (default: 256KB)'
|
|
136
137
|
)
|
|
137
138
|
|
|
139
|
+
# Print the AUTHOR(S) string for this module.
|
|
138
140
|
#{self}.authors
|
|
139
141
|
"
|
|
142
|
+
constants.sort
|
|
140
143
|
end
|
|
141
144
|
end
|
|
142
145
|
end
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'open3'
|
|
4
|
+
|
|
5
|
+
module PWN
|
|
6
|
+
module Plugins
|
|
7
|
+
# Frida attach/spawn + script injection.
|
|
8
|
+
module Frida
|
|
9
|
+
public_class_method def self.required_bins
|
|
10
|
+
%w[frida]
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
public_class_method def self.ps(opts = {})
|
|
14
|
+
PWN::Plugins::Doctor.require_bin!(name: 'frida')
|
|
15
|
+
stdout, stderr, status = Open3.capture3('frida-ps', *Array(opts[:extra]))
|
|
16
|
+
{ stdout: stdout, stderr: stderr, exit: status.exitstatus }
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
public_class_method def self.attach(opts = {})
|
|
20
|
+
PWN::Plugins::Doctor.require_bin!(name: 'frida')
|
|
21
|
+
target = opts[:target] || opts[:name]
|
|
22
|
+
script = opts[:script].to_s
|
|
23
|
+
raise 'ERROR: target is required' if target.to_s.empty?
|
|
24
|
+
|
|
25
|
+
cmd = ['frida', '-n', target.to_s]
|
|
26
|
+
cmd += ['-l', opts[:script_path].to_s] if opts[:script_path]
|
|
27
|
+
cmd += ['-e', script] unless script.empty?
|
|
28
|
+
stdout, stderr, status = Open3.capture3(*cmd)
|
|
29
|
+
{ stdout: stdout, stderr: stderr, exit: status.exitstatus }
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
public_class_method def self.authors
|
|
33
|
+
"AUTHOR(S):\n 0day Inc. <support@0dayinc.com>\n"
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
public_class_method def self.help
|
|
37
|
+
puts "USAGE:
|
|
38
|
+
# List host binaries this module expects to be installed.
|
|
39
|
+
#{self}.required_bins
|
|
40
|
+
|
|
41
|
+
# Run ps and return its result
|
|
42
|
+
#{self}.ps(
|
|
43
|
+
extra: 'optional - Array extra value consumed by #ps'
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
# Run attach and return its result
|
|
47
|
+
#{self}.attach(
|
|
48
|
+
target: 'required - hostname, IP, or CIDR to scan (defaults to opts[:name])',
|
|
49
|
+
name: 'optional - binary or identifier name',
|
|
50
|
+
script: 'required - script value consumed by #attach',
|
|
51
|
+
script_path: 'optional - script path value consumed by #attach'
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
# Print the AUTHOR(S) string for this module.
|
|
55
|
+
#{self}.authors
|
|
56
|
+
"
|
|
57
|
+
constants.sort
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
data/lib/pwn/plugins/fuzz.rb
CHANGED
|
@@ -183,13 +183,14 @@ module PWN
|
|
|
183
183
|
|
|
184
184
|
public_class_method def self.help
|
|
185
185
|
puts "USAGE:
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
186
|
+
# Run socket and return its result
|
|
187
|
+
#{self}.socket(
|
|
188
|
+
target: 'required - target host or ip',
|
|
189
|
+
port: 'required - target port',
|
|
190
|
+
protocol: 'optional - :tcp || :udp (defaults to tcp)',
|
|
190
191
|
tls: 'optional - boolean connect to target socket using TLS (defaults to false)',
|
|
191
|
-
fuzz_delimeter:
|
|
192
|
-
request:
|
|
192
|
+
fuzz_delimeter: 'optional - fuzz delimeter used in request to specify where payloads should reside (defaults to \\u2665)',
|
|
193
|
+
request: 'required - String object of socket request w/ \\u001A as fuzz delimeter (e.g. GET /\\u001A\\u001A HTTP/1.1\\r\\nHost: \\u001A127..0.0.1\\u001A\\r\\n\\r\\n)',
|
|
193
194
|
payload: 'required - payload string',
|
|
194
195
|
response_timeout: 'optional - float (defaults to 0.9)',
|
|
195
196
|
request_rate_limit: 'optional - float (defaults to 0.3)',
|
|
@@ -198,8 +199,10 @@ module PWN
|
|
|
198
199
|
char_encoding: 'optional - character encoding returned by PWN::Plugins::Char.list_encoders (defaults to UTF-8)'
|
|
199
200
|
)
|
|
200
201
|
|
|
202
|
+
# Print the AUTHOR(S) string for this module.
|
|
201
203
|
#{self}.authors
|
|
202
204
|
"
|
|
205
|
+
constants.sort
|
|
203
206
|
end
|
|
204
207
|
end
|
|
205
208
|
end
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'open3'
|
|
4
|
+
|
|
5
|
+
module PWN
|
|
6
|
+
module Plugins
|
|
7
|
+
# gdb/MI batch driver: run-to-crash, registers, mitigations, core dumps.
|
|
8
|
+
module GDB
|
|
9
|
+
public_class_method def self.required_bins
|
|
10
|
+
%w[gdb]
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
public_class_method def self.batch(opts = {})
|
|
14
|
+
PWN::Plugins::Doctor.require_bin!(name: 'gdb')
|
|
15
|
+
binary = opts[:binary].to_s
|
|
16
|
+
cmds = Array(opts[:commands] || opts[:cmds])
|
|
17
|
+
args = Array(opts[:args])
|
|
18
|
+
mi = ['gdb', '--batch', '--quiet']
|
|
19
|
+
mi += ['-ex', 'set pagination off']
|
|
20
|
+
cmds.each { |c| mi += ['-ex', c.to_s] }
|
|
21
|
+
mi << '--args' if !binary.empty? || args.any?
|
|
22
|
+
mi << binary unless binary.empty?
|
|
23
|
+
mi.concat(args.map(&:to_s))
|
|
24
|
+
stdout, stderr, status = Open3.capture3(*mi)
|
|
25
|
+
{ stdout: stdout, stderr: stderr, exit: status.exitstatus }
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
public_class_method def self.run_to_crash(opts = {})
|
|
29
|
+
cmds = ['run', 'bt', 'info registers']
|
|
30
|
+
batch(opts.merge(commands: cmds))
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
public_class_method def self.registers(opts = {})
|
|
34
|
+
batch(opts.merge(commands: ['info registers']))
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
public_class_method def self.mitigations(opts = {})
|
|
38
|
+
batch(opts.merge(commands: ['checksec']))
|
|
39
|
+
rescue StandardError
|
|
40
|
+
path = opts[:binary].to_s
|
|
41
|
+
return { error: 'gdb missing' } unless PWN::Plugins::Doctor.bin?(name: 'gdb')
|
|
42
|
+
|
|
43
|
+
{ hint: 'pwndbg/gef checksec not loaded', binary: path }
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
public_class_method def self.core(opts = {})
|
|
47
|
+
core = opts[:core].to_s
|
|
48
|
+
binary = opts[:binary].to_s
|
|
49
|
+
raise 'ERROR: core is required' if core.empty?
|
|
50
|
+
|
|
51
|
+
batch(opts.merge(commands: ['bt', 'info registers'], binary: binary, args: []))
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
public_class_method def self.authors
|
|
55
|
+
"AUTHOR(S):\n 0day Inc. <support@0dayinc.com>\n"
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
public_class_method def self.help
|
|
59
|
+
puts "USAGE:
|
|
60
|
+
# List host binaries this module expects to be installed.
|
|
61
|
+
#{self}.required_bins
|
|
62
|
+
|
|
63
|
+
# Run batch and return its result
|
|
64
|
+
#{self}.batch(
|
|
65
|
+
binary: 'required - binary value consumed by #batch',
|
|
66
|
+
commands: 'optional - commands value consumed by #batch',
|
|
67
|
+
cmds: 'optional - cmds value consumed by #batch',
|
|
68
|
+
args: 'required - Array args value consumed by #batch'
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
# Run run to crash and return its result
|
|
72
|
+
#{self}.run_to_crash
|
|
73
|
+
|
|
74
|
+
# Run registers and return its result
|
|
75
|
+
#{self}.registers
|
|
76
|
+
|
|
77
|
+
# Run mitigations and return its result
|
|
78
|
+
#{self}.mitigations(
|
|
79
|
+
binary: 'optional - binary value consumed by #mitigations'
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
# Run core and return its result
|
|
83
|
+
#{self}.core(
|
|
84
|
+
core: 'required - core value consumed by #core',
|
|
85
|
+
binary: 'optional - binary value consumed by #core'
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
# Print the AUTHOR(S) string for this module.
|
|
89
|
+
#{self}.authors
|
|
90
|
+
"
|
|
91
|
+
constants.sort
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
data/lib/pwn/plugins/git.rb
CHANGED
|
@@ -132,27 +132,32 @@ module PWN
|
|
|
132
132
|
# Display Usage for this Module
|
|
133
133
|
|
|
134
134
|
public_class_method def self.help
|
|
135
|
-
puts
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
135
|
+
puts "USAGE:
|
|
136
|
+
# Run gen html diff and return its result
|
|
137
|
+
#{self}.gen_html_diff(
|
|
138
|
+
repo: 'required - required git repo name',
|
|
139
|
+
branch: 'required - required git repo branch (e.g. master, develop, etc)',
|
|
140
|
+
since: 'optional - optional date, otherwise default to last pull'
|
|
140
141
|
)
|
|
141
142
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
to_line: 'required line number to stop in range',
|
|
146
|
-
target_file: 'required file in which line range is queried'
|
|
147
|
-
entry_beautified: 'required boolean'
|
|
143
|
+
# Run dump all repo branches and return its result
|
|
144
|
+
#{self}.dump_all_repo_branches(
|
|
145
|
+
git_url: 'required - required git repo url'
|
|
148
146
|
)
|
|
149
147
|
|
|
150
|
-
|
|
151
|
-
|
|
148
|
+
# Run get author and return its result
|
|
149
|
+
#{self}.get_author(
|
|
150
|
+
repo_root: 'optional - repo root value consumed by #get_author',
|
|
151
|
+
from_line: 'optional - from line value consumed by #get_author',
|
|
152
|
+
to_line: 'optional - to line value consumed by #get_author',
|
|
153
|
+
target_file: 'optional - target file value consumed by #get_author',
|
|
154
|
+
entry_beautified: 'optional - entry beautified value consumed by #get_author'
|
|
152
155
|
)
|
|
153
156
|
|
|
157
|
+
# Print the AUTHOR(S) string for this module.
|
|
154
158
|
#{self}.authors
|
|
155
|
-
|
|
159
|
+
"
|
|
160
|
+
constants.sort
|
|
156
161
|
end
|
|
157
162
|
end
|
|
158
163
|
end
|
data/lib/pwn/plugins/github.rb
CHANGED
|
@@ -235,6 +235,7 @@ module PWN
|
|
|
235
235
|
gh_bin = ENV['PATH'].to_s.split(File::PATH_SEPARATOR)
|
|
236
236
|
.map { |d| File.join(d, 'gh') }
|
|
237
237
|
.find { |f| File.executable?(f) }
|
|
238
|
+
# Run api and return its result
|
|
238
239
|
raise "ERROR: gh CLI not found on PATH - use #{self}.api(path:) instead, or install gh (https://cli.github.com)" unless gh_bin
|
|
239
240
|
|
|
240
241
|
token = resolve_token(opts)
|
|
@@ -259,36 +260,58 @@ module PWN
|
|
|
259
260
|
|
|
260
261
|
public_class_method def self.help
|
|
261
262
|
puts "USAGE:
|
|
262
|
-
|
|
263
|
-
|
|
263
|
+
# Run download all gists and return its result
|
|
264
|
+
#{self}.download_all_gists(
|
|
265
|
+
username: 'optional - username of gists to backup (default PWN::Env[:plugins][:github][:username])',
|
|
264
266
|
target_dir: 'required - target directory to save respective gists'
|
|
265
267
|
)
|
|
266
268
|
|
|
267
|
-
runs
|
|
268
|
-
|
|
269
|
+
# Run workflow runs and return its result
|
|
270
|
+
#{self}.workflow_runs(
|
|
271
|
+
owner: 'required - repo owner (default PWN::Env[:plugins][:github][:username])',
|
|
269
272
|
repo: 'required - repo name',
|
|
270
|
-
workflow: 'optional - e.g. install-matrix.yml',
|
|
271
|
-
params: 'optional - {branch:, status:, per_page:}'
|
|
273
|
+
workflow: 'optional - workflow file name or id (e.g. install-matrix.yml). Omit for all runs.',
|
|
274
|
+
params: 'optional - {branch:, status:, per_page:, page:}',
|
|
275
|
+
token: 'optional - token value consumed by #workflow_runs'
|
|
272
276
|
)
|
|
273
277
|
|
|
274
|
-
jobs
|
|
275
|
-
|
|
278
|
+
# Run workflow run jobs and return its result
|
|
279
|
+
#{self}.workflow_run_jobs(
|
|
280
|
+
owner: 'required - repo owner (default PWN::Env[:plugins][:github][:username])',
|
|
281
|
+
repo: 'required - repo name',
|
|
282
|
+
run_id: 'required - workflow run id',
|
|
283
|
+
params: 'optional - params value consumed by #workflow_run_jobs',
|
|
284
|
+
token: 'optional - token value consumed by #workflow_run_jobs'
|
|
276
285
|
)
|
|
277
286
|
|
|
278
|
-
log
|
|
279
|
-
|
|
287
|
+
# Run job log and return its result
|
|
288
|
+
#{self}.job_log(
|
|
289
|
+
owner: 'required - repo owner (default PWN::Env[:plugins][:github][:username])',
|
|
290
|
+
repo: 'required - repo name',
|
|
291
|
+
job_id: 'required - job id from workflow_run_jobs',
|
|
292
|
+
token: 'optional - token value consumed by #job_log'
|
|
280
293
|
)
|
|
281
294
|
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
295
|
+
# Run api and return its result
|
|
296
|
+
#{self}.api(
|
|
297
|
+
path: 'required - REST path relative to https://api.github.com (e.g. repos/0dayinc/pwn/releases/latest)',
|
|
298
|
+
method: 'optional - :get|:post|:put|:patch|:delete (default :get)',
|
|
299
|
+
params: 'optional - query params Hash',
|
|
300
|
+
body: 'optional - request body Hash/Array/String for POST/PUT/PATCH',
|
|
301
|
+
token: 'optional - PAT (default PWN::Env[:plugins][:github][:personal_access_token])',
|
|
302
|
+
raw: 'optional - return raw RestClient::Response instead of parsed JSON (default false)'
|
|
286
303
|
)
|
|
287
304
|
|
|
288
|
-
#
|
|
305
|
+
# Thin wrapper around the `gh` CLI with GH_TOKEN injected from PWN::Env so
|
|
306
|
+
#{self}.gh(
|
|
307
|
+
cmd: 'required - gh subcommand string, e.g. run list -R 0dayinc/pwn -L 5 --json databaseId,status',
|
|
308
|
+
token: 'optional - PAT (default PWN::Env[:plugins][:github][:personal_access_token])'
|
|
309
|
+
)
|
|
289
310
|
|
|
311
|
+
# Print the AUTHOR(S) string for this module.
|
|
290
312
|
#{self}.authors
|
|
291
313
|
"
|
|
314
|
+
constants.sort
|
|
292
315
|
end
|
|
293
316
|
end
|
|
294
317
|
end
|
|
@@ -876,51 +876,194 @@ module PWN
|
|
|
876
876
|
end
|
|
877
877
|
|
|
878
878
|
public_class_method def self.help
|
|
879
|
-
puts
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
#
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
#
|
|
907
|
-
|
|
908
|
-
#
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
879
|
+
puts "USAGE:
|
|
880
|
+
# Run scopes and return its result
|
|
881
|
+
#{self}.scopes(
|
|
882
|
+
scope: 'optional - scope value consumed by #scopes',
|
|
883
|
+
services: 'optional - services value consumed by #scopes'
|
|
884
|
+
)
|
|
885
|
+
|
|
886
|
+
# Run parse oauth code and return its result
|
|
887
|
+
#{self}.parse_oauth_code(
|
|
888
|
+
code: 'optional - code value consumed by #parse_oauth_code'
|
|
889
|
+
)
|
|
890
|
+
|
|
891
|
+
# Run obtain oauth auth url and return its result
|
|
892
|
+
#{self}.obtain_oauth_auth_url(
|
|
893
|
+
wait: 'optional - wait value consumed by #obtain_oauth_auth_url',
|
|
894
|
+
timeout: 'optional - seconds to wait before giving up',
|
|
895
|
+
probe: 'optional - probe value consumed by #obtain_oauth_auth_url'
|
|
896
|
+
)
|
|
897
|
+
|
|
898
|
+
# Run exchange oauth code and return its result
|
|
899
|
+
#{self}.exchange_oauth_code(
|
|
900
|
+
code: 'required - code value consumed by #exchange_oauth_code',
|
|
901
|
+
code_verifier: 'optional - code verifier value consumed by #exchange_oauth_code (defaults to pending[:verifier])'
|
|
902
|
+
)
|
|
903
|
+
|
|
904
|
+
# Run refresh oauth bearer token and return its result
|
|
905
|
+
#{self}.refresh_oauth_bearer_token(
|
|
906
|
+
refresh_token: 'required - refresh token value consumed by #refresh_oauth_bearer_token (defaults to c[:refresh_token])',
|
|
907
|
+
client_id: 'required - client id value consumed by #refresh_oauth_bearer_token (defaults to c[:client_id])',
|
|
908
|
+
client_secret: 'required - client secret value consumed by #refresh_oauth_bearer_token (defaults to c[:client_secret])'
|
|
909
|
+
)
|
|
910
|
+
|
|
911
|
+
# Run bearer token and return its result
|
|
912
|
+
#{self}.bearer_token
|
|
913
|
+
|
|
914
|
+
# Run authenticated and return its result
|
|
915
|
+
#{self}.authenticated?
|
|
916
|
+
|
|
917
|
+
# Run revoke and return its result
|
|
918
|
+
#{self}.revoke
|
|
919
|
+
|
|
920
|
+
# ── Gmail ──────────────────────────────────────────────────────────
|
|
921
|
+
#{self}.gmail_search(
|
|
922
|
+
query: 'optional - search query string',
|
|
923
|
+
max: 'optional - max value consumed by #gmail_search'
|
|
924
|
+
)
|
|
925
|
+
|
|
926
|
+
# Run gmail get and return its result
|
|
927
|
+
#{self}.gmail_get(
|
|
928
|
+
id: 'required - id value consumed by #gmail_get',
|
|
929
|
+
format: 'optional - format value consumed by #gmail_get (defaults to full)'
|
|
930
|
+
)
|
|
931
|
+
|
|
932
|
+
# Run gmail send and return its result
|
|
933
|
+
#{self}.gmail_send(
|
|
934
|
+
to: 'required - to value consumed by #gmail_send'
|
|
935
|
+
)
|
|
936
|
+
|
|
937
|
+
# Run gmail reply and return its result
|
|
938
|
+
#{self}.gmail_reply(
|
|
939
|
+
id: 'required - id value consumed by #gmail_reply'
|
|
940
|
+
)
|
|
941
|
+
|
|
942
|
+
# Run gmail labels and return its result
|
|
943
|
+
#{self}.gmail_labels
|
|
944
|
+
|
|
945
|
+
# Run gmail modify and return its result
|
|
946
|
+
#{self}.gmail_modify(
|
|
947
|
+
id: 'required - id value consumed by #gmail_modify',
|
|
948
|
+
add_labels: 'optional - add labels value consumed by #gmail_modify',
|
|
949
|
+
add: 'required - add value consumed by #gmail_modify',
|
|
950
|
+
remove_labels: 'optional - remove labels value consumed by #gmail_modify',
|
|
951
|
+
remove: 'required - remove value consumed by #gmail_modify'
|
|
952
|
+
)
|
|
953
|
+
|
|
954
|
+
# ── Calendar ───────────────────────────────────────────────────────
|
|
955
|
+
#{self}.calendar_list(
|
|
956
|
+
calendar_id: 'optional - calendar id value consumed by #calendar_list',
|
|
957
|
+
start: 'optional - start value consumed by #calendar_list',
|
|
958
|
+
end: 'optional - end value consumed by #calendar_list',
|
|
959
|
+
max: 'optional - max value consumed by #calendar_list'
|
|
960
|
+
)
|
|
961
|
+
|
|
962
|
+
# Run calendar create and return its result
|
|
963
|
+
#{self}.calendar_create(
|
|
964
|
+
calendar_id: 'optional - calendar id value consumed by #calendar_create'
|
|
965
|
+
)
|
|
966
|
+
|
|
967
|
+
# Run calendar update and return its result
|
|
968
|
+
#{self}.calendar_update(
|
|
969
|
+
id: 'required - id value consumed by #calendar_update',
|
|
970
|
+
calendar_id: 'optional - calendar id value consumed by #calendar_update'
|
|
971
|
+
)
|
|
972
|
+
|
|
973
|
+
# Run calendar delete and return its result
|
|
974
|
+
#{self}.calendar_delete(
|
|
975
|
+
id: 'required - id value consumed by #calendar_delete',
|
|
976
|
+
calendar_id: 'optional - calendar id value consumed by #calendar_delete'
|
|
977
|
+
)
|
|
978
|
+
|
|
979
|
+
# ── Drive ──────────────────────────────────────────────────────────
|
|
980
|
+
#{self}.drive_search(
|
|
981
|
+
query: 'optional - search query string',
|
|
982
|
+
raw_query: 'optional - raw query value consumed by #drive_search',
|
|
983
|
+
max: 'optional - max value consumed by #drive_search'
|
|
984
|
+
)
|
|
985
|
+
|
|
986
|
+
# Run drive get and return its result
|
|
987
|
+
#{self}.drive_get(
|
|
988
|
+
id: 'required - id value consumed by #drive_get'
|
|
989
|
+
)
|
|
990
|
+
|
|
991
|
+
# Run drive upload and return its result
|
|
992
|
+
#{self}.drive_upload(
|
|
993
|
+
path: 'required - filesystem path to read or write',
|
|
994
|
+
name: 'required - binary or identifier name',
|
|
995
|
+
parent: 'optional - parent value consumed by #drive_upload',
|
|
996
|
+
mime: 'optional - mime value consumed by #drive_upload'
|
|
997
|
+
)
|
|
998
|
+
|
|
999
|
+
# Run drive download and return its result
|
|
1000
|
+
#{self}.drive_download(
|
|
1001
|
+
id: 'required - id value consumed by #drive_download',
|
|
1002
|
+
export_mime: 'optional - export mime value consumed by #drive_download (defaults to EXPORT_MIME[meta[:mimeType])',
|
|
1003
|
+
output: 'optional - output value consumed by #drive_download'
|
|
1004
|
+
)
|
|
1005
|
+
|
|
1006
|
+
# Run drive create folder and return its result
|
|
1007
|
+
#{self}.drive_create_folder(
|
|
1008
|
+
name: 'required - binary or identifier name',
|
|
1009
|
+
parent: 'optional - parent value consumed by #drive_create_folder'
|
|
1010
|
+
)
|
|
1011
|
+
|
|
1012
|
+
# Run drive share and return its result
|
|
1013
|
+
#{self}.drive_share(
|
|
1014
|
+
id: 'required - id value consumed by #drive_share',
|
|
1015
|
+
role: 'optional - role value consumed by #drive_share',
|
|
1016
|
+
type: 'optional - type value consumed by #drive_share',
|
|
1017
|
+
email: 'optional - email value consumed by #drive_share',
|
|
1018
|
+
domain: 'optional - FQDN to query (e.g. example.com)',
|
|
1019
|
+
notify: 'optional - notify value consumed by #drive_share'
|
|
1020
|
+
)
|
|
1021
|
+
|
|
1022
|
+
# Run drive delete and return its result
|
|
1023
|
+
#{self}.drive_delete(
|
|
1024
|
+
id: 'required - id value consumed by #drive_delete',
|
|
1025
|
+
permanent: 'optional - permanent value consumed by #drive_delete'
|
|
1026
|
+
)
|
|
1027
|
+
|
|
1028
|
+
# ── Docs ───────────────────────────────────────────────────────────
|
|
1029
|
+
#{self}.docs_get(
|
|
1030
|
+
id: 'required - id value consumed by #docs_get'
|
|
1031
|
+
)
|
|
1032
|
+
|
|
1033
|
+
# Run docs create and return its result
|
|
1034
|
+
#{self}.docs_create(
|
|
1035
|
+
title: 'required - title value consumed by #docs_create',
|
|
1036
|
+
body: 'optional - body value consumed by #docs_create'
|
|
1037
|
+
)
|
|
1038
|
+
|
|
1039
|
+
# Run docs append and return its result
|
|
1040
|
+
#{self}.docs_append(
|
|
1041
|
+
id: 'required - id value consumed by #docs_append',
|
|
1042
|
+
text: 'optional - text value consumed by #docs_append'
|
|
1043
|
+
)
|
|
1044
|
+
|
|
1045
|
+
# ── Sheets ─────────────────────────────────────────────────────────
|
|
1046
|
+
#{self}.sheets_create(
|
|
1047
|
+
title: 'required - title value consumed by #sheets_create',
|
|
1048
|
+
sheet_name: 'optional - sheet name value consumed by #sheets_create'
|
|
1049
|
+
)
|
|
1050
|
+
|
|
1051
|
+
# Run sheets get and return its result
|
|
1052
|
+
#{self}.sheets_get(
|
|
1053
|
+
id: 'required - id value consumed by #sheets_get',
|
|
1054
|
+
range: 'required - range value consumed by #sheets_get'
|
|
1055
|
+
)
|
|
1056
|
+
|
|
1057
|
+
# Run sheets update and return its result
|
|
1058
|
+
#{self}.sheets_update
|
|
1059
|
+
|
|
1060
|
+
# Run sheets append and return its result
|
|
1061
|
+
#{self}.sheets_append
|
|
1062
|
+
|
|
1063
|
+
# Print the AUTHOR(S) string for this module.
|
|
1064
|
+
#{self}.authors
|
|
1065
|
+
"
|
|
1066
|
+
constants.sort
|
|
924
1067
|
end
|
|
925
1068
|
end
|
|
926
1069
|
end
|