oso-cloud 1.3.0.dev.6 → 1.3.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
  SHA256:
3
- metadata.gz: 14b5b319f475adefc2e05c6bf2e9cf6f22b20164d38fb9c1cb59b1b7c6c291ee
4
- data.tar.gz: d9d50d1adcc35c04309b65cde6d2d802eec75ccdd62d6b2d5e05907e7bb9806f
3
+ metadata.gz: 7449894386d2dd2bfd681e8586f59637b8cbc69eb9058da28e8a09ad5e97cabe
4
+ data.tar.gz: 1b2766a45d78838742694759ab8bc1698dc9a219b8e9ccb05283cc9677777fac
5
5
  SHA512:
6
- metadata.gz: e8f770aaefda73dba90e6410be04dec0dc5ec1089535d7977f1aa5bd1d6310023954c6e2aae3e1d6c9e458ef2ceb5df58cf7dd16bc3c3183036da4965fcdaf02
7
- data.tar.gz: 669d14ebf88e20a6f2a1bebdc609a7bda2e3eb6c20fc3d5eb7f4efa2b686ea611bc5a7ad28dcd4cd450a36226f1df5594daa09927a755d91ab97abe819363181
6
+ metadata.gz: 7e6e454bdd19f96680fba49fa045b781443be54e3060aeb7bf1c37f2938f711d73c430d270aa85e429f0ffe77353fadc412a65b35abceab5f2cb8b026a27c38f
7
+ data.tar.gz: 2d5bde575259087917b2575ae2bc85fa82d27821426799507a32021a4a61c0a4b69c055b4b6c4bede5ed7a2916557b05ba3de0e6a5af00c6ca7c68d22ec7e79b
data/Gemfile.lock CHANGED
@@ -1,53 +1,22 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- oso-cloud (1.3.0.dev.5)
4
+ oso-cloud (1.3.0)
5
5
  faraday (~> 2.5.2)
6
- faraday-net_http_persistent (~> 2.0)
7
6
  faraday-retry (~> 2.0.0)
8
- faraday-typhoeus (~> 1.0.0)
9
7
 
10
8
  GEM
11
9
  remote: https://rubygems.org/
12
10
  specs:
13
- binding_of_caller (1.0.0)
14
- debug_inspector (>= 0.0.1)
15
- coderay (1.1.3)
16
- connection_pool (2.4.1)
17
- debug_inspector (1.1.0)
18
- ethon (0.16.0)
19
- ffi (>= 1.15.0)
20
11
  faraday (2.5.2)
21
12
  faraday-net_http (>= 2.0, < 3.1)
22
13
  ruby2_keywords (>= 0.0.4)
23
14
  faraday-net_http (3.0.2)
24
- faraday-net_http_persistent (2.1.0)
25
- faraday (~> 2.5)
26
- net-http-persistent (~> 4.0)
27
15
  faraday-retry (2.0.0)
28
16
  faraday (~> 2.0)
29
- faraday-typhoeus (1.0.0)
30
- faraday (~> 2.0)
31
- typhoeus (~> 1.4)
32
- ffi (1.16.2)
33
- interception (0.5)
34
- method_source (1.0.0)
35
17
  minitest (5.18.0)
36
- net-http-persistent (4.0.2)
37
- connection_pool (~> 2.2)
38
- pry (0.14.2)
39
- coderay (~> 1.1)
40
- method_source (~> 1.0)
41
- pry-rescue (1.5.2)
42
- interception (>= 0.5)
43
- pry (>= 0.12.0)
44
- pry-stack_explorer (0.6.1)
45
- binding_of_caller (~> 1.0)
46
- pry (~> 0.13)
47
18
  rake (12.3.3)
48
19
  ruby2_keywords (0.0.5)
49
- typhoeus (1.4.0)
50
- ethon (>= 0.9.0)
51
20
 
52
21
  PLATFORMS
53
22
  ruby
@@ -55,8 +24,6 @@ PLATFORMS
55
24
  DEPENDENCIES
56
25
  minitest (~> 5.15)
57
26
  oso-cloud!
58
- pry-rescue
59
- pry-stack_explorer
60
27
  rake (~> 12.0)
61
28
 
62
29
  BUNDLED WITH
data/lib/oso/api.rb CHANGED
@@ -2,8 +2,6 @@ require 'json'
2
2
  require 'uri'
3
3
  require 'faraday'
4
4
  require 'faraday/retry'
5
- require 'faraday/typhoeus'
6
- require 'faraday/net_http_persistent'
7
5
 
8
6
  require 'oso/helpers'
9
7
  require 'oso/version'
@@ -205,8 +203,9 @@ module OsoCloud
205
203
 
206
204
  # @!visibility private
207
205
  class Api
208
- def get_connection(options: nil)
209
- Faraday.new(url: @url) do |faraday|
206
+ def initialize(url: 'https://api.osohq.com', api_key: nil, options: nil)
207
+ @url = url
208
+ @connection = Faraday.new(url: url) do |faraday|
210
209
  faraday.request :json
211
210
 
212
211
  # responses are processed in reverse order; this stack implies the
@@ -231,7 +230,7 @@ module OsoCloud
231
230
  /api/actions
232
231
  /api/query
233
232
  ].include? env.url.path
234
- },
233
+ }
235
234
  }
236
235
 
237
236
  if options && options[:test_adapter]
@@ -246,23 +245,32 @@ module OsoCloud
246
245
  options[:test_adapter][:func].call
247
246
  end
248
247
  end
249
- elsif options && options[:parallel_adapter]
250
- faraday.adapter :typhoeus, forbid_reuse: false, maxredirs: 1, connecttimeout: 30
251
248
  else
252
- faraday.adapter :net_http_persistent, pool_size: 10, idle_timeout: 30
249
+ faraday.adapter :net_http
253
250
  end
254
251
  end
255
- end
256
252
 
257
- def initialize(url: 'https://api.osohq.com', api_key: nil, options: nil)
258
- @url = url
259
- @connection = get_connection(options: options)
260
- @parallel_connection = get_connection(options: { parallel_adapter: true })
253
+ if options && options[:fallback_url]
254
+ @fallback_connection = Faraday.new(url: options[:fallback_url]) do |faraday|
255
+ faraday.request :json
256
+ faraday.response :json, parser_options: { symbolize_names: true }
257
+ faraday.response :raise_error
258
+ faraday.adapter :net_http
259
+ end
260
+ end
261
261
  @api_key = api_key
262
262
  @user_agent = "Oso Cloud (ruby #{RUBY_VERSION}p#{RUBY_PATCHLEVEL}; rv:#{VERSION})"
263
263
  @last_offset = nil
264
264
  end
265
265
 
266
+ def fallback_eligible(path)
267
+ !@fallback_connection.nil? && ['/authorize',
268
+ '/authorize_resources',
269
+ '/list',
270
+ '/actions',
271
+ '/query'].include?(path)
272
+ end
273
+
266
274
  def get_policy
267
275
  url = '/policy'
268
276
  result = GET(url, nil)
@@ -329,12 +337,6 @@ module OsoCloud
329
337
  ActionsResult.new(**result)
330
338
  end
331
339
 
332
- def post_actions_batch(batch_data)
333
- url = '/actions'
334
- results = POST_BATCH(url, nil, batch_data, false)
335
- results.map { |result| ActionsResult.new(**result.body) }
336
- end
337
-
338
340
  def post_query(data)
339
341
  url = '/query'
340
342
  result = POST(url, nil, data, false)
@@ -385,56 +387,48 @@ module OsoCloud
385
387
  end
386
388
 
387
389
  def GET(path, params)
388
- response = @connection.get("api#{path}") do |req|
389
- req.params = params unless params.nil?
390
- req.headers = headers
391
- end
392
- response.body
393
- rescue Faraday::Error => e
394
- handle_faraday_error e
395
- end
396
-
397
- def POST_BATCH(path, params, body_array, isMutation)
398
- connection = @parallel_connection
399
- responses = []
400
- connection.in_parallel do
401
- responses = body_array.map do |body|
402
- connection.post("api#{path}") do |req|
403
- req.params = params unless params.nil?
404
- req.body = OsoCloud::Helpers.to_hash(body) unless body.nil?
405
- req.headers = headers
406
- end
390
+ begin
391
+ response = @connection.get("api#{path}") do |req|
392
+ req.params = params unless params.nil?
393
+ req.headers = headers
407
394
  end
408
- end
409
-
410
- connection_failed = responses.find { |r| r.env.custom_members[:typhoeus_connection_failed] }
411
- if connection_failed
412
- raise Faraday::ConnectionFailed, connection_failed.env.custom_members[:typhoeus_return_message]
413
- end
395
+ response.body
396
+ rescue Faraday::ServerError, Faraday::ConnectionFailed, Faraday::TimeoutError, Faraday::SSLError => e
397
+ raise e unless fallback_eligible(path)
414
398
 
415
- timed_out = responses.find { |r| r.env.custom_members[:typhoeus_timed_out] }
416
- if timed_out
417
- raise Faraday::TimeoutError, timed_out.env.custom_members[:typhoeus_return_message]
418
- end
419
- if isMutation
420
- @last_offset = responses[-1].headers[:OsoOffset]
399
+ response = @fallback_connection.get("api#{path}") do |req|
400
+ req.params = params unless params.nil?
401
+ req.headers = headers
402
+ end
403
+ response.body
421
404
  end
422
- responses
423
405
  rescue Faraday::Error => e
424
406
  handle_faraday_error e
425
407
  end
426
408
 
427
409
  def POST(path, params, body, isMutation)
428
- response = @connection.post("api#{path}") do |req|
429
- req.params = params unless params.nil?
430
- req.body = OsoCloud::Helpers.to_hash(body) unless body.nil?
431
- req.headers = headers
432
- end
410
+ begin
411
+ response = @connection.post("api#{path}") do |req|
412
+ req.params = params unless params.nil?
413
+ req.body = OsoCloud::Helpers.to_hash(body) unless body.nil?
414
+ req.headers = headers
415
+ end
433
416
 
434
- if isMutation
435
- @last_offset = response.headers[:OsoOffset]
417
+ if isMutation
418
+ @last_offset = response.headers[:OsoOffset]
419
+ end
420
+ response.body
421
+ # only attempt fallback on 5xx, and connection failure conditions
422
+ rescue Faraday::ServerError, Faraday::ConnectionFailed, Faraday::TimeoutError, Faraday::SSLError => e
423
+ raise e unless fallback_eligible(path)
424
+
425
+ response = @fallback_connection.post("api#{path}") do |req|
426
+ req.params = params unless params.nil?
427
+ req.body = OsoCloud::Helpers.to_hash(body) unless body.nil?
428
+ req.headers = headers
429
+ end
430
+ response.body
436
431
  end
437
- response.body
438
432
  rescue Faraday::Error => e
439
433
  handle_faraday_error e
440
434
  end
data/lib/oso/oso.rb CHANGED
@@ -28,10 +28,11 @@ module OsoCloud
28
28
  # Any other elements in the array, which together represent the fact's arguments,
29
29
  # can be "OsoCloud::Value" objects or strings.
30
30
  class Oso
31
- def initialize(url: 'https://cloud.osohq.com', api_key: nil)
32
- @api = OsoCloud::Core::Api.new(url: url, api_key: api_key)
31
+ def initialize(url: 'https://cloud.osohq.com', api_key: nil, fallback_url: nil)
32
+ @api = OsoCloud::Core::Api.new(url: url, api_key: api_key, options: { :fallback_url => fallback_url })
33
33
  end
34
34
 
35
+ ##
35
36
  # Update the active policy
36
37
  #
37
38
  # Updates the active policy in Oso Cloud, The string passed into
@@ -269,38 +270,5 @@ module OsoCloud
269
270
  context_facts: OsoCloud::Helpers.params_to_facts(context_facts)))
270
271
  OsoCloud::Helpers.facts_to_params(result.results)
271
272
  end
272
-
273
- ##
274
- # List authorized actions for a batch of queries
275
- #
276
- # Fetches a list of actions which an actor can perform on a particular resource.
277
- #
278
- # @param actor [OsoCloud::Value]
279
- # @param queries [Array<OsoCloud::Value>] | Array<[OsoCloud::Value, Array<fact>]>
280
- # @return [Array<Array<String>>]
281
- # @see Oso for more information about facts
282
- def actions_batch(actor, queries:)
283
- actor_typed_id = actor.to_api_value
284
- data = queries.map do |q|
285
- context_facts = []
286
- resource = nil
287
- if (q.is_a?(Array))
288
- resource = q[0]
289
- context_facts = q[1]
290
- else
291
- resource = q
292
- end
293
- resource_typed_id = resource.to_api_value
294
- OsoCloud::Core::ActionsQuery.new(
295
- actor_type: actor_typed_id.type,
296
- actor_id: actor_typed_id.id,
297
- resource_type: resource_typed_id.type,
298
- resource_id: resource_typed_id.id,
299
- context_facts: OsoCloud::Helpers.params_to_facts(context_facts)
300
- )
301
- end
302
- @api.post_actions_batch(data).map { |result| result.results}
303
- end
304
273
  end
305
-
306
274
  end
data/lib/oso/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module OsoCloud
2
- VERSION = '1.3.0.dev.6'.freeze
2
+ VERSION = '1.3.0'.freeze
3
3
  end
data/oso-cloud.gemspec CHANGED
@@ -22,10 +22,5 @@ Gem::Specification.new do |spec|
22
22
 
23
23
  spec.add_dependency 'faraday', '~> 2.5.2'
24
24
  spec.add_dependency 'faraday-retry', '~> 2.0.0'
25
- spec.add_dependency 'faraday-net_http_persistent', '~> 2.0'
26
- spec.add_dependency 'faraday-typhoeus', '~> 1.0.0'
27
- #
28
25
  spec.add_development_dependency 'minitest', '~> 5.15'
29
- spec.add_development_dependency 'pry-rescue'
30
- spec.add_development_dependency 'pry-stack_explorer'
31
26
  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.3.0.dev.6
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Oso Security, Inc.
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-10-02 00:00:00.000000000 Z
11
+ date: 2023-10-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -38,34 +38,6 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: 2.0.0
41
- - !ruby/object:Gem::Dependency
42
- name: faraday-net_http_persistent
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '2.0'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '2.0'
55
- - !ruby/object:Gem::Dependency
56
- name: faraday-typhoeus
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: 1.0.0
62
- type: :runtime
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: 1.0.0
69
41
  - !ruby/object:Gem::Dependency
70
42
  name: minitest
71
43
  requirement: !ruby/object:Gem::Requirement
@@ -80,35 +52,7 @@ dependencies:
80
52
  - - "~>"
81
53
  - !ruby/object:Gem::Version
82
54
  version: '5.15'
83
- - !ruby/object:Gem::Dependency
84
- name: pry-rescue
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
- - !ruby/object:Gem::Dependency
98
- name: pry-stack_explorer
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: '0'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- version: '0'
111
- description:
55
+ description:
112
56
  email:
113
57
  - support@osohq.com
114
58
  executables: []
@@ -133,7 +77,7 @@ homepage: https://www.osohq.com/
133
77
  licenses:
134
78
  - Apache-2.0
135
79
  metadata: {}
136
- post_install_message:
80
+ post_install_message:
137
81
  rdoc_options: []
138
82
  require_paths:
139
83
  - lib
@@ -144,12 +88,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
144
88
  version: 3.0.0
145
89
  required_rubygems_version: !ruby/object:Gem::Requirement
146
90
  requirements:
147
- - - ">"
91
+ - - ">="
148
92
  - !ruby/object:Gem::Version
149
- version: 1.3.1
93
+ version: '0'
150
94
  requirements: []
151
95
  rubygems_version: 3.2.33
152
- signing_key:
96
+ signing_key:
153
97
  specification_version: 4
154
98
  summary: Oso Cloud Ruby client
155
99
  test_files: []