Class: Hackerone::Programs
- Inherits:
-
Object
- Object
- Hackerone::Programs
- Defined in:
- lib/scopes_extractor/platforms/hackerone/programs.rb
Overview
Hackerone Sync Programs
Class Method Summary collapse
- .program_info(program) ⇒ Object
- .programs_infos(page_id) ⇒ Object
- .sync(results, options, page_id = 1) ⇒ Object
Class Method Details
.program_info(program) ⇒ Object
23 24 25 26 27 28 29 |
# File 'lib/scopes_extractor/platforms/hackerone/programs.rb', line 23 def self.program_info(program) { slug: program['attributes']['handle'], enabled: true, private: !program['attributes']['state'] == 'public_mode' } end |
.programs_infos(page_id) ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/scopes_extractor/platforms/hackerone/programs.rb', line 31 def self.programs_infos(page_id) response = HttpClient.get("https://api.hackerone.com/v1/hackers/programs?page%5Bnumber%5D=#{page_id}") if response&.code == 429 sleep 65 # Rate limit programs_infos(page_id) end return unless response.code == 200 json_body = JSON.parse(response.body) { next_page: json_body['links']['next'], programs: json_body['data'] } end |
.sync(results, options, page_id = 1) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# File 'lib/scopes_extractor/platforms/hackerone/programs.rb', line 8 def self.sync(results, , page_id = 1) programs_infos = programs_infos(page_id) return unless programs_infos programs_infos[:programs].each do |program| next unless program['attributes']['submission_state'] == 'open' && program['attributes']['offers_bounties'] next if [:skip_vdp] && !program['attributes']['offers_bounties'] results[program['attributes']['name']] = program_info(program) results[program['attributes']['name']]['scopes'] = Scopes.sync(program_info(program), ) end sync(results, , page_id + 1) if programs_infos[:next_page] end |