oso-cloud 1.3.0.dev.6 → 1.3.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: 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: []