hackerone-client 0.22.1 → 0.23.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 684b59afaacb9acad9aba5a4a4e696535684c27ee3abb2d37b3a4c9e761c87a8
4
- data.tar.gz: 50b813301fb053284ef490a8fad3fea66319881a569ec3acf53329963c4684aa
3
+ metadata.gz: b2fdab8aa46e47e1103a2fdb1dc78c42689e8c1c2635133bbf46a1dcec8ac039
4
+ data.tar.gz: 7326e1a37eda609ae45617ef9a100e3d6fa57bff8b6a40d77e622104b889e471
5
5
  SHA512:
6
- metadata.gz: 7dfae7e6b2348b4a1ab6554fc5a440311fa6c583fbd196684908565395b2a3ad8f04eb5cfd4ed33838c4118a2615b400e3a3874578d2129adfd90791a38abc50
7
- data.tar.gz: 2060b8258b6b48f7b0e444b17e87332495facc6a8da934add226c82d78e364f76831c0355da4a200684a1112b49d691adcc679d40bf71a50c6012666789a39b4
6
+ metadata.gz: 5e48cb154448b6cc74b3a2a9b57febe3b773ea49ad5e802617ad611a7fa5df4453ded6b708dddb418a478195eaba9064df0572a8227e1cfcc0adfe1dfe627dc3
7
+ data.tar.gz: 345710ef1635331f860ec6bc561ddaed4de35303983851c1f4d80077e665253a2e1465574e3d54c6b887a70e74b8f2b6fee3a4c1ff0317ccde24f2d345398b51
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## [0.23.0] - 2024-08-09
2
+
3
+ [Add Asset and Organization resources](https://github.com/github/hackerone-client/pull/10) (@jeffgran-dox)
4
+
1
5
  ## [0.22.0] - 2024-01-10
2
6
 
3
7
  [Update Faraday API call and deprecate support for Ruby <2.6](https://github.com/github/hackerone-client/pull/2) (@maclarel)
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Hackerone::Client
2
2
 
3
- A limited client library for interacting with HackerOne in Ruby. Currently only supports a few operations:
3
+ A limited client library for interacting with HackerOne in Ruby. Currently supports a few operations:
4
4
 
5
5
  ```ruby
6
6
  client = HackerOne::Client::Api.new("github")
@@ -57,6 +57,23 @@ program.update_policy(policy: "Please submit valid vulnerabilities")
57
57
 
58
58
  # Gets a program's balance
59
59
  program.balance
60
+
61
+ # Gets a list of structured scopes
62
+ program.structured_scopes
63
+
64
+ # Gets an organization for a program
65
+ program.organization
66
+
67
+ # Gets assets for an organization
68
+ program.organization.assets
69
+
70
+ # Updates an asset for an organization
71
+ asset = program.organization.assets[0]
72
+ asset.update(
73
+ attributes: {
74
+ description: "This is the new description"
75
+ }
76
+ )
60
77
  ```
61
78
 
62
79
  ## State change hooks
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ module HackerOne
4
+ module Client
5
+ class Asset
6
+ include ResourceHelper
7
+
8
+ DELEGATES = [
9
+ :asset_type,
10
+ :identifier,
11
+ :description,
12
+ :coverage,
13
+ :max_severity,
14
+ :confidentiality_requirement,
15
+ :integrity_requirement,
16
+ :availability_requirement,
17
+ :created_at,
18
+ :updated_at,
19
+ :archived_at,
20
+ :reference,
21
+ :state,
22
+ ]
23
+
24
+ delegate *DELEGATES, to: :attributes
25
+
26
+ attr_reader :organization
27
+
28
+ def initialize(asset, organization)
29
+ @asset = asset
30
+ @organization = organization
31
+ end
32
+
33
+ def id
34
+ @asset[:id]
35
+ end
36
+
37
+ def update(attributes:)
38
+ body = {
39
+ type: "asset",
40
+ attributes: attributes
41
+ }
42
+ make_put_request("organizations/#{organization.id}/assets/#{id}", request_body: body)
43
+ end
44
+
45
+ def programs
46
+ relationships.programs[:data].map { |p| Program.new(p) }
47
+ end
48
+
49
+ private
50
+
51
+ def relationships
52
+ OpenStruct.new(@asset[:relationships])
53
+ end
54
+
55
+ def attributes
56
+ OpenStruct.new(@asset[:attributes])
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module HackerOne
4
+ module Client
5
+ class Organization
6
+ include ResourceHelper
7
+
8
+ delegate :handle, :created_at, :updated_at, to: :attributes
9
+
10
+ def initialize(org)
11
+ @organization = org
12
+ end
13
+
14
+ def id
15
+ @organization[:id]
16
+ end
17
+
18
+ def assets(page_number: 1, page_size: 100)
19
+ make_get_request(
20
+ "organizations/#{id}/assets",
21
+ params: { page: { number: page_number, size: page_size } }
22
+ ).map do |asset_data|
23
+ Asset.new(asset_data, self)
24
+ end
25
+ end
26
+
27
+ private
28
+
29
+ def attributes
30
+ OpenStruct.new(@organization[:attributes])
31
+ end
32
+ end
33
+ end
34
+ end
@@ -51,6 +51,15 @@ module HackerOne
51
51
  groups.find { |group| group.name == groupname }
52
52
  end
53
53
 
54
+ def structured_scopes(page_number: 1, page_size: 100)
55
+ make_get_request(
56
+ "programs/#{id}/structured_scopes",
57
+ params: { page: { number: page_number, size: page_size } }
58
+ ).map do |data|
59
+ StructuredScope.new(data, self)
60
+ end
61
+ end
62
+
54
63
  def update_policy(policy:)
55
64
  body = {
56
65
  type: "program-policy",
@@ -83,8 +92,6 @@ module HackerOne
83
92
  BillingBalance.new(response_body).balance
84
93
  end
85
94
 
86
- private
87
-
88
95
  def members
89
96
  @members ||= relationships.members[:data].map { |member_data| Member.new(member_data) }
90
97
  end
@@ -93,6 +100,12 @@ module HackerOne
93
100
  @groups ||= relationships.groups[:data].map { |group_data| Group.new(group_data) }
94
101
  end
95
102
 
103
+ def organization
104
+ @organization ||= Organization.new(relationships.organization[:data])
105
+ end
106
+
107
+ private
108
+
96
109
  def relationships
97
110
  # Relationships are only included in the /programs/:id call,
98
111
  # which is why we need to do a separate call here.
@@ -108,7 +108,7 @@ module HackerOne
108
108
  end
109
109
 
110
110
  def structured_scope
111
- StructuredScope.new(relationships[:structured_scope].fetch(:data, {}))
111
+ StructuredScope.new(relationships[:structured_scope].fetch(:data, {}), program)
112
112
  end
113
113
 
114
114
  # Excludes reports where the payout amount is 0 indicating swag-only or no
@@ -3,17 +3,27 @@
3
3
  module HackerOne
4
4
  module Client
5
5
  class StructuredScope
6
+ include ResourceHelper
7
+
6
8
  DELEGATES = [
7
9
  :asset_identifier,
8
10
  :asset_type,
11
+ :availability_requirement,
12
+ :confidentiality_requirement,
9
13
  :eligible_for_bounty,
10
14
  :eligible_for_submission,
11
- :instruction
15
+ :instruction,
16
+ :integrity_requirement,
17
+ :max_severity,
18
+ :reference
12
19
  ]
13
20
 
14
21
  delegate *DELEGATES, to: :attributes
15
22
 
16
- def initialize(scope)
23
+ attr_reader :program
24
+
25
+ def initialize(scope, program = nil)
26
+ @program = program
17
27
  @scope = scope
18
28
  end
19
29
 
@@ -21,6 +31,14 @@ module HackerOne
21
31
  @scope[:id]
22
32
  end
23
33
 
34
+ def update(attributes:)
35
+ body = {
36
+ type: "structured-scope",
37
+ attributes: attributes
38
+ }
39
+ make_put_request("programs/#{program.id}/structured_scopes/#{id}", request_body: body)
40
+ end
41
+
24
42
  private
25
43
 
26
44
  def attributes
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Hackerone
4
4
  module Client
5
- VERSION = "0.22.1"
5
+ VERSION = "0.23.0"
6
6
  end
7
7
  end
@@ -4,10 +4,13 @@ require "faraday"
4
4
  require "json"
5
5
  require "active_support"
6
6
  require "active_support/core_ext/numeric/time"
7
+ require "ostruct"
7
8
  require_relative "client/version"
8
9
  require_relative "client/report"
9
10
  require_relative "client/activity"
10
11
  require_relative "client/program"
12
+ require_relative "client/organization"
13
+ require_relative "client/asset"
11
14
  require_relative "client/reporter"
12
15
  require_relative "client/member"
13
16
  require_relative "client/user"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hackerone-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.22.1
4
+ version: 0.23.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Neil Matatall
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-01-16 00:00:00.000000000 Z
11
+ date: 2024-08-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -108,7 +108,7 @@ dependencies:
108
108
  - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
- description:
111
+ description:
112
112
  email:
113
113
  - neil.matatall@gmail.com
114
114
  executables: []
@@ -172,12 +172,14 @@ files:
172
172
  - lib/hackerone/client.rb
173
173
  - lib/hackerone/client/activity.rb
174
174
  - lib/hackerone/client/address.rb
175
+ - lib/hackerone/client/asset.rb
175
176
  - lib/hackerone/client/attachment.rb
176
177
  - lib/hackerone/client/billing_balance.rb
177
178
  - lib/hackerone/client/bounty.rb
178
179
  - lib/hackerone/client/group.rb
179
180
  - lib/hackerone/client/incremental/activities.rb
180
181
  - lib/hackerone/client/member.rb
182
+ - lib/hackerone/client/organization.rb
181
183
  - lib/hackerone/client/program.rb
182
184
  - lib/hackerone/client/report.rb
183
185
  - lib/hackerone/client/reporter.rb
@@ -191,7 +193,7 @@ homepage: https://github.com/github/hackerone-client
191
193
  licenses:
192
194
  - MIT
193
195
  metadata: {}
194
- post_install_message:
196
+ post_install_message:
195
197
  rdoc_options: []
196
198
  require_paths:
197
199
  - lib
@@ -206,8 +208,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
206
208
  - !ruby/object:Gem::Version
207
209
  version: '0'
208
210
  requirements: []
209
- rubygems_version: 3.0.9
210
- signing_key:
211
+ rubygems_version: 3.0.3.1
212
+ signing_key:
211
213
  specification_version: 4
212
214
  summary: A limited client for the HackerOne API
213
215
  test_files: []