warrant 1.1.0 → 1.2.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: 6fc7f30432a9ab516978da52e77811011ee0625a819124ad8dcb5b20d8610a34
4
- data.tar.gz: 54dc068a58982fc5f8fdcc2d781ce5b6b5ec320c3f7a5dfdbd8338eaa20fac93
3
+ metadata.gz: d3ba7f4c3cde89c03aa17c15bfe00fa553172b27365b2e25548e7f349f38d799
4
+ data.tar.gz: 0fbc797a1768ca2aa47a08a7b2864a4398c25ed3deb2ff26f45e113855961c8c
5
5
  SHA512:
6
- metadata.gz: 4e892e951b8107a9d6bdeb621a1ee2fb1674c8a9195eb7271e127f77961d5cfa8fe673e93cfd6bb2784452630ade845b65aa3455379c169580ea8b32fb9dad2f
7
- data.tar.gz: b7e7c396ff14cbc500b9bf1e1882db09b84002e78fc2ffa11a019de0cc3da25d60766f78b6650075baa648125c87ed9ed48e8cf250cc2a41818fef5b3d2b9209
6
+ metadata.gz: 9240a10a74f6cf277e2a94d392181dbb66f89b5a970b6d4688c3fd6582ecde03fdfdf9dca63294be48f9de48d03d5c2bf0f5b1d5fc9bc689d87876365fde0192
7
+ data.tar.gz: 5950abb71082b36b859c8679952a1055b6726588353db03df292e036ee11e239c41cdf0abf76995bb1a2c82d34aa21e3bf6643832ba9315e7810a6261c2938c3
@@ -9,5 +9,13 @@ module Warrant
9
9
  @object_id = object_id
10
10
  @relation = relation
11
11
  end
12
+
13
+ def self.new_from_hash(attributes)
14
+ object_type = attributes.fetch(:object_type)
15
+ object_id = attributes.fetch(:object_id)
16
+ relation = attributes.fetch(:relation, nil)
17
+
18
+ self.new(object_type, object_id, relation)
19
+ end
12
20
  end
13
21
  end
@@ -87,7 +87,7 @@ module Warrant
87
87
  users.map{ |user| User.new(user['userId'], user['email'], user['createdAt']) }
88
88
  else
89
89
  APIOperations.raise_error(res)
90
- end
90
+ end
91
91
  end
92
92
 
93
93
  # Get a user with the given user_id
@@ -111,7 +111,7 @@ module Warrant
111
111
  User.new(user['userId'], user['email'], user['createdAt'])
112
112
  else
113
113
  APIOperations.raise_error(res)
114
- end
114
+ end
115
115
  end
116
116
 
117
117
  # Updates a user with the given user_id and params
@@ -182,7 +182,7 @@ module Warrant
182
182
  roles.map{ |role| Role.new(role['roleId']) }
183
183
  else
184
184
  APIOperations.raise_error(res)
185
- end
185
+ end
186
186
  end
187
187
 
188
188
  # Assign a role to a user
@@ -227,7 +227,7 @@ module Warrant
227
227
  return Role.remove_from_user(user_id, role_id)
228
228
  end
229
229
 
230
- # List all permissions for a user
230
+ # List all permissions for a user
231
231
  #
232
232
  # @return [Array<Permission>] all permissions for the user
233
233
  #
@@ -244,7 +244,7 @@ module Warrant
244
244
  permissions.map{ |permission| Permission.new(permission['permissionId']) }
245
245
  else
246
246
  APIOperations.raise_error(res)
247
- end
247
+ end
248
248
  end
249
249
 
250
250
  # Assign a permission to a user
@@ -337,11 +337,11 @@ module Warrant
337
337
  case res
338
338
  when Net::HTTPSuccess
339
339
  res_json = JSON.parse(res.body)
340
- subject = Subject.new(res_json['subject']['objectType'], res_json['subject']['objectId'])
340
+ subject = Subject.new(res_json['subject']['objectType'], res_json['subject']['objectId'], res_json['subject']['relation'])
341
341
  Warrant.new(res_json['objectType'], res_json['objectId'], res_json['relation'], subject)
342
342
  else
343
343
  APIOperations.raise_error(res)
344
- end
344
+ end
345
345
  end
346
346
 
347
347
  # Remove a user from a tenant
@@ -365,10 +365,10 @@ module Warrant
365
365
  return
366
366
  else
367
367
  APIOperations.raise_error(res)
368
- end
368
+ end
369
369
  end
370
370
 
371
- # List all users for a tenant
371
+ # List all users for a tenant
372
372
  #
373
373
  # @param tenant_id [String] The tenant_id of the tenant from which to fetch users
374
374
  #
@@ -387,10 +387,10 @@ module Warrant
387
387
  users.map{ |user| User.new(user['userId'], user['email'], user['createdAt']) }
388
388
  else
389
389
  APIOperations.raise_error(res)
390
- end
390
+ end
391
391
  end
392
392
 
393
- # List all tenants for a user
393
+ # List all tenants for a user
394
394
  #
395
395
  # @return [Array<Tenant>] all tenants for the user
396
396
  #
@@ -2,14 +2,15 @@
2
2
 
3
3
  module Warrant
4
4
  class Warrant
5
- attr_reader :id, :object_type, :object_id, :relation, :subject
5
+ attr_reader :id, :object_type, :object_id, :relation, :subject, :is_direct_match
6
6
 
7
7
  # @!visibility private
8
- def initialize(object_type, object_id, relation, subject)
8
+ def initialize(object_type, object_id, relation, subject, is_direct_match = nil)
9
9
  @object_type = object_type
10
10
  @object_id = object_id
11
11
  @relation = relation
12
12
  @subject = subject
13
+ @is_direct_match = is_direct_match
13
14
  end
14
15
 
15
16
  # Create a new warrant that associates an object (object_type and object_id) to a subject via a relation.
@@ -38,7 +39,7 @@ module Warrant
38
39
 
39
40
  case res
40
41
  when Net::HTTPSuccess
41
- subject = Subject.new(res_json['subject']['objectType'], res_json['subject']['objectId'])
42
+ subject = Subject.new(res_json['subject']['objectType'], res_json['subject']['objectId'], res_json['subject']['relation'])
42
43
  Warrant.new(res_json['objectType'], res_json['objectId'], res_json['relation'], subject)
43
44
  else
44
45
  APIOperations.raise_error(res)
@@ -95,7 +96,7 @@ module Warrant
95
96
  when Net::HTTPSuccess
96
97
  warrants = JSON.parse(res.body)
97
98
  warrants.map{ |warrant|
98
- subject = Subject.new(warrant['subject']['objectType'], warrant['subject']['objectId'])
99
+ subject = Subject.new(warrant['subject']['objectType'], warrant['subject']['objectId'], warrant['subject']['relation'])
99
100
  Warrant.new(warrant['objectType'], warrant['objectId'], warrant['relation'], subject)
100
101
  }
101
102
  else
@@ -103,6 +104,38 @@ module Warrant
103
104
  end
104
105
  end
105
106
 
107
+ # Query to find all warrants for a given subject.
108
+ #
109
+ # @option params [String] :object_type The type of object. Must be one of your system's existing object types. (optional)
110
+ # @option params [String] :relation The relation for this object to subject association. The relation must be valid as per the object type definition. (optional)
111
+ # @option params [String] :subject The subject to query warrants for. This should be in the format `OBJECT_TYPE:OBJECT_ID`, i.e. `user:8`
112
+ # * subject (Hash) - The specific subject for which warrants will be queried for.
113
+ # * object_type (String) - The type of object. Must be one of your system's existing object types.
114
+ # * object_id (String) - The id of the specific object.
115
+ #
116
+ # @return [Array<Warrant>] list of all warrants with provided params
117
+ #
118
+ # @raise [Warrant::InternalError]
119
+ # @raise [Warrant::InvalidRequestError]
120
+ # @raise [Warrant::NotFoundError]
121
+ # @raise [Warrant::UnauthorizedError]
122
+ # @raise [Warrant::WarrantError]
123
+ def self.query(params = {})
124
+ params[:subject] = Subject.new_from_hash(params[:subject])
125
+ res = APIOperations.get(URI.parse("#{::Warrant.config.api_base}/v1/query"), params)
126
+
127
+ case res
128
+ when Net::HTTPSuccess
129
+ warrants = JSON.parse(res.body)
130
+ warrants.map{ |warrant|
131
+ subject = Subject.new(warrant['subject']['objectType'], warrant['subject']['objectId'], warrant['subject']['relation'])
132
+ Warrant.new(warrant['objectType'], warrant['objectId'], warrant['relation'], subject, warrant['isDirectMatch'])
133
+ }
134
+ else
135
+ APIOperations.raise_error(res)
136
+ end
137
+ end
138
+
106
139
  # Checks whether a specified access check is authorized or not.
107
140
  # If you would like to check only one warrant, then you can exclude the op param and provide an array with one warrant.
108
141
  #
data/lib/warrant/util.rb CHANGED
@@ -32,6 +32,8 @@ module Warrant
32
32
  new_opts[new_key] = normalize_params(v)
33
33
  when Array
34
34
  new_opts[new_key] = v.map { |i| normalize_params(i) }
35
+ when Subject
36
+ new_opts[new_key] = "#{v.object_type}:#{v.object_id}"
35
37
  else
36
38
  new_opts[new_key] = v
37
39
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Warrant
4
- VERSION = "1.1.0"
4
+ VERSION = "1.2.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: warrant
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Warrant
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-07-15 00:00:00.000000000 Z
11
+ date: 2022-12-12 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Ruby library for the Warrant API at https://warrant.dev.
14
14
  email: hello@warrant.dev
@@ -61,7 +61,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
61
61
  - !ruby/object:Gem::Version
62
62
  version: '0'
63
63
  requirements: []
64
- rubygems_version: 3.3.11
64
+ rubygems_version: 3.2.32
65
65
  signing_key:
66
66
  specification_version: 4
67
67
  summary: Warrant Ruby Library