class HackerOne::Client::Program

Public Class Methods

find(program_handle_we_want) click to toggle source
# File lib/hackerone/client/program.rb, line 12
def self.find(program_handle_we_want)
  my_programs.find do |program|
    program.handle == program_handle_we_want
  end
end
new(program) click to toggle source
# File lib/hackerone/client/program.rb, line 18
def initialize(program)
  @program = program
end

Private Class Methods

my_programs() click to toggle source
# File lib/hackerone/client/program.rb, line 109
def self.my_programs
  @my_programs ||= begin
    response = HackerOne::Client::Api.hackerone_api_connection.get do |req|
      req.url "me/programs"
    end

    data = HackerOne::Client::Api.parse_response(response)
    data.map { |program| self.new(program) }
  end
end

Public Instance Methods

attributes() click to toggle source
# File lib/hackerone/client/program.rb, line 34
def attributes
  OpenStruct.new(@program[:attributes])
end
balance() click to toggle source
# File lib/hackerone/client/program.rb, line 79
def balance
  response_body = make_get_request(
   "programs/#{id}/billing/balance"
 )
 BillingBalance.new(response_body).balance
end
common_responses(page_number: 1, page_size: 100) click to toggle source
# File lib/hackerone/client/program.rb, line 64
def common_responses(page_number: 1, page_size: 100)
  make_get_request(
    "programs/#{id}/common_responses",
    params: { page: { number: page_number, size: page_size } }
  )
end
find_group(groupname) click to toggle source
# File lib/hackerone/client/program.rb, line 50
def find_group(groupname)
  groups.find { |group| group.name == groupname }
end
find_member(username) click to toggle source
# File lib/hackerone/client/program.rb, line 46
def find_member(username)
  members.find { |member| member.user.username == username }
end
group?(groupname) click to toggle source
# File lib/hackerone/client/program.rb, line 42
def group?(groupname)
  find_group(groupname).present?
end
id() click to toggle source
# File lib/hackerone/client/program.rb, line 22
def id
  @program[:id]
end
incremental_activities(updated_at_after: nil, page_size: 25) click to toggle source
# File lib/hackerone/client/program.rb, line 26
def incremental_activities(updated_at_after: nil, page_size: 25)
  HackerOne::Client::Incremental::Activities.new(
    self,
    updated_at_after: updated_at_after,
    page_size: page_size
  )
end
member?(username) click to toggle source
# File lib/hackerone/client/program.rb, line 38
def member?(username)
  find_member(username).present?
end
swag(page_number: 1, page_size: 100) click to toggle source
# File lib/hackerone/client/program.rb, line 71
def swag(page_number: 1, page_size: 100)
  response_body = make_get_request(
    "programs/#{id}/swag",
    params: { page: { number: page_number, size: page_size } }
  )
  response_body.map { |r| Swag.new(r, self) }
end
update_policy(policy:) click to toggle source
# File lib/hackerone/client/program.rb, line 54
def update_policy(policy:)
  body = {
    type: "program-policy",
    attributes: {
      policy: policy
    }
  }
  make_put_request("programs/#{id}/policy", request_body: body)
end

Private Instance Methods

groups() click to toggle source
# File lib/hackerone/client/program.rb, line 92
def groups
  @groups ||= relationships.groups[:data].map { |group_data| Group.new(group_data) }
end
members() click to toggle source
# File lib/hackerone/client/program.rb, line 88
def members
  @members ||= relationships.members[:data].map { |member_data| Member.new(member_data) }
end
relationships() click to toggle source
# File lib/hackerone/client/program.rb, line 96
def relationships
  # Relationships are only included in the /programs/:id call,
  # which is why we need to do a separate call here.
  @relationships ||= begin
    response = HackerOne::Client::Api.hackerone_api_connection.get do |req|
      req.url "programs/#{id}"
    end

    data = HackerOne::Client::Api.parse_response(response)
    OpenStruct.new(data[:relationships])
  end
end