hackerone-client 0.1.1 → 0.2.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5a8c5920dd2fbc7effbbeb896aef7fbb300c2652
4
- data.tar.gz: 1527aeec85b20f74364d5616621c78d4f878cd86
3
+ metadata.gz: ebb425c241793e7a304c86e2432a9cd8c1fbfa4c
4
+ data.tar.gz: ef459ac5cab769b0ab7ee5ccc012f74c1492a37a
5
5
  SHA512:
6
- metadata.gz: 386da678af280aab7fc4aff32a47a702f7339969b78fb3ba4d6bffd129eb3bbfb989e302f833fa32577de52bda46d20477f435292063b36a20864ccf5debd1ab
7
- data.tar.gz: 0c0520cb9da4b1dc160de2d9df8b283ae6dd8d8b9d8c8dda2202e08dd0327c96164aa0a2eaed3d333bb543b4d57f8f5925bb8baff443d4f67ed812280287403b
6
+ metadata.gz: 7ae32de2ce5143b8b694a72434057e9d991422f0e374dda94c0f6a26f3b9ef8c8a12b14938bab7e2f5023c890b944dccc55bc6e73ea67bfc26cd01106e1bfe27
7
+ data.tar.gz: c179d3c6ac1e2ca293126ebcdf9d5a7d731e069f9b209edcc5fc93ac154cdb11763835abca01447de94cf694e8eb4bf741b24997e0772df8e587d367b1e9410c
@@ -0,0 +1,78 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://api.hackerone.com/v1/reports/132170/issue_tracker_reference_id
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"data":{"type":"issue-tracker-reference-id","attributes":{"reference":"fooooo"}}}'
9
+ headers:
10
+ Authorization:
11
+ - Basic nope
12
+ User-Agent:
13
+ - Faraday v0.11.0
14
+ Content-Type:
15
+ - application/json
16
+ Accept-Encoding:
17
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
18
+ Accept:
19
+ - "*/*"
20
+ response:
21
+ status:
22
+ code: 200
23
+ message: OK
24
+ headers:
25
+ Date:
26
+ - Thu, 16 Mar 2017 20:21:44 GMT
27
+ Content-Type:
28
+ - application/json; charset=utf-8
29
+ Transfer-Encoding:
30
+ - chunked
31
+ Connection:
32
+ - keep-alive
33
+ Set-Cookie:
34
+ - __cfduid=d4b57ca8890f7f0e1428003db73c2a8f41489695704; expires=Fri, 16-Mar-18
35
+ 20:21:44 GMT; path=/; Domain=api.hackerone.com; HttpOnly
36
+ X-Request-Id:
37
+ - 2c20eb84-1d41-48c2-a64a-6fffd601dce9
38
+ Etag:
39
+ - W/"e6e4cf756fbd434e3375eec1c1256611"
40
+ Cache-Control:
41
+ - max-age=0, private, must-revalidate
42
+ Strict-Transport-Security:
43
+ - max-age=31536000; includeSubDomains; preload
44
+ Content-Security-Policy:
45
+ - default-src 'none'; connect-src 'self' www.google-analytics.com errors.hackerone.net;
46
+ font-src 'self'; img-src 'self' data:; script-src 'self'; style-src 'self'
47
+ 'unsafe-inline'; form-action 'self'; frame-ancestors 'none'; report-uri https://errors.hackerone.net/api/30/csp-report/?sentry_key=61c1e2f50d21487c97a071737701f598
48
+ X-Content-Type-Options:
49
+ - nosniff
50
+ X-Download-Options:
51
+ - noopen
52
+ X-Frame-Options:
53
+ - DENY
54
+ X-Permitted-Cross-Domain-Policies:
55
+ - none
56
+ X-Xss-Protection:
57
+ - 1; mode=block
58
+ Public-Key-Pins-Report-Only:
59
+ - pin-sha256="WoiWRyIOVNa9ihaBciRSC7XHjliYS9VwUGOIud4PB18="; pin-sha256="r/mIkG3eEpVdm+u/ko/cwxzOMo1bk4TyHIlByibiA5E=";
60
+ pin-sha256="K87oWBWM9UZfyddvDfoxL+8lpNyoUB2ptGtn0fv6G2Q="; pin-sha256="iie1VXtL7HzAMF+/PVPR9xzT80kQxdZeJ+zduCB3uj0=";
61
+ pin-sha256="cGuxAXyFXFkWm61cF4HPWX8S0srS9j0aSqN0k4AP+4A="; pin-sha256="bIlWcjiKq1mftH/xd7Hw1JO77Cr+Gv+XYcGUQWwO+A4=";
62
+ pin-sha256="tXD+dGAP8rGY4PW1be90cOYEwg7pZ4G+yPZmIZWPTSg="; max-age=600; includeSubDomains;
63
+ report-uri="https://hackerone.report-uri.io/r/default/hpkp/reportOnly"
64
+ Server:
65
+ - cloudflare-nginx
66
+ Cf-Ray:
67
+ - 340a6ba9fa5653a8-LAX
68
+ body:
69
+ encoding: ASCII-8BIT
70
+ string: '{"relationships":{"report":{"data":{"id":"132170","type":"report","attributes":{"title":"ssss","state":"triaged","created_at":"2016-04-18T22:24:50.065Z","vulnerability_information":"sssss","triaged_at":"2017-03-16T19:53:49.939Z","closed_at":null,"last_reporter_activity_at":"2016-04-18T22:24:50.118Z","first_program_activity_at":"2017-03-16T18:36:40.650Z","last_program_activity_at":"2017-03-16T19:53:49.939Z","bounty_awarded_at":null,"swag_awarded_at":null,"disclosed_at":null,"last_activity_at":"2017-03-16T19:53:49.939Z","issue_tracker_reference_id":"fooooo"},"relationships":{"reporter":{"data":{"id":"57690","type":"user","attributes":{"username":"ndm-github","name":"Neil
71
+ Matatall","disabled":false,"created_at":"2016-02-24T01:33:01.258Z","profile_picture":{"62x62":"https://profile-photos.hackerone-user-content.com/production/000/057/690/1e0c9ef6fc8bcc17806ae82e6f73cdd4d0e74eb9_small.jpg?1469554487","82x82":"https://profile-photos.hackerone-user-content.com/production/000/057/690/f6a17c40a6c910ba801014d1498b55727ea858e3_medium.jpg?1469554487","110x110":"https://profile-photos.hackerone-user-content.com/production/000/057/690/2259dde15230756d99f68a9ca824af11081ab965_large.jpg?1469554487","260x260":"https://profile-photos.hackerone-user-content.com/production/000/057/690/6d2da33805fef8b8ac4cf513e1562699e79365e0_xtralarge.jpg?1469554487"}}}},"program":{"data":{"id":"11767","type":"program","attributes":{"handle":"github-test","created_at":"2016-04-15T17:10:31.261Z","updated_at":"2016-09-20T14:54:15.448Z"}}},"swag":{"data":[]},"attachments":{"data":[]},"vulnerability_types":{"data":[{"id":"107921","type":"vulnerability-type","attributes":{"name":"Cross-Site
72
+ Scripting (XSS)","description":"Failure of a site to validate, filter, or
73
+ encode user input before returning it to another user''s web client.\n","created_at":"2016-04-15T17:10:39.169Z"}}]},"activities":{"data":[{"type":"activity-reference-id-added","id":"1546419","attributes":{"message":"","created_at":"2017-03-16T20:21:44.883Z","updated_at":"2017-03-16T20:21:44.883Z","internal":true,"reference":"fooooo","reference_url":null},"relationships":{"actor":{"data":{"type":"user","id":"151303","attributes":{"username":"testingagain","name":null,"disabled":false,"created_at":"2017-03-16T00:35:19.472Z","profile_picture":{"62x62":"/assets/avatars/default-71a302d706457f3d3a31eb30fa3e73e6cf0b1d677b8fa218eaeaffd67ae97918.png","82x82":"/assets/avatars/default-71a302d706457f3d3a31eb30fa3e73e6cf0b1d677b8fa218eaeaffd67ae97918.png","110x110":"/assets/avatars/default-71a302d706457f3d3a31eb30fa3e73e6cf0b1d677b8fa218eaeaffd67ae97918.png","260x260":"/assets/avatars/default-71a302d706457f3d3a31eb30fa3e73e6cf0b1d677b8fa218eaeaffd67ae97918.png"}}}}}},{"type":"activity-bug-triaged","id":"1546376","attributes":{"message":"This
74
+ is has been triaged internally.","created_at":"2017-03-16T19:53:49.939Z","updated_at":"2017-03-16T19:53:49.939Z","internal":false},"relationships":{"actor":{"data":{"type":"user","id":"151303","attributes":{"username":"testingagain","name":null,"disabled":false,"created_at":"2017-03-16T00:35:19.472Z","profile_picture":{"62x62":"/assets/avatars/default-71a302d706457f3d3a31eb30fa3e73e6cf0b1d677b8fa218eaeaffd67ae97918.png","82x82":"/assets/avatars/default-71a302d706457f3d3a31eb30fa3e73e6cf0b1d677b8fa218eaeaffd67ae97918.png","110x110":"/assets/avatars/default-71a302d706457f3d3a31eb30fa3e73e6cf0b1d677b8fa218eaeaffd67ae97918.png","260x260":"/assets/avatars/default-71a302d706457f3d3a31eb30fa3e73e6cf0b1d677b8fa218eaeaffd67ae97918.png"}}}}}},{"type":"activity-reference-id-added","id":"1546123","attributes":{"message":"","created_at":"2017-03-16T18:36:49.045Z","updated_at":"2017-03-16T18:36:49.045Z","internal":true,"reference":"3476","reference_url":null},"relationships":{"actor":{"data":{"type":"user","id":"151303","attributes":{"username":"testingagain","name":null,"disabled":false,"created_at":"2017-03-16T00:35:19.472Z","profile_picture":{"62x62":"/assets/avatars/default-71a302d706457f3d3a31eb30fa3e73e6cf0b1d677b8fa218eaeaffd67ae97918.png","82x82":"/assets/avatars/default-71a302d706457f3d3a31eb30fa3e73e6cf0b1d677b8fa218eaeaffd67ae97918.png","110x110":"/assets/avatars/default-71a302d706457f3d3a31eb30fa3e73e6cf0b1d677b8fa218eaeaffd67ae97918.png","260x260":"/assets/avatars/default-71a302d706457f3d3a31eb30fa3e73e6cf0b1d677b8fa218eaeaffd67ae97918.png"}}}}}},{"type":"activity-bug-needs-more-info","id":"1546120","attributes":{"message":"This
75
+ is has been triaged internally.","created_at":"2017-03-16T18:36:40.650Z","updated_at":"2017-03-16T18:36:40.650Z","internal":false},"relationships":{"actor":{"data":{"type":"user","id":"151303","attributes":{"username":"testingagain","name":null,"disabled":false,"created_at":"2017-03-16T00:35:19.472Z","profile_picture":{"62x62":"/assets/avatars/default-71a302d706457f3d3a31eb30fa3e73e6cf0b1d677b8fa218eaeaffd67ae97918.png","82x82":"/assets/avatars/default-71a302d706457f3d3a31eb30fa3e73e6cf0b1d677b8fa218eaeaffd67ae97918.png","110x110":"/assets/avatars/default-71a302d706457f3d3a31eb30fa3e73e6cf0b1d677b8fa218eaeaffd67ae97918.png","260x260":"/assets/avatars/default-71a302d706457f3d3a31eb30fa3e73e6cf0b1d677b8fa218eaeaffd67ae97918.png"}}}}}}]},"bounties":{"data":[]},"summaries":{"data":[]}}}}}}'
76
+ http_version:
77
+ recorded_at: Thu, 16 Mar 2017 20:21:45 GMT
78
+ recorded_with: VCR 3.0.3
@@ -29,8 +29,8 @@ http_interactions:
29
29
  Connection:
30
30
  - keep-alive
31
31
  Set-Cookie:
32
- - __cfduid=123; expires=Thu, 15-Feb-18
33
- 01:01:17 GMT; path=/; Domain=api.hackerone.com; HttpOnly
32
+ - __cfduid=123; expires=Thu, 15-Feb-18 01:01:17 GMT; path=/; Domain=api.hackerone.com;
33
+ HttpOnly
34
34
  X-Request-Id:
35
35
  - 21757437-7a32-4560-af4a-885b09f20381
36
36
  Cache-Control:
@@ -66,4 +66,143 @@ http_interactions:
66
66
  string: '{"errors":[{"status":403}]}'
67
67
  http_version:
68
68
  recorded_at: Wed, 15 Feb 2017 01:01:18 GMT
69
+ - request:
70
+ method: post
71
+ uri: https://api.hackerone.com/v1/reports/4040000000000000/state_changes
72
+ body:
73
+ encoding: UTF-8
74
+ string: '{"data":{"type":"state-change","attributes":{"message":"This is has
75
+ been triaged internally.","state":"triaged"}}}'
76
+ headers:
77
+ Authorization:
78
+ - Basic nope
79
+ User-Agent:
80
+ - Faraday v0.11.0
81
+ Content-Type:
82
+ - application/json
83
+ Accept-Encoding:
84
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
85
+ Accept:
86
+ - "*/*"
87
+ response:
88
+ status:
89
+ code: 400
90
+ message: Bad Request
91
+ headers:
92
+ Date:
93
+ - Thu, 16 Mar 2017 20:06:07 GMT
94
+ Content-Type:
95
+ - application/json; charset=utf-8
96
+ Transfer-Encoding:
97
+ - chunked
98
+ Connection:
99
+ - keep-alive
100
+ Set-Cookie:
101
+ - __cfduid=d5e022e1aea468d8848bf0720edab1cae1489694766; expires=Fri, 16-Mar-18
102
+ 20:06:06 GMT; path=/; Domain=api.hackerone.com; HttpOnly
103
+ X-Request-Id:
104
+ - 73b52183-e64f-45db-bcc4-11d46a021364
105
+ Cache-Control:
106
+ - no-cache
107
+ Strict-Transport-Security:
108
+ - max-age=31536000; includeSubDomains; preload
109
+ Content-Security-Policy:
110
+ - default-src 'none'; connect-src 'self' www.google-analytics.com errors.hackerone.net;
111
+ font-src 'self'; img-src 'self' data:; script-src 'self'; style-src 'self'
112
+ 'unsafe-inline'; form-action 'self'; frame-ancestors 'none'; report-uri https://errors.hackerone.net/api/30/csp-report/?sentry_key=61c1e2f50d21487c97a071737701f598
113
+ X-Content-Type-Options:
114
+ - nosniff
115
+ X-Download-Options:
116
+ - noopen
117
+ X-Frame-Options:
118
+ - DENY
119
+ X-Permitted-Cross-Domain-Policies:
120
+ - none
121
+ X-Xss-Protection:
122
+ - 1; mode=block
123
+ Public-Key-Pins-Report-Only:
124
+ - pin-sha256="WoiWRyIOVNa9ihaBciRSC7XHjliYS9VwUGOIud4PB18="; pin-sha256="r/mIkG3eEpVdm+u/ko/cwxzOMo1bk4TyHIlByibiA5E=";
125
+ pin-sha256="K87oWBWM9UZfyddvDfoxL+8lpNyoUB2ptGtn0fv6G2Q="; pin-sha256="iie1VXtL7HzAMF+/PVPR9xzT80kQxdZeJ+zduCB3uj0=";
126
+ pin-sha256="cGuxAXyFXFkWm61cF4HPWX8S0srS9j0aSqN0k4AP+4A="; pin-sha256="bIlWcjiKq1mftH/xd7Hw1JO77Cr+Gv+XYcGUQWwO+A4=";
127
+ pin-sha256="tXD+dGAP8rGY4PW1be90cOYEwg7pZ4G+yPZmIZWPTSg="; max-age=600; includeSubDomains;
128
+ report-uri="https://hackerone.report-uri.io/r/default/hpkp/reportOnly"
129
+ Server:
130
+ - cloudflare-nginx
131
+ Cf-Ray:
132
+ - 340a54c4fbc92240-LAX
133
+ body:
134
+ encoding: UTF-8
135
+ string: '{"errors":[{"status":400,"title":"Invalid Parameter","detail":"The
136
+ parameter ''report_id'' is invalid.","source":{"parameter":"report_id"}}]}'
137
+ http_version:
138
+ recorded_at: Thu, 16 Mar 2017 20:06:07 GMT
139
+ - request:
140
+ method: post
141
+ uri: https://api.hackerone.com/v1/reports/4040000000000000/issue_tracker_reference_id
142
+ body:
143
+ encoding: UTF-8
144
+ string: '{"data":{"type":"issue-tracker-reference-id","attributes":{"reference":"fooooo"}}}'
145
+ headers:
146
+ Authorization:
147
+ - Basic nope
148
+ User-Agent:
149
+ - Faraday v0.11.0
150
+ Content-Type:
151
+ - application/json
152
+ Accept-Encoding:
153
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
154
+ Accept:
155
+ - "*/*"
156
+ response:
157
+ status:
158
+ code: 400
159
+ message: Bad Request
160
+ headers:
161
+ Date:
162
+ - Thu, 16 Mar 2017 20:23:27 GMT
163
+ Content-Type:
164
+ - application/json; charset=utf-8
165
+ Transfer-Encoding:
166
+ - chunked
167
+ Connection:
168
+ - keep-alive
169
+ Set-Cookie:
170
+ - __cfduid=d937ff918b1e20c9491cb8b44ba307c1d1489695807; expires=Fri, 16-Mar-18
171
+ 20:23:27 GMT; path=/; Domain=api.hackerone.com; HttpOnly
172
+ X-Request-Id:
173
+ - 80d19f89-5fc0-412a-b30a-6caaad350d0c
174
+ Cache-Control:
175
+ - no-cache
176
+ Strict-Transport-Security:
177
+ - max-age=31536000; includeSubDomains; preload
178
+ Content-Security-Policy:
179
+ - default-src 'none'; connect-src 'self' www.google-analytics.com errors.hackerone.net;
180
+ font-src 'self'; img-src 'self' data:; script-src 'self'; style-src 'self'
181
+ 'unsafe-inline'; form-action 'self'; frame-ancestors 'none'; report-uri https://errors.hackerone.net/api/30/csp-report/?sentry_key=61c1e2f50d21487c97a071737701f598
182
+ X-Content-Type-Options:
183
+ - nosniff
184
+ X-Download-Options:
185
+ - noopen
186
+ X-Frame-Options:
187
+ - DENY
188
+ X-Permitted-Cross-Domain-Policies:
189
+ - none
190
+ X-Xss-Protection:
191
+ - 1; mode=block
192
+ Public-Key-Pins-Report-Only:
193
+ - pin-sha256="WoiWRyIOVNa9ihaBciRSC7XHjliYS9VwUGOIud4PB18="; pin-sha256="r/mIkG3eEpVdm+u/ko/cwxzOMo1bk4TyHIlByibiA5E=";
194
+ pin-sha256="K87oWBWM9UZfyddvDfoxL+8lpNyoUB2ptGtn0fv6G2Q="; pin-sha256="iie1VXtL7HzAMF+/PVPR9xzT80kQxdZeJ+zduCB3uj0=";
195
+ pin-sha256="cGuxAXyFXFkWm61cF4HPWX8S0srS9j0aSqN0k4AP+4A="; pin-sha256="bIlWcjiKq1mftH/xd7Hw1JO77Cr+Gv+XYcGUQWwO+A4=";
196
+ pin-sha256="tXD+dGAP8rGY4PW1be90cOYEwg7pZ4G+yPZmIZWPTSg="; max-age=600; includeSubDomains;
197
+ report-uri="https://hackerone.report-uri.io/r/default/hpkp/reportOnly"
198
+ Server:
199
+ - cloudflare-nginx
200
+ Cf-Ray:
201
+ - 340a6e2b3a0522c4-LAX
202
+ body:
203
+ encoding: UTF-8
204
+ string: '{"errors":[{"status":400,"title":"Invalid Parameter","detail":"The
205
+ parameter ''report_id'' is invalid.","source":{"parameter":"report_id"}}]}'
206
+ http_version:
207
+ recorded_at: Thu, 16 Mar 2017 20:23:27 GMT
69
208
  recorded_with: VCR 3.0.3
@@ -0,0 +1,79 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://api.hackerone.com/v1/reports/132170/state_changes
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"data":{"type":"state-change","attributes":{"message":"This is has
9
+ been triaged internally.","state":"triaged"}}}'
10
+ headers:
11
+ Authorization:
12
+ - Basic nope
13
+ User-Agent:
14
+ - Faraday v0.11.0
15
+ Content-Type:
16
+ - application/json
17
+ Accept-Encoding:
18
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
19
+ Accept:
20
+ - "*/*"
21
+ response:
22
+ status:
23
+ code: 201
24
+ message: Created
25
+ headers:
26
+ Date:
27
+ - Thu, 16 Mar 2017 19:53:50 GMT
28
+ Content-Type:
29
+ - application/json; charset=utf-8
30
+ Transfer-Encoding:
31
+ - chunked
32
+ Connection:
33
+ - keep-alive
34
+ Set-Cookie:
35
+ - __cfduid=d6abf05e4448cfd8e6f406e1fb105f1911489694029; expires=Fri, 16-Mar-18
36
+ 19:53:49 GMT; path=/; Domain=api.hackerone.com; HttpOnly
37
+ X-Request-Id:
38
+ - cd191af9-7666-4ed1-8a52-8a1305e29f5e
39
+ Etag:
40
+ - W/"ec64e6720b3ad3ce4838299e5a951f99"
41
+ Cache-Control:
42
+ - max-age=0, private, must-revalidate
43
+ Strict-Transport-Security:
44
+ - max-age=31536000; includeSubDomains; preload
45
+ Content-Security-Policy:
46
+ - default-src 'none'; connect-src 'self' www.google-analytics.com errors.hackerone.net;
47
+ font-src 'self'; img-src 'self' data:; script-src 'self'; style-src 'self'
48
+ 'unsafe-inline'; form-action 'self'; frame-ancestors 'none'; report-uri https://errors.hackerone.net/api/30/csp-report/?sentry_key=61c1e2f50d21487c97a071737701f598
49
+ X-Content-Type-Options:
50
+ - nosniff
51
+ X-Download-Options:
52
+ - noopen
53
+ X-Frame-Options:
54
+ - DENY
55
+ X-Permitted-Cross-Domain-Policies:
56
+ - none
57
+ X-Xss-Protection:
58
+ - 1; mode=block
59
+ Public-Key-Pins-Report-Only:
60
+ - pin-sha256="WoiWRyIOVNa9ihaBciRSC7XHjliYS9VwUGOIud4PB18="; pin-sha256="r/mIkG3eEpVdm+u/ko/cwxzOMo1bk4TyHIlByibiA5E=";
61
+ pin-sha256="K87oWBWM9UZfyddvDfoxL+8lpNyoUB2ptGtn0fv6G2Q="; pin-sha256="iie1VXtL7HzAMF+/PVPR9xzT80kQxdZeJ+zduCB3uj0=";
62
+ pin-sha256="cGuxAXyFXFkWm61cF4HPWX8S0srS9j0aSqN0k4AP+4A="; pin-sha256="bIlWcjiKq1mftH/xd7Hw1JO77Cr+Gv+XYcGUQWwO+A4=";
63
+ pin-sha256="tXD+dGAP8rGY4PW1be90cOYEwg7pZ4G+yPZmIZWPTSg="; max-age=600; includeSubDomains;
64
+ report-uri="https://hackerone.report-uri.io/r/default/hpkp/reportOnly"
65
+ Server:
66
+ - cloudflare-nginx
67
+ Cf-Ray:
68
+ - 340a42c58e9553de-LAX
69
+ body:
70
+ encoding: UTF-8
71
+ string: '{"data":{"id":"132170","type":"report","attributes":{"title":"ssss","state":"triaged","created_at":"2016-04-18T22:24:50.065Z","vulnerability_information":"sssss","triaged_at":"2017-03-16T19:53:49.939Z","closed_at":null,"last_reporter_activity_at":"2016-04-18T22:24:50.118Z","first_program_activity_at":"2017-03-16T18:36:40.650Z","last_program_activity_at":"2017-03-16T19:53:49.939Z","bounty_awarded_at":null,"swag_awarded_at":null,"disclosed_at":null,"last_activity_at":"2017-03-16T19:53:49.939Z","issue_tracker_reference_id":"3476"},"relationships":{"reporter":{"data":{"id":"57690","type":"user","attributes":{"username":"ndm-github","name":"Neil
72
+ Matatall","disabled":false,"created_at":"2016-02-24T01:33:01.258Z","profile_picture":{"62x62":"https://profile-photos.hackerone-user-content.com/production/000/057/690/1e0c9ef6fc8bcc17806ae82e6f73cdd4d0e74eb9_small.jpg?1469554487","82x82":"https://profile-photos.hackerone-user-content.com/production/000/057/690/f6a17c40a6c910ba801014d1498b55727ea858e3_medium.jpg?1469554487","110x110":"https://profile-photos.hackerone-user-content.com/production/000/057/690/2259dde15230756d99f68a9ca824af11081ab965_large.jpg?1469554487","260x260":"https://profile-photos.hackerone-user-content.com/production/000/057/690/6d2da33805fef8b8ac4cf513e1562699e79365e0_xtralarge.jpg?1469554487"}}}},"program":{"data":{"id":"11767","type":"program","attributes":{"handle":"github-test","created_at":"2016-04-15T17:10:31.261Z","updated_at":"2016-09-20T14:54:15.448Z"}}},"swag":{"data":[]},"attachments":{"data":[]},"vulnerability_types":{"data":[{"id":"107921","type":"vulnerability-type","attributes":{"name":"Cross-Site
73
+ Scripting (XSS)","description":"Failure of a site to validate, filter, or
74
+ encode user input before returning it to another user''s web client.\n","created_at":"2016-04-15T17:10:39.169Z"}}]},"activities":{"data":[{"type":"activity-bug-triaged","id":"1546376","attributes":{"message":"This
75
+ is has been triaged internally.","created_at":"2017-03-16T19:53:49.939Z","updated_at":"2017-03-16T19:53:49.939Z","internal":false},"relationships":{"actor":{"data":{"type":"user","id":"151303","attributes":{"username":"testingagain","name":null,"disabled":false,"created_at":"2017-03-16T00:35:19.472Z","profile_picture":{"62x62":"/assets/avatars/default-71a302d706457f3d3a31eb30fa3e73e6cf0b1d677b8fa218eaeaffd67ae97918.png","82x82":"/assets/avatars/default-71a302d706457f3d3a31eb30fa3e73e6cf0b1d677b8fa218eaeaffd67ae97918.png","110x110":"/assets/avatars/default-71a302d706457f3d3a31eb30fa3e73e6cf0b1d677b8fa218eaeaffd67ae97918.png","260x260":"/assets/avatars/default-71a302d706457f3d3a31eb30fa3e73e6cf0b1d677b8fa218eaeaffd67ae97918.png"}}}}}},{"type":"activity-reference-id-added","id":"1546123","attributes":{"message":"","created_at":"2017-03-16T18:36:49.045Z","updated_at":"2017-03-16T18:36:49.045Z","internal":true,"reference":"3476","reference_url":null},"relationships":{"actor":{"data":{"type":"user","id":"151303","attributes":{"username":"testingagain","name":null,"disabled":false,"created_at":"2017-03-16T00:35:19.472Z","profile_picture":{"62x62":"/assets/avatars/default-71a302d706457f3d3a31eb30fa3e73e6cf0b1d677b8fa218eaeaffd67ae97918.png","82x82":"/assets/avatars/default-71a302d706457f3d3a31eb30fa3e73e6cf0b1d677b8fa218eaeaffd67ae97918.png","110x110":"/assets/avatars/default-71a302d706457f3d3a31eb30fa3e73e6cf0b1d677b8fa218eaeaffd67ae97918.png","260x260":"/assets/avatars/default-71a302d706457f3d3a31eb30fa3e73e6cf0b1d677b8fa218eaeaffd67ae97918.png"}}}}}},{"type":"activity-bug-needs-more-info","id":"1546120","attributes":{"message":"This
76
+ is has been triaged internally.","created_at":"2017-03-16T18:36:40.650Z","updated_at":"2017-03-16T18:36:40.650Z","internal":false},"relationships":{"actor":{"data":{"type":"user","id":"151303","attributes":{"username":"testingagain","name":null,"disabled":false,"created_at":"2017-03-16T00:35:19.472Z","profile_picture":{"62x62":"/assets/avatars/default-71a302d706457f3d3a31eb30fa3e73e6cf0b1d677b8fa218eaeaffd67ae97918.png","82x82":"/assets/avatars/default-71a302d706457f3d3a31eb30fa3e73e6cf0b1d677b8fa218eaeaffd67ae97918.png","110x110":"/assets/avatars/default-71a302d706457f3d3a31eb30fa3e73e6cf0b1d677b8fa218eaeaffd67ae97918.png","260x260":"/assets/avatars/default-71a302d706457f3d3a31eb30fa3e73e6cf0b1d677b8fa218eaeaffd67ae97918.png"}}}}}}]},"bounties":{"data":[]},"summaries":{"data":[]}}}}'
77
+ http_version:
78
+ recorded_at: Thu, 16 Mar 2017 19:53:50 GMT
79
+ recorded_with: VCR 3.0.3
@@ -12,6 +12,17 @@ module HackerOne
12
12
  DEFAULT_HIGH_RANGE = 2500...4999
13
13
  DEFAULT_CRITICAL_RANGE = 5000...100_000_000
14
14
 
15
+ STATES = %w(
16
+ new
17
+ triaged
18
+ needs-more-info
19
+ resolved
20
+ not-applicable
21
+ informative
22
+ duplicate
23
+ spam
24
+ ).map(&:to_sym)
25
+
15
26
  class << self
16
27
  ATTRS = [:low_range, :medium_range, :high_range, :critical_range].freeze
17
28
  attr_accessor :program
@@ -61,6 +72,60 @@ module HackerOne
61
72
  end
62
73
  end
63
74
 
75
+ ## Idempotent: add the issue reference and put the report into the "triage" state.
76
+ #
77
+ # id: the ID of the report
78
+ # state: value for the reference (e.g. issue number or relative path to cross-repo issue)
79
+ #
80
+ # returns an HackerOne::Client::Report object or raises an error if
81
+ # no report is found.
82
+ def triage(id, reference)
83
+ add_report_reference(id, reference)
84
+ state_change(id, :triaged)
85
+ end
86
+
87
+ ## Idempotent: Add a report reference to a project
88
+ #
89
+ # id: the ID of the report
90
+ # state: value for the reference (e.g. issue number or relative path to cross-repo issue)
91
+ #
92
+ # returns an HackerOne::Client::Report object or raises an error if
93
+ # no report is found.
94
+ def add_report_reference(id, reference)
95
+ body = {
96
+ data: {
97
+ type: "issue-tracker-reference-id",
98
+ attributes: {
99
+ reference: reference
100
+ }
101
+ }
102
+ }
103
+
104
+ post("reports/#{id}/issue_tracker_reference_id", body)
105
+ end
106
+
107
+ ## Idempotent: change the state of a report. See STATES for valid values.
108
+ #
109
+ # id: the ID of the report
110
+ # state: the state in which the report is to be put in
111
+ #
112
+ # returns an HackerOne::Client::Report object or raises an error if
113
+ # no report is found.
114
+ def state_change(id, state)
115
+ raise ArgumentError, "state (#{state}) must be one of #{STATES}" unless STATES.include?(state)
116
+
117
+ body = {
118
+ data: {
119
+ type: "state-change",
120
+ attributes: {
121
+ message: "This is has been triaged internally.",
122
+ state: state
123
+ }
124
+ }
125
+ }
126
+ post("reports/#{id}/state_changes", body)
127
+ end
128
+
64
129
  ## Public: retrieve a report
65
130
  #
66
131
  # id: the ID of a specific report
@@ -68,20 +133,46 @@ module HackerOne
68
133
  # returns an HackerOne::Client::Report object or raises an error if
69
134
  # no report is found.
70
135
  def report(id)
136
+ get("reports/#{id}")
137
+ end
138
+
139
+ private
140
+ def post(endpoint, body)
141
+ response = with_retry do
142
+ self.class.hackerone_api_connection.post do |req|
143
+ req.headers['Content-Type'] = 'application/json'
144
+ req.body = body.to_json
145
+ req.url endpoint
146
+ end
147
+ end
148
+
149
+ parse_response(response)
150
+ end
151
+
152
+ def get(endpoint, params = nil)
71
153
  response = with_retry do
72
154
  self.class.hackerone_api_connection.get do |req|
73
- req.url "reports/#{id}"
155
+ req.headers['Content-Type'] = 'application/json'
156
+ req.params = params || {}
157
+ req.url endpoint
74
158
  end
75
159
  end
76
160
 
77
- if response.success?
161
+ parse_response(response)
162
+ end
163
+
164
+ def parse_response(response)
165
+ if response.status.to_s.start_with?("4")
166
+ raise ArgumentError, "API called failed, probably your fault: #{response.body}"
167
+ elsif response.status.to_s.start_with?("5")
168
+ raise Runtime, "API called failed, probobly their fault: #{response.body}"
169
+ elsif response.success?
78
170
  Report.new(JSON.parse(response.body, :symbolize_names => true)[:data])
79
171
  else
80
- raise ArgumentError, "Could not retrieve HackerOne report ##{id}: #{response.body}"
172
+ raise RuntimeError, "Not sure what to do here: #{response.body}"
81
173
  end
82
174
  end
83
175
 
84
- private
85
176
  def self.hackerone_api_connection
86
177
  unless ENV["HACKERONE_TOKEN_NAME"] && ENV["HACKERONE_TOKEN"]
87
178
  raise NotConfiguredError, "HACKERONE_TOKEN_NAME HACKERONE_TOKEN environment variables must be set"
@@ -1,5 +1,5 @@
1
1
  module Hackerone
2
2
  module Client
3
- VERSION = "0.1.1"
3
+ VERSION = "0.2.0"
4
4
  end
5
5
  end
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.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Neil Matatall
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-03-15 00:00:00.000000000 Z
11
+ date: 2017-03-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -132,10 +132,12 @@ files:
132
132
  - Rakefile
133
133
  - bin/console
134
134
  - bin/setup
135
+ - fixtures/vcr_cassettes/add_report_reference.yml
135
136
  - fixtures/vcr_cassettes/empty_report_list.yml
136
137
  - fixtures/vcr_cassettes/missing_report.yml
137
138
  - fixtures/vcr_cassettes/report.yml
138
139
  - fixtures/vcr_cassettes/report_list.yml
140
+ - fixtures/vcr_cassettes/stage_change.yml
139
141
  - hackerone-client.gemspec
140
142
  - lib/hackerone/client.rb
141
143
  - lib/hackerone/client/report.rb