cerbos 0.3.0 → 0.4.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: 41c6a1f790cc09bff5f0c542d5338161730c4c649e66074afb381af8581637d3
4
- data.tar.gz: f7fbd30bc55b357b1a0a77d1da2e48d06cf9af1fe4cfc44947c879e661a81768
3
+ metadata.gz: 53df88d33685d6761feb0c4f8c25453012d615ddb6d5158fbabb34594c905a64
4
+ data.tar.gz: 81b5a8f937915c33a11a130124b8e1a14a83d6327e0416568873062afc250b01
5
5
  SHA512:
6
- metadata.gz: e0bbda1a092e1ec55fe9565765609fd0ed3dd77a4fa12f627cddbb1b7b48177d423114a9e8d21a454e2fcfd9257e6ce82da303f4f3df82d2d24d766519734100
7
- data.tar.gz: 525b97f8aee44d35fe4039ab75ecad4315f79fedd0f2ad94a2b308fa99700579e8800009a38735ebdfc3a9f462aae230f71ef637ab682fc461c2d40cb6a897cb
6
+ metadata.gz: 1e8cf9388d67af42d55b8cd4a5dc312ffc689fb5facb27384144dd6bd7982dc3d7a7f2211aea94fc6773d173970aaf5264ddc1f8f72dd0bf320c9e043db8871d
7
+ data.tar.gz: 884c774cca17408a0f16ac5d00d2efd8833035291bc422190bafd266ec3e9354d8571c9c3f93e7a04545a7b0f85eec73507a481bc0f49462f61de75970b4c19c
data/CHANGELOG.md CHANGED
@@ -1,6 +1,13 @@
1
1
  ## [Unreleased]
2
2
  No notable changes.
3
3
 
4
+ ## [0.4.0] - 2022-06-03
5
+ ### Added
6
+ - `on_validation_error` option to `Cerbos::Client#initialize` ([#22](https://github.com/cerbos/cerbos-sdk-ruby/pull/22))
7
+
8
+ ### Changed
9
+ - Minor documentation fixes ([#21](https://github.com/cerbos/cerbos-sdk-ruby/pull/21))
10
+
4
11
  ## [0.3.0] - 2022-05-13
5
12
  ### Added
6
13
  - More helper methods ([#11](https://github.com/cerbos/cerbos-sdk-ruby/pull/11))
@@ -15,7 +22,8 @@ No notable changes.
15
22
  ### Added
16
23
  - Initial implementation of `Cerbos::Client` ([#2](https://github.com/cerbos/cerbos-sdk-ruby/pull/2))
17
24
 
18
- [Unreleased]: https://github.com/cerbos/cerbos-sdk-ruby/compare/v0.3.0...HEAD
25
+ [Unreleased]: https://github.com/cerbos/cerbos-sdk-ruby/compare/v0.4.0...HEAD
26
+ [0.4.0]: https://github.com/cerbos/cerbos-sdk-ruby/compare/v0.3.0...v0.4.0
19
27
  [0.3.0]: https://github.com/cerbos/cerbos-sdk-ruby/compare/v0.2.0...v0.3.0
20
28
  [0.2.0]: https://github.com/cerbos/cerbos-sdk-ruby/compare/v0.1.0...v0.2.0
21
29
  [0.1.0]: https://github.com/cerbos/cerbos-sdk-ruby/compare/4481009e9dec2e1e6a2df8ea2f828690ceabbefc...v0.1.0
data/lib/cerbos/client.rb CHANGED
@@ -9,9 +9,10 @@ module Cerbos
9
9
  class Client
10
10
  # Create a client for interacting with the Cerbos PDP server over gRPC.
11
11
  #
12
- # @param target [String] Cerbos PDP server address (`"host", "host:port"`, or `"unix:/path/to/socket"`).
12
+ # @param target [String] Cerbos PDP server address (`"host"`, `"host:port"`, or `"unix:/path/to/socket"`).
13
13
  # @param tls [TLS, MutualTLS, false] gRPC connection encryption settings (`false` for plaintext).
14
14
  # @param grpc_channel_args [Hash{String, Symbol => String, Integer}] low-level settings for the gRPC channel (see [available keys in the gRPC documentation](https://grpc.github.io/grpc/core/group__grpc__arg__keys.html)).
15
+ # @param on_validation_error [:return, :raise, #call] action to take when input fails schema validation (`:return` to return the validation errors in the response, `:raise` to raise {Error::ValidationFailed}, or a callback to invoke).
15
16
  # @param playground_instance [String, nil] identifier of the playground instance to use when prototyping against the hosted demo PDP.
16
17
  # @param timeout [Numeric, nil] timeout for gRPC calls, in seconds (`nil` to never time out).
17
18
  #
@@ -23,7 +24,15 @@ module Cerbos
23
24
  #
24
25
  # @example Connect to the hosted demo PDP to experiment [in the playground](https://play.cerbos.dev)
25
26
  # client = Cerbos::Client.new("demo-pdp.cerbos.cloud", tls: Cerbos::TLS.new, playground_instance: "gE623b0180QlsG5a4QIN6UOZ6f3iSFW2")
26
- def initialize(target, tls:, grpc_channel_args: {}, playground_instance: nil, timeout: nil)
27
+ #
28
+ # @example Raise an error when input fails schema validation
29
+ # client = Cerbos::Client.new("localhost:3593", tls: false, on_validation_error: :raise)
30
+ #
31
+ # @example Invoke a callback when input fails schema validation
32
+ # client = Cerbos::Client.new("localhost:3593", tls: false, on_validation_error: ->(validation_errors) { do_something_with validation_errors })
33
+ def initialize(target, tls:, grpc_channel_args: {}, on_validation_error: :return, playground_instance: nil, timeout: nil)
34
+ @on_validation_error = on_validation_error
35
+
27
36
  handle_errors do
28
37
  credentials = tls ? tls.to_channel_credentials : :this_channel_is_insecure
29
38
 
@@ -53,6 +62,13 @@ module Cerbos
53
62
  # @param request_id [String] identifier for tracing the request.
54
63
  #
55
64
  # @return [Boolean]
65
+ #
66
+ # @example
67
+ # client.allow?(
68
+ # principal: {id: "user@example.com", roles: ["USER"]},
69
+ # resource: {kind: "document", id: "1"},
70
+ # action: "view"
71
+ # ) # => true
56
72
  def allow?(principal:, resource:, action:, aux_data: nil, request_id: SecureRandom.uuid)
57
73
  check_resource(
58
74
  principal: principal,
@@ -119,7 +135,7 @@ module Cerbos
119
135
  # ]
120
136
  # )
121
137
  #
122
- # result.allow?(resource: {kind: "document", id: "1"}, action: "view") # => true
138
+ # decision.allow?(resource: {kind: "document", id: "1"}, action: "view") # => true
123
139
  def check_resources(principal:, resources:, aux_data: nil, include_metadata: false, request_id: SecureRandom.uuid)
124
140
  handle_errors do
125
141
  request = Protobuf::Cerbos::Request::V1::CheckResourcesRequest.new(
@@ -132,7 +148,9 @@ module Cerbos
132
148
 
133
149
  response = perform_request(@cerbos_service, :check_resources, request)
134
150
 
135
- Output::CheckResources.from_protobuf(response)
151
+ Output::CheckResources.from_protobuf(response).tap do |output|
152
+ handle_validation_errors output
153
+ end
136
154
  end
137
155
  end
138
156
 
@@ -200,6 +218,17 @@ module Cerbos
200
218
  raise Error, error.message
201
219
  end
202
220
 
221
+ def handle_validation_errors(output)
222
+ return if @on_validation_error == :return
223
+
224
+ validation_errors = output.results.flat_map(&:validation_errors)
225
+ return if validation_errors.empty?
226
+
227
+ raise Error::ValidationFailed.new(validation_errors) if @on_validation_error == :raise
228
+
229
+ @on_validation_error.call validation_errors
230
+ end
231
+
203
232
  def perform_request(service, rpc, request)
204
233
  service.public_send(rpc, request)
205
234
  end
data/lib/cerbos/error.rb CHANGED
@@ -3,6 +3,21 @@
3
3
  module Cerbos
4
4
  # Base type for errors thrown by the `cerbos` gem.
5
5
  class Error < StandardError
6
+ # Input failed schema validation.
7
+ class ValidationFailed < Error
8
+ # The validation errors that occurred.
9
+ #
10
+ # @return [Array<Output::CheckResources::Result::ValidationError>]
11
+ attr_reader :validation_errors
12
+
13
+ # @private
14
+ def initialize(validation_errors)
15
+ super "Input failed schema validation"
16
+
17
+ @validation_errors = validation_errors
18
+ end
19
+ end
20
+
6
21
  # An error indicating an unsuccessful gRPC operation.
7
22
  class NotOK < Error
8
23
  # The gRPC status code.
@@ -33,7 +48,7 @@ module Cerbos
33
48
 
34
49
  # @private
35
50
  def initialize(code:, details:, metadata: {})
36
- super("gRPC error #{code}: #{details}")
51
+ super "gRPC error #{code}: #{details}"
37
52
 
38
53
  @code = code
39
54
  @details = details
@@ -43,7 +43,7 @@ module Cerbos
43
43
 
44
44
  # @private
45
45
  def to_protobuf
46
- Protobuf::Cerbos::Engine::V1::PlanResourcesRequest::Resource.new(
46
+ Protobuf::Cerbos::Engine::V1::PlanResourcesInput::Resource.new(
47
47
  kind: kind,
48
48
  attr: attributes.to_protobuf,
49
49
  policy_version: policy_version,
@@ -23,6 +23,20 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
23
23
  repeated :inputs, :message, 4, "cerbos.engine.v1.CheckInput", json_name: "inputs"
24
24
  repeated :outputs, :message, 5, "cerbos.engine.v1.CheckOutput", json_name: "outputs"
25
25
  optional :error, :string, 6, json_name: "error"
26
+ oneof :method do
27
+ optional :check_resources, :message, 7, "cerbos.audit.v1.DecisionLogEntry.CheckResources", json_name: "checkResources"
28
+ optional :plan_resources, :message, 8, "cerbos.audit.v1.DecisionLogEntry.PlanResources", json_name: "planResources"
29
+ end
30
+ end
31
+ add_message "cerbos.audit.v1.DecisionLogEntry.CheckResources" do
32
+ repeated :inputs, :message, 1, "cerbos.engine.v1.CheckInput", json_name: "inputs"
33
+ repeated :outputs, :message, 2, "cerbos.engine.v1.CheckOutput", json_name: "outputs"
34
+ optional :error, :string, 3, json_name: "error"
35
+ end
36
+ add_message "cerbos.audit.v1.DecisionLogEntry.PlanResources" do
37
+ optional :input, :message, 1, "cerbos.engine.v1.PlanResourcesInput", json_name: "input"
38
+ optional :output, :message, 2, "cerbos.engine.v1.PlanResourcesOutput", json_name: "output"
39
+ optional :error, :string, 3, json_name: "error"
26
40
  end
27
41
  add_message "cerbos.audit.v1.MetaValues" do
28
42
  repeated :values, :string, 1, json_name: "values"
@@ -41,6 +55,8 @@ module Cerbos::Protobuf::Cerbos
41
55
  module V1
42
56
  AccessLogEntry = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.audit.v1.AccessLogEntry").msgclass
43
57
  DecisionLogEntry = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.audit.v1.DecisionLogEntry").msgclass
58
+ DecisionLogEntry::CheckResources = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.audit.v1.DecisionLogEntry.CheckResources").msgclass
59
+ DecisionLogEntry::PlanResources = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.audit.v1.DecisionLogEntry.PlanResources").msgclass
44
60
  MetaValues = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.audit.v1.MetaValues").msgclass
45
61
  Peer = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.audit.v1.Peer").msgclass
46
62
  end
@@ -13,20 +13,69 @@ require 'cerbos/protobuf/validate/validate_pb'
13
13
 
14
14
  Google::Protobuf::DescriptorPool.generated_pool.build do
15
15
  add_file("cerbos/engine/v1/engine.proto", :syntax => :proto3) do
16
- add_message "cerbos.engine.v1.PlanResourcesRequest" do
16
+ add_message "cerbos.engine.v1.PlanResourcesInput" do
17
17
  optional :request_id, :string, 1, json_name: "requestId"
18
18
  optional :action, :string, 2, json_name: "action"
19
19
  optional :principal, :message, 3, "cerbos.engine.v1.Principal", json_name: "principal"
20
- optional :resource, :message, 4, "cerbos.engine.v1.PlanResourcesRequest.Resource", json_name: "resource"
20
+ optional :resource, :message, 4, "cerbos.engine.v1.PlanResourcesInput.Resource", json_name: "resource"
21
21
  optional :aux_data, :message, 5, "cerbos.engine.v1.AuxData", json_name: "auxData"
22
22
  optional :include_meta, :bool, 6, json_name: "includeMeta"
23
23
  end
24
- add_message "cerbos.engine.v1.PlanResourcesRequest.Resource" do
24
+ add_message "cerbos.engine.v1.PlanResourcesInput.Resource" do
25
25
  optional :kind, :string, 1, json_name: "kind"
26
26
  map :attr, :string, :message, 2, "google.protobuf.Value"
27
27
  optional :policy_version, :string, 3, json_name: "policyVersion"
28
28
  optional :scope, :string, 4, json_name: "scope"
29
29
  end
30
+ add_message "cerbos.engine.v1.PlanResourcesAst" do
31
+ optional :filter_ast, :message, 1, "cerbos.engine.v1.PlanResourcesAst.Node", json_name: "filterAst"
32
+ end
33
+ add_message "cerbos.engine.v1.PlanResourcesAst.Node" do
34
+ oneof :node do
35
+ optional :logical_operation, :message, 1, "cerbos.engine.v1.PlanResourcesAst.LogicalOperation", json_name: "logicalOperation"
36
+ optional :expression, :message, 2, "google.api.expr.v1alpha1.CheckedExpr", json_name: "expression"
37
+ end
38
+ end
39
+ add_message "cerbos.engine.v1.PlanResourcesAst.LogicalOperation" do
40
+ optional :operator, :enum, 1, "cerbos.engine.v1.PlanResourcesAst.LogicalOperation.Operator", json_name: "operator"
41
+ repeated :nodes, :message, 2, "cerbos.engine.v1.PlanResourcesAst.Node", json_name: "nodes"
42
+ end
43
+ add_enum "cerbos.engine.v1.PlanResourcesAst.LogicalOperation.Operator" do
44
+ value :OPERATOR_UNSPECIFIED, 0
45
+ value :OPERATOR_AND, 1
46
+ value :OPERATOR_OR, 2
47
+ value :OPERATOR_NOT, 3
48
+ end
49
+ add_message "cerbos.engine.v1.PlanResourcesFilter" do
50
+ optional :kind, :enum, 1, "cerbos.engine.v1.PlanResourcesFilter.Kind", json_name: "kind"
51
+ optional :condition, :message, 2, "cerbos.engine.v1.PlanResourcesFilter.Expression.Operand", json_name: "condition"
52
+ end
53
+ add_message "cerbos.engine.v1.PlanResourcesFilter.Expression" do
54
+ optional :operator, :string, 1, json_name: "operator"
55
+ repeated :operands, :message, 2, "cerbos.engine.v1.PlanResourcesFilter.Expression.Operand", json_name: "operands"
56
+ end
57
+ add_message "cerbos.engine.v1.PlanResourcesFilter.Expression.Operand" do
58
+ oneof :node do
59
+ optional :value, :message, 1, "google.protobuf.Value", json_name: "value"
60
+ optional :expression, :message, 2, "cerbos.engine.v1.PlanResourcesFilter.Expression", json_name: "expression"
61
+ optional :variable, :string, 3, json_name: "variable"
62
+ end
63
+ end
64
+ add_enum "cerbos.engine.v1.PlanResourcesFilter.Kind" do
65
+ value :KIND_UNSPECIFIED, 0
66
+ value :KIND_ALWAYS_ALLOWED, 1
67
+ value :KIND_ALWAYS_DENIED, 2
68
+ value :KIND_CONDITIONAL, 3
69
+ end
70
+ add_message "cerbos.engine.v1.PlanResourcesOutput" do
71
+ optional :request_id, :string, 1, json_name: "requestId"
72
+ optional :action, :string, 2, json_name: "action"
73
+ optional :kind, :string, 3, json_name: "kind"
74
+ optional :policy_version, :string, 4, json_name: "policyVersion"
75
+ optional :scope, :string, 5, json_name: "scope"
76
+ optional :filter, :message, 6, "cerbos.engine.v1.PlanResourcesFilter", json_name: "filter"
77
+ optional :filter_debug, :string, 7, json_name: "filterDebug"
78
+ end
30
79
  add_message "cerbos.engine.v1.CheckInput" do
31
80
  optional :request_id, :string, 1, json_name: "requestId"
32
81
  optional :resource, :message, 2, "cerbos.engine.v1.Resource", json_name: "resource"
@@ -46,30 +95,6 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
46
95
  optional :policy, :string, 2, json_name: "policy"
47
96
  optional :scope, :string, 3, json_name: "scope"
48
97
  end
49
- add_message "cerbos.engine.v1.PlanResourcesOutput" do
50
- optional :request_id, :string, 1, json_name: "requestId"
51
- optional :action, :string, 2, json_name: "action"
52
- optional :kind, :string, 3, json_name: "kind"
53
- optional :policy_version, :string, 4, json_name: "policyVersion"
54
- optional :scope, :string, 5, json_name: "scope"
55
- optional :filter, :message, 6, "cerbos.engine.v1.PlanResourcesOutput.Node", json_name: "filter"
56
- end
57
- add_message "cerbos.engine.v1.PlanResourcesOutput.Node" do
58
- oneof :node do
59
- optional :logical_operation, :message, 1, "cerbos.engine.v1.PlanResourcesOutput.LogicalOperation", json_name: "logicalOperation"
60
- optional :expression, :message, 2, "google.api.expr.v1alpha1.CheckedExpr", json_name: "expression"
61
- end
62
- end
63
- add_message "cerbos.engine.v1.PlanResourcesOutput.LogicalOperation" do
64
- optional :operator, :enum, 1, "cerbos.engine.v1.PlanResourcesOutput.LogicalOperation.Operator", json_name: "operator"
65
- repeated :nodes, :message, 2, "cerbos.engine.v1.PlanResourcesOutput.Node", json_name: "nodes"
66
- end
67
- add_enum "cerbos.engine.v1.PlanResourcesOutput.LogicalOperation.Operator" do
68
- value :OPERATOR_UNSPECIFIED, 0
69
- value :OPERATOR_AND, 1
70
- value :OPERATOR_OR, 2
71
- value :OPERATOR_NOT, 3
72
- end
73
98
  add_message "cerbos.engine.v1.Resource" do
74
99
  optional :kind, :string, 1, json_name: "kind"
75
100
  optional :policy_version, :string, 2, json_name: "policyVersion"
@@ -143,15 +168,20 @@ end
143
168
  module Cerbos::Protobuf::Cerbos
144
169
  module Engine
145
170
  module V1
146
- PlanResourcesRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.engine.v1.PlanResourcesRequest").msgclass
147
- PlanResourcesRequest::Resource = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.engine.v1.PlanResourcesRequest.Resource").msgclass
171
+ PlanResourcesInput = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.engine.v1.PlanResourcesInput").msgclass
172
+ PlanResourcesInput::Resource = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.engine.v1.PlanResourcesInput.Resource").msgclass
173
+ PlanResourcesAst = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.engine.v1.PlanResourcesAst").msgclass
174
+ PlanResourcesAst::Node = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.engine.v1.PlanResourcesAst.Node").msgclass
175
+ PlanResourcesAst::LogicalOperation = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.engine.v1.PlanResourcesAst.LogicalOperation").msgclass
176
+ PlanResourcesAst::LogicalOperation::Operator = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.engine.v1.PlanResourcesAst.LogicalOperation.Operator").enummodule
177
+ PlanResourcesFilter = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.engine.v1.PlanResourcesFilter").msgclass
178
+ PlanResourcesFilter::Expression = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.engine.v1.PlanResourcesFilter.Expression").msgclass
179
+ PlanResourcesFilter::Expression::Operand = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.engine.v1.PlanResourcesFilter.Expression.Operand").msgclass
180
+ PlanResourcesFilter::Kind = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.engine.v1.PlanResourcesFilter.Kind").enummodule
181
+ PlanResourcesOutput = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.engine.v1.PlanResourcesOutput").msgclass
148
182
  CheckInput = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.engine.v1.CheckInput").msgclass
149
183
  CheckOutput = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.engine.v1.CheckOutput").msgclass
150
184
  CheckOutput::ActionEffect = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.engine.v1.CheckOutput.ActionEffect").msgclass
151
- PlanResourcesOutput = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.engine.v1.PlanResourcesOutput").msgclass
152
- PlanResourcesOutput::Node = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.engine.v1.PlanResourcesOutput.Node").msgclass
153
- PlanResourcesOutput::LogicalOperation = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.engine.v1.PlanResourcesOutput.LogicalOperation").msgclass
154
- PlanResourcesOutput::LogicalOperation::Operator = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.engine.v1.PlanResourcesOutput.LogicalOperation.Operator").enummodule
155
185
  Resource = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.engine.v1.Resource").msgclass
156
186
  Principal = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.engine.v1.Principal").msgclass
157
187
  AuxData = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.engine.v1.AuxData").msgclass
@@ -19,7 +19,7 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
19
19
  optional :request_id, :string, 1, json_name: "requestId"
20
20
  optional :action, :string, 2, json_name: "action"
21
21
  optional :principal, :message, 3, "cerbos.engine.v1.Principal", json_name: "principal"
22
- optional :resource, :message, 4, "cerbos.engine.v1.PlanResourcesRequest.Resource", json_name: "resource"
22
+ optional :resource, :message, 4, "cerbos.engine.v1.PlanResourcesInput.Resource", json_name: "resource"
23
23
  optional :aux_data, :message, 5, "cerbos.request.v1.AuxData", json_name: "auxData"
24
24
  optional :include_meta, :bool, 6, json_name: "includeMeta"
25
25
  end
@@ -5,10 +5,10 @@ require 'google/protobuf'
5
5
 
6
6
  require 'cerbos/protobuf/cerbos/audit/v1/audit_pb'
7
7
  require 'cerbos/protobuf/cerbos/effect/v1/effect_pb'
8
+ require 'cerbos/protobuf/cerbos/engine/v1/engine_pb'
8
9
  require 'cerbos/protobuf/cerbos/policy/v1/policy_pb'
9
10
  require 'cerbos/protobuf/cerbos/schema/v1/schema_pb'
10
11
  require 'google/protobuf/empty_pb'
11
- require 'google/protobuf/struct_pb'
12
12
  require 'cerbos/protobuf/protoc-gen-openapiv2/options/annotations_pb'
13
13
 
14
14
  Google::Protobuf::DescriptorPool.generated_pool.build do
@@ -18,30 +18,9 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
18
18
  optional :action, :string, 2, json_name: "action"
19
19
  optional :resource_kind, :string, 3, json_name: "resourceKind"
20
20
  optional :policy_version, :string, 4, json_name: "policyVersion"
21
- optional :filter, :message, 5, "cerbos.response.v1.PlanResourcesResponse.Filter", json_name: "filter"
21
+ optional :filter, :message, 5, "cerbos.engine.v1.PlanResourcesFilter", json_name: "filter"
22
22
  optional :meta, :message, 6, "cerbos.response.v1.PlanResourcesResponse.Meta", json_name: "meta"
23
23
  end
24
- add_message "cerbos.response.v1.PlanResourcesResponse.Expression" do
25
- optional :operator, :string, 1, json_name: "operator"
26
- repeated :operands, :message, 2, "cerbos.response.v1.PlanResourcesResponse.Expression.Operand", json_name: "operands"
27
- end
28
- add_message "cerbos.response.v1.PlanResourcesResponse.Expression.Operand" do
29
- oneof :node do
30
- optional :value, :message, 1, "google.protobuf.Value", json_name: "value"
31
- optional :expression, :message, 2, "cerbos.response.v1.PlanResourcesResponse.Expression", json_name: "expression"
32
- optional :variable, :string, 3, json_name: "variable"
33
- end
34
- end
35
- add_message "cerbos.response.v1.PlanResourcesResponse.Filter" do
36
- optional :kind, :enum, 1, "cerbos.response.v1.PlanResourcesResponse.Filter.Kind", json_name: "kind"
37
- optional :condition, :message, 2, "cerbos.response.v1.PlanResourcesResponse.Expression.Operand", json_name: "condition"
38
- end
39
- add_enum "cerbos.response.v1.PlanResourcesResponse.Filter.Kind" do
40
- value :KIND_UNSPECIFIED, 0
41
- value :KIND_ALWAYS_ALLOWED, 1
42
- value :KIND_ALWAYS_DENIED, 2
43
- value :KIND_CONDITIONAL, 3
44
- end
45
24
  add_message "cerbos.response.v1.PlanResourcesResponse.Meta" do
46
25
  optional :filter_debug, :string, 1, json_name: "filterDebug"
47
26
  optional :matched_scope, :string, 2, json_name: "matchedScope"
@@ -189,10 +168,6 @@ module Cerbos::Protobuf::Cerbos
189
168
  module Response
190
169
  module V1
191
170
  PlanResourcesResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.response.v1.PlanResourcesResponse").msgclass
192
- PlanResourcesResponse::Expression = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.response.v1.PlanResourcesResponse.Expression").msgclass
193
- PlanResourcesResponse::Expression::Operand = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.response.v1.PlanResourcesResponse.Expression.Operand").msgclass
194
- PlanResourcesResponse::Filter = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.response.v1.PlanResourcesResponse.Filter").msgclass
195
- PlanResourcesResponse::Filter::Kind = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.response.v1.PlanResourcesResponse.Filter.Kind").enummodule
196
171
  PlanResourcesResponse::Meta = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.response.v1.PlanResourcesResponse.Meta").msgclass
197
172
  CheckResourceSetResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.response.v1.CheckResourceSetResponse").msgclass
198
173
  CheckResourceSetResponse::ActionEffectMap = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.response.v1.CheckResourceSetResponse.ActionEffectMap").msgclass
@@ -7,93 +7,117 @@ require 'google/protobuf/duration_pb'
7
7
 
8
8
  Google::Protobuf::DescriptorPool.generated_pool.build do
9
9
  add_file("cerbos/telemetry/v1/telemetry.proto", :syntax => :proto3) do
10
- add_message "cerbos.telemetry.v1.Ping" do
10
+ add_message "cerbos.telemetry.v1.ServerLaunch" do
11
11
  optional :version, :string, 1, json_name: "version"
12
- optional :source, :message, 2, "cerbos.telemetry.v1.Ping.Source", json_name: "source"
13
- optional :features, :message, 3, "cerbos.telemetry.v1.Ping.Features", json_name: "features"
14
- optional :stats, :message, 4, "cerbos.telemetry.v1.Ping.Stats", json_name: "stats"
12
+ optional :source, :message, 2, "cerbos.telemetry.v1.ServerLaunch.Source", json_name: "source"
13
+ optional :features, :message, 3, "cerbos.telemetry.v1.ServerLaunch.Features", json_name: "features"
14
+ optional :stats, :message, 4, "cerbos.telemetry.v1.ServerLaunch.Stats", json_name: "stats"
15
15
  end
16
- add_message "cerbos.telemetry.v1.Ping.Cerbos" do
16
+ add_message "cerbos.telemetry.v1.ServerLaunch.Cerbos" do
17
17
  optional :version, :string, 1, json_name: "version"
18
18
  optional :commit, :string, 2, json_name: "commit"
19
19
  optional :build_date, :string, 3, json_name: "buildDate"
20
20
  optional :module_version, :string, 4, json_name: "moduleVersion"
21
21
  optional :module_checksum, :string, 5, json_name: "moduleChecksum"
22
22
  end
23
- add_message "cerbos.telemetry.v1.Ping.Source" do
24
- optional :cerbos, :message, 1, "cerbos.telemetry.v1.Ping.Cerbos", json_name: "cerbos"
23
+ add_message "cerbos.telemetry.v1.ServerLaunch.Source" do
24
+ optional :cerbos, :message, 1, "cerbos.telemetry.v1.ServerLaunch.Cerbos", json_name: "cerbos"
25
25
  optional :os, :string, 2, json_name: "os"
26
26
  optional :arch, :string, 3, json_name: "arch"
27
27
  optional :num_cpus, :uint32, 4, json_name: "numCpus"
28
28
  end
29
- add_message "cerbos.telemetry.v1.Ping.Features" do
30
- optional :audit, :message, 1, "cerbos.telemetry.v1.Ping.Features.Audit", json_name: "audit"
31
- optional :schema, :message, 2, "cerbos.telemetry.v1.Ping.Features.Schema", json_name: "schema"
32
- optional :admin_api, :message, 3, "cerbos.telemetry.v1.Ping.Features.AdminApi", json_name: "adminApi"
33
- optional :storage, :message, 4, "cerbos.telemetry.v1.Ping.Features.Storage", json_name: "storage"
29
+ add_message "cerbos.telemetry.v1.ServerLaunch.Features" do
30
+ optional :audit, :message, 1, "cerbos.telemetry.v1.ServerLaunch.Features.Audit", json_name: "audit"
31
+ optional :schema, :message, 2, "cerbos.telemetry.v1.ServerLaunch.Features.Schema", json_name: "schema"
32
+ optional :admin_api, :message, 3, "cerbos.telemetry.v1.ServerLaunch.Features.AdminApi", json_name: "adminApi"
33
+ optional :storage, :message, 4, "cerbos.telemetry.v1.ServerLaunch.Features.Storage", json_name: "storage"
34
34
  end
35
- add_message "cerbos.telemetry.v1.Ping.Features.Audit" do
35
+ add_message "cerbos.telemetry.v1.ServerLaunch.Features.Audit" do
36
36
  optional :enabled, :bool, 1, json_name: "enabled"
37
37
  optional :backend, :string, 2, json_name: "backend"
38
38
  end
39
- add_message "cerbos.telemetry.v1.Ping.Features.Schema" do
39
+ add_message "cerbos.telemetry.v1.ServerLaunch.Features.Schema" do
40
40
  optional :enforcement, :string, 1, json_name: "enforcement"
41
41
  end
42
- add_message "cerbos.telemetry.v1.Ping.Features.AdminApi" do
42
+ add_message "cerbos.telemetry.v1.ServerLaunch.Features.AdminApi" do
43
43
  optional :enabled, :bool, 1, json_name: "enabled"
44
44
  end
45
- add_message "cerbos.telemetry.v1.Ping.Features.Storage" do
45
+ add_message "cerbos.telemetry.v1.ServerLaunch.Features.Storage" do
46
46
  optional :driver, :string, 1, json_name: "driver"
47
47
  oneof :store do
48
- optional :disk, :message, 2, "cerbos.telemetry.v1.Ping.Features.Storage.Disk", json_name: "disk"
49
- optional :git, :message, 3, "cerbos.telemetry.v1.Ping.Features.Storage.Git", json_name: "git"
50
- optional :blob, :message, 4, "cerbos.telemetry.v1.Ping.Features.Storage.Blob", json_name: "blob"
48
+ optional :disk, :message, 2, "cerbos.telemetry.v1.ServerLaunch.Features.Storage.Disk", json_name: "disk"
49
+ optional :git, :message, 3, "cerbos.telemetry.v1.ServerLaunch.Features.Storage.Git", json_name: "git"
50
+ optional :blob, :message, 4, "cerbos.telemetry.v1.ServerLaunch.Features.Storage.Blob", json_name: "blob"
51
51
  end
52
52
  end
53
- add_message "cerbos.telemetry.v1.Ping.Features.Storage.Disk" do
53
+ add_message "cerbos.telemetry.v1.ServerLaunch.Features.Storage.Disk" do
54
54
  optional :watch, :bool, 1, json_name: "watch"
55
55
  end
56
- add_message "cerbos.telemetry.v1.Ping.Features.Storage.Git" do
56
+ add_message "cerbos.telemetry.v1.ServerLaunch.Features.Storage.Git" do
57
57
  optional :protocol, :string, 1, json_name: "protocol"
58
58
  optional :auth, :bool, 2, json_name: "auth"
59
59
  optional :poll_interval, :message, 3, "google.protobuf.Duration", json_name: "pollInterval"
60
60
  end
61
- add_message "cerbos.telemetry.v1.Ping.Features.Storage.Blob" do
61
+ add_message "cerbos.telemetry.v1.ServerLaunch.Features.Storage.Blob" do
62
62
  optional :provider, :string, 1, json_name: "provider"
63
63
  optional :poll_interval, :message, 2, "google.protobuf.Duration", json_name: "pollInterval"
64
64
  end
65
- add_message "cerbos.telemetry.v1.Ping.Stats" do
66
- optional :policy, :message, 1, "cerbos.telemetry.v1.Ping.Stats.Policy", json_name: "policy"
67
- optional :schema, :message, 2, "cerbos.telemetry.v1.Ping.Stats.Schema", json_name: "schema"
65
+ add_message "cerbos.telemetry.v1.ServerLaunch.Stats" do
66
+ optional :policy, :message, 1, "cerbos.telemetry.v1.ServerLaunch.Stats.Policy", json_name: "policy"
67
+ optional :schema, :message, 2, "cerbos.telemetry.v1.ServerLaunch.Stats.Schema", json_name: "schema"
68
68
  end
69
- add_message "cerbos.telemetry.v1.Ping.Stats.Policy" do
69
+ add_message "cerbos.telemetry.v1.ServerLaunch.Stats.Policy" do
70
70
  map :count, :string, :uint32, 1
71
71
  map :avg_rule_count, :string, :double, 2
72
72
  map :avg_condition_count, :string, :double, 3
73
73
  end
74
- add_message "cerbos.telemetry.v1.Ping.Stats.Schema" do
74
+ add_message "cerbos.telemetry.v1.ServerLaunch.Stats.Schema" do
75
75
  optional :count, :uint32, 1, json_name: "count"
76
76
  end
77
+ add_message "cerbos.telemetry.v1.ServerStop" do
78
+ optional :version, :string, 1, json_name: "version"
79
+ optional :uptime, :message, 2, "google.protobuf.Duration", json_name: "uptime"
80
+ optional :requests_total, :uint64, 3, json_name: "requestsTotal"
81
+ end
82
+ add_message "cerbos.telemetry.v1.Event" do
83
+ oneof :data do
84
+ optional :api_activity, :message, 1, "cerbos.telemetry.v1.Event.ApiActivity", json_name: "apiActivity"
85
+ end
86
+ end
87
+ add_message "cerbos.telemetry.v1.Event.CountStat" do
88
+ optional :key, :string, 1, json_name: "key"
89
+ optional :count, :uint64, 2, json_name: "count"
90
+ end
91
+ add_message "cerbos.telemetry.v1.Event.ApiActivity" do
92
+ optional :version, :string, 1, json_name: "version"
93
+ optional :uptime, :message, 2, "google.protobuf.Duration", json_name: "uptime"
94
+ repeated :method_calls, :message, 3, "cerbos.telemetry.v1.Event.CountStat", json_name: "methodCalls"
95
+ repeated :user_agents, :message, 4, "cerbos.telemetry.v1.Event.CountStat", json_name: "userAgents"
96
+ end
77
97
  end
78
98
  end
79
99
 
80
100
  module Cerbos::Protobuf::Cerbos
81
101
  module Telemetry
82
102
  module V1
83
- Ping = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.telemetry.v1.Ping").msgclass
84
- Ping::Cerbos = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.telemetry.v1.Ping.Cerbos").msgclass
85
- Ping::Source = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.telemetry.v1.Ping.Source").msgclass
86
- Ping::Features = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.telemetry.v1.Ping.Features").msgclass
87
- Ping::Features::Audit = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.telemetry.v1.Ping.Features.Audit").msgclass
88
- Ping::Features::Schema = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.telemetry.v1.Ping.Features.Schema").msgclass
89
- Ping::Features::AdminApi = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.telemetry.v1.Ping.Features.AdminApi").msgclass
90
- Ping::Features::Storage = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.telemetry.v1.Ping.Features.Storage").msgclass
91
- Ping::Features::Storage::Disk = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.telemetry.v1.Ping.Features.Storage.Disk").msgclass
92
- Ping::Features::Storage::Git = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.telemetry.v1.Ping.Features.Storage.Git").msgclass
93
- Ping::Features::Storage::Blob = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.telemetry.v1.Ping.Features.Storage.Blob").msgclass
94
- Ping::Stats = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.telemetry.v1.Ping.Stats").msgclass
95
- Ping::Stats::Policy = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.telemetry.v1.Ping.Stats.Policy").msgclass
96
- Ping::Stats::Schema = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.telemetry.v1.Ping.Stats.Schema").msgclass
103
+ ServerLaunch = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.telemetry.v1.ServerLaunch").msgclass
104
+ ServerLaunch::Cerbos = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.telemetry.v1.ServerLaunch.Cerbos").msgclass
105
+ ServerLaunch::Source = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.telemetry.v1.ServerLaunch.Source").msgclass
106
+ ServerLaunch::Features = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.telemetry.v1.ServerLaunch.Features").msgclass
107
+ ServerLaunch::Features::Audit = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.telemetry.v1.ServerLaunch.Features.Audit").msgclass
108
+ ServerLaunch::Features::Schema = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.telemetry.v1.ServerLaunch.Features.Schema").msgclass
109
+ ServerLaunch::Features::AdminApi = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.telemetry.v1.ServerLaunch.Features.AdminApi").msgclass
110
+ ServerLaunch::Features::Storage = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.telemetry.v1.ServerLaunch.Features.Storage").msgclass
111
+ ServerLaunch::Features::Storage::Disk = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.telemetry.v1.ServerLaunch.Features.Storage.Disk").msgclass
112
+ ServerLaunch::Features::Storage::Git = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.telemetry.v1.ServerLaunch.Features.Storage.Git").msgclass
113
+ ServerLaunch::Features::Storage::Blob = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.telemetry.v1.ServerLaunch.Features.Storage.Blob").msgclass
114
+ ServerLaunch::Stats = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.telemetry.v1.ServerLaunch.Stats").msgclass
115
+ ServerLaunch::Stats::Policy = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.telemetry.v1.ServerLaunch.Stats.Policy").msgclass
116
+ ServerLaunch::Stats::Schema = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.telemetry.v1.ServerLaunch.Stats.Schema").msgclass
117
+ ServerStop = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.telemetry.v1.ServerStop").msgclass
118
+ Event = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.telemetry.v1.Event").msgclass
119
+ Event::CountStat = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.telemetry.v1.Event.CountStat").msgclass
120
+ Event::ApiActivity = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("cerbos.telemetry.v1.Event.ApiActivity").msgclass
97
121
  end
98
122
  end
99
123
  end
@@ -2,5 +2,5 @@
2
2
 
3
3
  module Cerbos
4
4
  # Current version of the `cerbos` gem.
5
- VERSION = "0.3.0"
5
+ VERSION = "0.4.0"
6
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cerbos
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cerbos
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-05-13 00:00:00.000000000 Z
11
+ date: 2022-06-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: grpc
@@ -81,7 +81,7 @@ licenses:
81
81
  metadata:
82
82
  bug_tracker_uri: https://github.com/cerbos/cerbos-sdk-ruby/issues
83
83
  changelog_uri: https://github.com/cerbos/cerbos-sdk-ruby/blob/main/CHANGELOG.md
84
- documentation_uri: https://www.rubydoc.info/gems/cerbos/0.3.0
84
+ documentation_uri: https://www.rubydoc.info/gems/cerbos/0.4.0
85
85
  homepage_uri: https://github.com/cerbos/cerbos-sdk-ruby
86
86
  source_code_uri: https://github.com/cerbos/cerbos-sdk-ruby
87
87
  rubygems_mfa_required: 'true'