oso-cloud 1.1.1 → 1.2.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: 9268075db2dd7d76b41905d870962afa84ec350ff9d0b335f4c473cef169868e
4
- data.tar.gz: 7eacd7959071d7d2500ceeebf14d09846d5482cd5189139a92667155df796db9
3
+ metadata.gz: 3991004d30f9fb3930a74494eb15f9658d469bf198440888ef4247b04e0e90fe
4
+ data.tar.gz: 19a847a4fa5ef0940606838879aa99cb5e1cb9f0b0b591fac9d30ee1b03adf90
5
5
  SHA512:
6
- metadata.gz: 8fbea6dd735db2f768fd9d1c8a6af8b3219abc5e688b3d9bc2e557b512aa9303fa2e6afa792f701aa60bebc0443d6703fa6fcd3e48ce5a6fcfd3aad8a09e17c4
7
- data.tar.gz: 84baac085041cf7d3e34c0b2261b3bf66a83245ea82d42b42ed3d47de39600d28939e31bf119d000477d5e67dce09a40a3a4a64bd60ecf0bf80ceb1d2f3d8c97
6
+ metadata.gz: a69a9097271580148040e9790d49b297d2ca4c90fb5c032d088f51b619e0e995b5348312e46e3748fc2d2d95a4c16cf9a98bba017d5e09292b64a65202b47b25
7
+ data.tar.gz: 3dfcf182d1283311f79c5ad806ff53e8e8a40c2f36b12cc54b459cfa3d23c215b92e5b59d24b9553df8e2c3a2b874a70e67f87e7ab2f9a647e492188dc4960fc
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- oso-cloud (1.1.1)
4
+ oso-cloud (1.2.0)
5
5
  faraday (~> 2.5.2)
6
6
  faraday-retry (~> 2.0.0)
7
7
 
@@ -14,7 +14,7 @@ GEM
14
14
  faraday-net_http (3.0.2)
15
15
  faraday-retry (2.0.0)
16
16
  faraday (~> 2.0)
17
- minitest (5.15.0)
17
+ minitest (5.18.0)
18
18
  rake (12.3.3)
19
19
  ruby2_keywords (0.0.5)
20
20
 
data/lib/oso/api.rb CHANGED
@@ -203,7 +203,7 @@ module OsoCloud
203
203
 
204
204
  # @!visibility private
205
205
  class Api
206
- def initialize(url: 'https://cloud.osohq.com', api_key: nil, options: nil)
206
+ def initialize(url: 'https://api.osohq.com', api_key: nil, options: nil)
207
207
  @url = url
208
208
  @connection = Faraday.new(url: url) do |faraday|
209
209
  faraday.request :json
@@ -211,7 +211,7 @@ module OsoCloud
211
211
  # responses are processed in reverse order; this stack implies the
212
212
  # retries are attempted before an error is raised, and the json
213
213
  # parser is only applied if there are no errors
214
- faraday.response :json, preserve_raw: true
214
+ faraday.response :json, parser_options: { symbolize_names: true }
215
215
  faraday.response :raise_error
216
216
  faraday.request :retry, {
217
217
  max: (options && options[:max_retries]) || 10,
@@ -251,117 +251,90 @@ module OsoCloud
251
251
  end
252
252
  @api_key = api_key
253
253
  @user_agent = "Oso Cloud (ruby #{RUBY_VERSION}p#{RUBY_PATCHLEVEL}; rv:#{VERSION})"
254
+ @last_offset = nil
254
255
  end
255
256
 
256
257
  def get_policy
257
- params = {}
258
- data = nil
259
258
  url = '/policy'
260
- result = GET(url, params, data)
259
+ result = GET(url, nil)
261
260
  GetPolicyResult.new(**result)
262
261
  end
263
262
 
264
263
  def post_policy(data)
265
- params = {}
266
- data = OsoCloud::Helpers.to_hash(data)
267
264
  url = '/policy'
268
- result = POST(url, params, data)
265
+ result = POST(url, nil, data, true)
269
266
  ApiResult.new(**result)
270
267
  end
271
268
 
272
269
  def post_facts(data)
273
- params = {}
274
- data = OsoCloud::Helpers.to_hash(data)
275
270
  url = '/facts'
276
- result = POST(url, params, data)
271
+ result = POST(url, nil, data, true)
277
272
  Fact.new(**result)
278
273
  end
279
274
 
280
275
  def delete_facts(data)
281
- params = {}
282
- data = OsoCloud::Helpers.to_hash(data)
283
276
  url = '/facts'
284
- result = DELETE(url, params, data)
277
+ result = DELETE(url, data)
285
278
  ApiResult.new(**result)
286
279
  end
287
280
 
288
281
  def post_bulk_load(data)
289
- params = {}
290
- data = OsoCloud::Helpers.to_hash(data)
291
282
  url = '/bulk_load'
292
- result = POST(url, params, data)
283
+ result = POST(url, nil, data, true)
293
284
  ApiResult.new(**result)
294
285
  end
295
286
 
296
287
  def post_bulk_delete(data)
297
- params = {}
298
- data = OsoCloud::Helpers.to_hash(data)
299
288
  url = '/bulk_delete'
300
- result = POST(url, params, data)
289
+ result = POST(url, nil, data, true)
301
290
  ApiResult.new(**result)
302
291
  end
303
292
 
304
293
  def post_bulk(data)
305
- params = {}
306
- data = OsoCloud::Helpers.to_hash(data)
307
294
  url = '/bulk'
308
- result = POST(url, params, data)
295
+ result = POST(url, nil, data, true)
309
296
  ApiResult.new(**result)
310
297
  end
311
298
 
312
299
  def post_authorize(data)
313
- params = {}
314
- data = OsoCloud::Helpers.to_hash(data)
315
300
  url = '/authorize'
316
- result = POST(url, params, data)
301
+ result = POST(url, nil, data, false)
317
302
  AuthorizeResult.new(**result)
318
303
  end
319
304
 
320
305
  def post_authorize_resources(data)
321
- params = {}
322
- data = OsoCloud::Helpers.to_hash(data)
323
306
  url = '/authorize_resources'
324
- result = POST(url, params, data)
307
+ result = POST(url, nil, data, false)
325
308
  AuthorizeResourcesResult.new(**result)
326
309
  end
327
310
 
328
311
  def post_list(data)
329
- params = {}
330
- data = OsoCloud::Helpers.to_hash(data)
331
312
  url = '/list'
332
- result = POST(url, params, data)
313
+ result = POST(url, nil, data, false)
333
314
  ListResult.new(**result)
334
315
  end
335
316
 
336
317
  def post_actions(data)
337
- params = {}
338
- data = OsoCloud::Helpers.to_hash(data)
339
318
  url = '/actions'
340
- result = POST(url, params, data)
319
+ result = POST(url, nil, data, false)
341
320
  ActionsResult.new(**result)
342
321
  end
343
322
 
344
323
  def post_query(data)
345
- params = {}
346
- data = OsoCloud::Helpers.to_hash(data)
347
324
  url = '/query'
348
- result = POST(url, params, data)
325
+ result = POST(url, nil, data, false)
349
326
  QueryResult.new(**result)
350
327
  end
351
328
 
352
329
  def get_stats
353
- params = {}
354
- data = nil
355
330
  url = '/stats'
356
- result = GET(url, params, data)
331
+ result = GET(url, {})
357
332
  StatsResult.new(**result)
358
333
  end
359
334
 
360
335
  def clear_data
361
- params = {}
362
- data = nil
363
336
  url = '/clear_data'
364
- result = POST(url, params, data)
337
+ result = POST(url, nil, nil, true)
365
338
  ApiResult.new(**result)
366
339
  end
367
340
 
@@ -378,57 +351,67 @@ module OsoCloud
378
351
  params["args.#{i}.id"] = arg_query.id
379
352
  end
380
353
  end
381
- data = nil
382
354
  url = '/facts'
383
- result = GET(url, params, data)
355
+ result = GET(url, params)
384
356
  result.map { |v| Fact.new(**v) }
385
357
  end
386
358
 
387
359
  def headers
388
- {
360
+ default_headers = {
389
361
  'Authorization' => format('Bearer %s', @api_key),
390
362
  'User-Agent' => @user_agent,
391
363
  Accept: 'application/json',
392
364
  'Content-Type': 'application/json',
393
- 'X-OsoApiVersion': '0'
365
+ 'X-OsoApiVersion': '0',
394
366
  }
367
+ # set OsoOffset is last_offset is not nil
368
+ default_headers[:OsoOffset] = @last_offset unless @last_offset.nil?
369
+ default_headers
395
370
  end
396
371
 
397
- def GET(path, params, _body)
398
- response = @connection.get("api#{path}", params, headers)
399
- handle_faraday_response response
372
+ def GET(path, params)
373
+ response = @connection.get("api#{path}") do |req|
374
+ req.params = params unless params.nil?
375
+ req.headers = headers
376
+ end
377
+ response.body
400
378
  rescue Faraday::Error => e
401
379
  handle_faraday_error e
402
380
  end
403
381
 
404
- def POST(path, params, body)
405
- response = @connection.post("api#{path}", body, headers) do |req|
406
- req.params = params
382
+ def POST(path, params, body, isMutation)
383
+ response = @connection.post("api#{path}") do |req|
384
+ req.params = params unless params.nil?
385
+ req.body = OsoCloud::Helpers.to_hash(body) unless body.nil?
386
+ req.headers = headers
407
387
  end
408
- handle_faraday_response response
388
+
389
+ if isMutation
390
+ @last_offset = response.headers[:OsoOffset]
391
+ end
392
+ response.body
409
393
  rescue Faraday::Error => e
410
394
  handle_faraday_error e
411
395
  end
412
396
 
413
- def DELETE(path, params, body)
414
- response = @connection.delete("api#{path}", params, headers) do |req|
415
- req.body = body
397
+ def DELETE(path, body)
398
+ response = @connection.delete("api#{path}") do |req|
399
+ req.headers = headers
400
+ req.body = OsoCloud::Helpers.to_hash(body) unless body.nil?
416
401
  end
417
- handle_faraday_response response
402
+ response.body
418
403
  rescue Faraday::Error => e
419
404
  handle_faraday_error e
420
405
  end
421
406
 
422
- def handle_faraday_response(response)
423
- # TODO: (@patrickod) refactor duplicative JSON parsing
424
- JSON.parse(response.env[:raw_body], symbolize_names: true)
425
- end
426
-
427
407
  def handle_faraday_error(error)
428
- err = JSON.parse(error.response[:body], symbolize_names: true)
429
- raise ApiError.new(**err)
430
- rescue JSON::ParserError => e
431
- raise ApiError.new(message: e.message)
408
+ resp = error.response
409
+ err = if resp.respond_to? :body
410
+ resp.body[:message]
411
+ else
412
+ error.message
413
+ end
414
+ raise ApiError.new(message: err)
432
415
  end
433
416
  end
434
417
  end
data/lib/oso/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module OsoCloud
2
- VERSION = '1.1.1'.freeze
2
+ VERSION = '1.2.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oso-cloud
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Oso Security, Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-04-27 00:00:00.000000000 Z
11
+ date: 2023-06-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday