oso-cloud 1.4.1 → 1.5.0.pre.1

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: 4f65c9e4cafbbd08a93b4c772310d2741bd3a8a7f9f9fe90c15bf06e4f98f3c5
4
- data.tar.gz: 0fed4dce1b4043811202203fae204454b086327f6204f88ada6ec9d57710e914
3
+ metadata.gz: 49263eac12bcf56f22f66f9bf6a456164dc69ec1f2406c78ce09541638782ec4
4
+ data.tar.gz: '0488d56163f5fa068152c25f391f668542a92ecc43e385f63ef92728d37ee2be'
5
5
  SHA512:
6
- metadata.gz: 59a1e5af09cbcf16f6bcb01b951ad75ff0e80351c94e27968c82f95ecdf308aac98a70b7d6f6e98287a4e6eae9b76276497f47267c8c3c195fcfa80f41843494
7
- data.tar.gz: 42d8ac7a9a9366c6e338e86ce27cd8249615b7c268e8c5abda237719e489fc09ffa71743a2c69828a660f27aa67fdde2514eb34206c5c03e502209b4951caf76
6
+ metadata.gz: 49c372d256f076a88ff06fb539ff894d6040250c2244f3c6e1affbaf9990515ab364af3961479c41180751d7c2c01ebbebbb9decae0dc602fa29ad06f87315f1
7
+ data.tar.gz: f657048f571981bf2b51ac7a41b0865526857d6ffc90e96db9a2a95f82dff5cf889bf264e1c8232c157367c996c6c9be66a3d050290eddbcbfcdb17dd97dfe6d
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- oso-cloud (1.4.1)
4
+ oso-cloud (1.5.0.pre.1)
5
5
  faraday (~> 2.5.2)
6
6
  faraday-net_http_persistent (~> 2.0)
7
7
  faraday-retry (~> 2.0.0)
@@ -9,7 +9,28 @@ PATH
9
9
  GEM
10
10
  remote: https://rubygems.org/
11
11
  specs:
12
+ activemodel (7.1.3)
13
+ activesupport (= 7.1.3)
14
+ activerecord (7.1.3)
15
+ activemodel (= 7.1.3)
16
+ activesupport (= 7.1.3)
17
+ timeout (>= 0.4.0)
18
+ activesupport (7.1.3)
19
+ base64
20
+ bigdecimal
21
+ concurrent-ruby (~> 1.0, >= 1.0.2)
22
+ connection_pool (>= 2.2.5)
23
+ drb
24
+ i18n (>= 1.6, < 2)
25
+ minitest (>= 5.1)
26
+ mutex_m
27
+ tzinfo (~> 2.0)
28
+ base64 (0.2.0)
29
+ bigdecimal (3.1.6)
30
+ concurrent-ruby (1.2.3)
12
31
  connection_pool (2.4.1)
32
+ drb (2.2.0)
33
+ ruby2_keywords
13
34
  faraday (2.5.2)
14
35
  faraday-net_http (>= 2.0, < 3.1)
15
36
  ruby2_keywords (>= 0.0.4)
@@ -19,19 +40,28 @@ GEM
19
40
  net-http-persistent (~> 4.0)
20
41
  faraday-retry (2.0.0)
21
42
  faraday (~> 2.0)
43
+ i18n (1.14.1)
44
+ concurrent-ruby (~> 1.0)
22
45
  minitest (5.18.0)
46
+ mutex_m (0.2.0)
23
47
  net-http-persistent (4.0.2)
24
48
  connection_pool (~> 2.2)
49
+ pg (1.5.4)
25
50
  rake (12.3.3)
26
51
  ruby2_keywords (0.0.5)
52
+ timeout (0.4.1)
53
+ tzinfo (2.0.6)
54
+ concurrent-ruby (~> 1.0)
27
55
 
28
56
  PLATFORMS
29
57
  ruby
30
58
 
31
59
  DEPENDENCIES
60
+ activerecord (~> 7.0)
32
61
  minitest (~> 5.15)
33
62
  oso-cloud!
63
+ pg (~> 1.0)
34
64
  rake (~> 12.0)
35
65
 
36
66
  BUNDLED WITH
37
- 2.3.13
67
+ 2.5.6
data/lib/oso/api.rb CHANGED
@@ -202,9 +202,39 @@ module OsoCloud
202
202
  end
203
203
  end
204
204
 
205
+ # @!visibility private
206
+ class LocalAuthQuery
207
+ attr_reader :query, :data_bindings
208
+
209
+ def initialize(query:, data_bindings:)
210
+ @query = query
211
+ @data_bindings = data_bindings
212
+ end
213
+ end
214
+
215
+ # @!visibility private
216
+ class LocalListQuery
217
+ attr_reader :query, :column, :data_bindings
218
+
219
+ def initialize(query:, column:, data_bindings:)
220
+ @query = query
221
+ @column = column
222
+ @data_bindings = data_bindings
223
+ end
224
+ end
225
+
226
+ # @!visibility private
227
+ class LocalQueryResult
228
+ attr_reader :sql
229
+
230
+ def initialize(sql:)
231
+ @sql = sql
232
+ end
233
+ end
234
+
205
235
  # @!visibility private
206
236
  class Api
207
- def initialize(url: 'https://api.osohq.com', api_key: nil, options: nil)
237
+ def initialize(url: 'https://api.osohq.com', api_key: nil, data_bindings: nil, options: nil)
208
238
  @url = url
209
239
  @connection = Faraday.new(url: url) do |faraday|
210
240
  faraday.request :json
@@ -262,6 +292,7 @@ module OsoCloud
262
292
  @api_key = api_key
263
293
  @user_agent = "Oso Cloud (ruby #{RUBY_VERSION}p#{RUBY_PATCHLEVEL}; rv:#{VERSION})"
264
294
  @last_offset = nil
295
+ @data_bindings = IO.read(data_bindings) unless data_bindings.nil?
265
296
  end
266
297
 
267
298
  def fallback_eligible(path)
@@ -356,6 +387,20 @@ module OsoCloud
356
387
  StatsResult.new(**result)
357
388
  end
358
389
 
390
+ def post_authorize_query(query)
391
+ url = '/authorize_query'
392
+ data = LocalAuthQuery.new(query: query, data_bindings: @data_bindings)
393
+ result = POST(url, nil, data, false)
394
+ LocalQueryResult.new(**result)
395
+ end
396
+
397
+ def post_list_query(query:, column:)
398
+ url = '/list_query'
399
+ data = LocalListQuery.new(query: query, column: column, data_bindings: @data_bindings)
400
+ result = POST(url, nil, data, false)
401
+ LocalQueryResult.new(**result)
402
+ end
403
+
359
404
  def clear_data
360
405
  url = '/clear_data'
361
406
  result = POST(url, nil, nil, true)
data/lib/oso/oso.rb CHANGED
@@ -28,8 +28,8 @@ 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, fallback_url: nil)
32
- @api = OsoCloud::Core::Api.new(url: url, api_key: api_key, options: { :fallback_url => fallback_url })
31
+ def initialize(url: 'https://cloud.osohq.com', api_key: nil, fallback_url: nil, data_bindings: nil)
32
+ @api = OsoCloud::Core::Api.new(url: url, api_key: api_key, data_bindings: data_bindings, options: { :fallback_url => fallback_url })
33
33
  end
34
34
 
35
35
  ##
@@ -71,6 +71,56 @@ module OsoCloud
71
71
  result.allowed
72
72
  end
73
73
 
74
+ ##
75
+ # Check a permission depending on data both in Oso Cloud and stored in a local database
76
+ #
77
+ # Returns a SQL query to run against the local database
78
+ #
79
+ # @param actor [OsoCloud::Value]
80
+ # @param action [String]
81
+ # @param resource [OsoCloud::Value]
82
+ # @param column [String]
83
+ # @return [Array<String>]
84
+ def authorize_local(actor, action, resource)
85
+ actor_typed_id = actor.to_api_value
86
+ resource_typed_id = resource.to_api_value
87
+ result = @api.post_authorize_query(
88
+ OsoCloud::Core::AuthorizeQuery.new(
89
+ actor_type: actor_typed_id.type,
90
+ actor_id: actor_typed_id.id,
91
+ action: action,
92
+ resource_type: resource_typed_id.type,
93
+ resource_id: resource_typed_id.id,
94
+ context_facts: []
95
+ )
96
+ )
97
+ result.sql
98
+ end
99
+
100
+ ##
101
+ # List authorized resources depending on data both in Oso Cloud and stored in a local database
102
+ #
103
+ # Returns a SQL query to run against the local database
104
+ #
105
+ # @param actor [OsoCloud::Value]
106
+ # @param action [String]
107
+ # @param resource_type [String]
108
+ # @return [Array<String>]
109
+ def list_local(actor, action, resource_type, column)
110
+ actor_typed_id = actor.to_api_value
111
+ result = @api.post_list_query(
112
+ query: OsoCloud::Core::ListQuery.new(
113
+ actor_type: actor_typed_id.type,
114
+ actor_id: actor_typed_id.id,
115
+ action: action,
116
+ resource_type: resource_type,
117
+ context_facts: []
118
+ ),
119
+ column: column
120
+ )
121
+ result.sql
122
+ end
123
+
74
124
  ##
75
125
  # Check authorized resources
76
126
  #
data/lib/oso/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module OsoCloud
2
- VERSION = '1.4.1'.freeze
2
+ VERSION = '1.5.0.pre.1'.freeze
3
3
  end
data/oso-cloud.gemspec CHANGED
@@ -24,4 +24,6 @@ Gem::Specification.new do |spec|
24
24
  spec.add_dependency 'faraday-retry', '~> 2.0.0'
25
25
  spec.add_dependency 'faraday-net_http_persistent', '~> 2.0'
26
26
  spec.add_development_dependency 'minitest', '~> 5.15'
27
+ spec.add_development_dependency 'pg', '~> 1.0'
28
+ spec.add_development_dependency 'activerecord', '~> 7.0'
27
29
  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.4.1
4
+ version: 1.5.0.pre.1
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-12-01 00:00:00.000000000 Z
11
+ date: 2024-02-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -66,6 +66,34 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '5.15'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pg
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: activerecord
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '7.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '7.0'
69
97
  description:
70
98
  email:
71
99
  - support@osohq.com
@@ -102,9 +130,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
102
130
  version: 3.0.0
103
131
  required_rubygems_version: !ruby/object:Gem::Requirement
104
132
  requirements:
105
- - - ">="
133
+ - - ">"
106
134
  - !ruby/object:Gem::Version
107
- version: '0'
135
+ version: 1.3.1
108
136
  requirements: []
109
137
  rubygems_version: 3.2.33
110
138
  signing_key: