oso-cloud 1.7.1 → 1.8.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: 78d81ade4fd246a2398c1a0224ecc8a6ff3852b968e03c0c79c1d28295358cfd
4
- data.tar.gz: cdfa7bb5f957f1aaf7d801d8b5bca4e3e2dc4b1df8044d9cc30114aae5d012fe
3
+ metadata.gz: aa3ca5a542cd09609eab342416030091943a7e777e6fdccd8b6caf1b1b6a5a99
4
+ data.tar.gz: 34c40e85594b08ef91ead85505c1488d42fc1291bcf1f3583dacce49abb47446
5
5
  SHA512:
6
- metadata.gz: dc3fa7da1c706b47ffe89e6d9ed03ed9950cb8c756051ef2cc3e7ed81e2931f34dbdad8e6c8e217f9d061a4c9a2d5ad36784acdbba0772a3d16102bc43d8e09f
7
- data.tar.gz: e48be352ec530bfb99afe81723abbfca673a9c63d295388d68f34bebf97b973a8c911d68133cc11668622cef26553cb92e5336346b1410d081bd1dac41c9c881
6
+ metadata.gz: e950c324bbb312688fe5b2e119d761fb5e7189ac087386ef232d632b1179d7ad2db0a3f7c63ea468088fd3a4d1b4953d4837f8462b6582bb3f09f4c0ed93eb9e
7
+ data.tar.gz: 24bed9cfb7b77c0fa77867166188e55e2811e63c5ed0fedb111d013338b8a8fdd59c0edf084169ad58d11c1988f4fb53a0e14d882aa8d827a195afc12f1129e7
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- oso-cloud (1.7.1)
4
+ oso-cloud (1.8.0)
5
5
  faraday (~> 2.5.2)
6
6
  faraday-net_http_persistent (~> 2.0)
7
7
  faraday-retry (~> 2.0.0)
data/lib/oso/api.rb CHANGED
@@ -80,10 +80,10 @@ module OsoCloud
80
80
 
81
81
  def initialize(metadata:)
82
82
  @metadata = if metadata.is_a? PolicyMetadata
83
- metadata
84
- else
85
- PolicyMetadata.new(**metadata)
86
- end
83
+ metadata
84
+ else
85
+ PolicyMetadata.new(**metadata)
86
+ end
87
87
  end
88
88
  end
89
89
 
@@ -293,7 +293,7 @@ module OsoCloud
293
293
  faraday.response :raise_error
294
294
  faraday.response :json, parser_options: { symbolize_names: true }
295
295
  faraday.request :retry, {
296
- max: (options && options[:max_retries]) || 10,
296
+ max: (options && options[:max_retries]) || 3,
297
297
  interval: 0.01,
298
298
  interval_randomness: 0.005,
299
299
  max_interval: 1,
@@ -301,7 +301,7 @@ module OsoCloud
301
301
  retry_statuses: [429, 500, 502, 503, 504],
302
302
  # This is the default set of methods plus POST.
303
303
  # ref: https://github.com/lostisland/faraday-retry#specify-which-methods-will-be-retried
304
- methods: %i[delete get head options post put],
304
+ methods: %i[delete get head options post put]
305
305
  }
306
306
 
307
307
  if options && options[:test_adapter]
@@ -336,12 +336,23 @@ module OsoCloud
336
336
  @client_id = SecureRandom.uuid
337
337
  end
338
338
 
339
- def fallback_eligible(path)
340
- !@fallback_connection.nil? && ['/authorize',
341
- '/authorize_resources',
342
- '/list',
343
- '/actions',
344
- '/query'].include?(path)
339
+ def fallback_eligible(path, method:)
340
+ path_eligible = if method == 'get'
341
+ ['/facts', '/policy_metadata'].include?(path)
342
+ elsif method == 'post'
343
+ ['/authorize',
344
+ '/authorize_resources',
345
+ '/list',
346
+ '/actions',
347
+ '/query',
348
+ '/authorize_query',
349
+ '/list_query',
350
+ '/actions_query'].include?(path)
351
+ else
352
+ false
353
+ end
354
+
355
+ !@fallback_connection.nil? && path_eligible
345
356
  end
346
357
 
347
358
  def get_policy
@@ -496,13 +507,14 @@ module OsoCloud
496
507
 
497
508
  def GET(path, params)
498
509
  begin
499
- response = @connection.get("api#{path}") do |req|
510
+ response = @connection.get("api#{path}") do |req|
500
511
  req.params = params unless params.nil?
501
512
  req.headers = headers
502
513
  end
503
514
  response.body
504
- rescue Faraday::ServerError, Faraday::ConnectionFailed, Faraday::TimeoutError, Faraday::SSLError => e
505
- raise e unless fallback_eligible(path)
515
+ rescue Faraday::BadRequestError, Faraday::ServerError, Faraday::ConnectionFailed, Faraday::TimeoutError,
516
+ Faraday::SSLError => e
517
+ raise e unless fallback_eligible(path, method: 'get')
506
518
 
507
519
  response = @fallback_connection.get("api#{path}") do |req|
508
520
  req.params = params unless params.nil?
@@ -515,6 +527,14 @@ module OsoCloud
515
527
  end
516
528
 
517
529
  def POST(path, params, body, isMutation)
530
+ max_body_size = 10 * 1024 * 1024
531
+ hash = OsoCloud::Helpers.to_hash(body) unless body.nil?
532
+ json_str = JSON.generate(hash)
533
+ body_size_bytes = json_str&.bytesize || 0
534
+ if body_size_bytes > max_body_size
535
+ raise ApiError.new(message: "Request payload too large (body_size_bytes: #{body_size_bytes}, max_body_size #{max_body_size})")
536
+ end
537
+
518
538
  begin
519
539
  response = @connection.post("api#{path}") do |req|
520
540
  req.params = params unless params.nil?
@@ -522,13 +542,12 @@ module OsoCloud
522
542
  req.headers = headers
523
543
  end
524
544
 
525
- if isMutation
526
- @last_offset = response.headers[:OsoOffset]
527
- end
545
+ @last_offset = response.headers[:OsoOffset] if isMutation
528
546
  response.body
529
547
  # only attempt fallback on 5xx, and connection failure conditions
530
- rescue Faraday::ServerError, Faraday::ConnectionFailed, Faraday::TimeoutError, Faraday::SSLError => e
531
- raise e unless fallback_eligible(path)
548
+ rescue Faraday::BadRequestError, Faraday::ServerError, Faraday::ConnectionFailed, Faraday::TimeoutError,
549
+ Faraday::SSLError => e
550
+ raise e unless fallback_eligible(path, method: 'post')
532
551
 
533
552
  response = @fallback_connection.post("api#{path}") do |req|
534
553
  req.params = params unless params.nil?
@@ -542,6 +561,14 @@ module OsoCloud
542
561
  end
543
562
 
544
563
  def DELETE(path, body)
564
+ max_body_size = 10 * 1024 * 1024
565
+ hash = OsoCloud::Helpers.to_hash(body) unless body.nil?
566
+ json_str = JSON.generate(hash)
567
+ body_size_bytes = json_str&.bytesize || 0
568
+ if body_size_bytes > max_body_size
569
+ raise ApiError.new(message: "Request payload too large (body_size_bytes: #{body_size_bytes}, max_body_size #{max_body_size})")
570
+ end
571
+
545
572
  response = @connection.delete("api#{path}") do |req|
546
573
  req.headers = headers
547
574
  req.body = OsoCloud::Helpers.to_hash(body) unless body.nil?
@@ -554,16 +581,16 @@ module OsoCloud
554
581
  def handle_faraday_error(error)
555
582
  resp = error.response
556
583
  formatted_request_id = if resp.nil? || resp[:headers].nil? || resp[:headers]['X-Request-ID'].nil?
557
- ""
558
- else
559
- " (Request ID: " + resp[:headers]['X-Request-ID'] + ")"
560
- end
584
+ ''
585
+ else
586
+ ' (Request ID: ' + resp[:headers]['X-Request-ID'] + ')'
587
+ end
561
588
 
562
589
  err = if resp.nil? || resp[:body].nil? || resp[:body][:message].nil?
563
- error.message
564
- else
565
- resp[:body][:message]
566
- end
590
+ error.message
591
+ else
592
+ resp[:body][:message]
593
+ end
567
594
  raise ApiError.new(message: err + formatted_request_id)
568
595
  end
569
596
  end
data/lib/oso/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module OsoCloud
2
- VERSION = '1.7.1'.freeze
2
+ VERSION = '1.8.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.7.1
4
+ version: 1.8.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: 2024-06-06 00:00:00.000000000 Z
11
+ date: 2024-10-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday