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 +4 -4
- data/Gemfile.lock +32 -2
- data/lib/oso/api.rb +46 -1
- data/lib/oso/oso.rb +52 -2
- data/lib/oso/version.rb +1 -1
- data/oso-cloud.gemspec +2 -0
- metadata +32 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 49263eac12bcf56f22f66f9bf6a456164dc69ec1f2406c78ce09541638782ec4
|
|
4
|
+
data.tar.gz: '0488d56163f5fa068152c25f391f668542a92ecc43e385f63ef92728d37ee2be'
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
|
+
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.
|
|
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
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
|
+
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:
|
|
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:
|
|
135
|
+
version: 1.3.1
|
|
108
136
|
requirements: []
|
|
109
137
|
rubygems_version: 3.2.33
|
|
110
138
|
signing_key:
|