From afe3ad1edae1bd46e05b04842535316abb57f3bc Mon Sep 17 00:00:00 2001 From: jakedoublev Date: Mon, 28 Apr 2025 15:54:02 -0700 Subject: [PATCH 01/49] feat(authz): GetEntitlementsV2 protos and gencode --- docs/grpc/index.html | 181 ++++- .../authorization/authorization.swagger.json | 49 +- protocol/go/authorization/authorization.pb.go | 678 +++++++++++++----- .../go/authorization/authorization_grpc.pb.go | 37 + .../authorization.connect.go | 30 + service/authorization/authorization.proto | 92 +-- 6 files changed, 804 insertions(+), 263 deletions(-) diff --git a/docs/grpc/index.html b/docs/grpc/index.html index 8cfb193ce7..3334915e99 100644 --- a/docs/grpc/index.html +++ b/docs/grpc/index.html @@ -348,6 +348,18 @@

Table of Contents

MEntityEntitlements +
  • + MEntityEntitlementsV2 +
  • + +
  • + MEntityEntitlementsV2.ActionsList +
  • + +
  • + MEntityEntitlementsV2.ActionsPerAttributeValueFqnEntry +
  • +
  • MGetDecisionsByTokenRequest
  • @@ -372,6 +384,14 @@

    Table of Contents

    MGetEntitlementsResponse +
  • + MGetEntitlementsV2Request +
  • + +
  • + MGetEntitlementsV2Response +
  • +
  • MResourceAttribute
  • @@ -3137,7 +3157,7 @@

    EntityCustom

    EntityEntitlements

    -

    +

    Deprecated: use EntityEntitlementsV2 instead

    @@ -3167,6 +3187,92 @@

    EntityEntitlements

    +

    EntityEntitlementsV2

    +

    Entitlements for a given entity, mapping each attribute value FQN to any entitled actions[]

    + + +
    + + + + + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    entity_idstring

    actions_per_attribute_value_fqnEntityEntitlementsV2.ActionsPerAttributeValueFqnEntryrepeated

    + + + + + +

    EntityEntitlementsV2.ActionsList

    +

    + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    actionspolicy.Actionrepeated

    + + + + + +

    EntityEntitlementsV2.ActionsPerAttributeValueFqnEntry

    +

    + + + + + + + + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    keystring

    valueEntityEntitlementsV2.ActionsList

    + + + + +

    GetDecisionsByTokenRequest

    @@ -3264,7 +3370,7 @@

    GetDecisionsResponse

    GetEntitlementsRequest

    -

    Request to get entitlements for one or more entities for an optional attribute scope

    Example: Get entitlements for bob and alice (both represented using an email address

    {

    "entities": [

    {

    "id": "e1",

    "emailAddress": "bob@example.org"

    },

    {

    "id": "e2",

    "emailAddress": "alice@example.org"

    }

    ],

    "scope": {

    "attributeFqns": [

    "https://example.net/attr/attr1/value/value1",

    "https://example.net/attr/attr1/value/value2"

    ]

    }

    }

    +

    Deprecated: use GetEntitlementsRequestV2 instead

    @@ -3302,7 +3408,7 @@

    GetEntitlementsRequest

    GetEntitlementsResponse

    -

    Example Response for a request of : Get entitlements for bob and alice (both represented using an email address

    {

    "entitlements": [

    {

    "entityId": "e1",

    "attributeValueReferences": [

    {

    "attributeFqn": "http://www.example.org/attr/foo/value/bar"

    }

    ]

    },

    {

    "entityId": "e2",

    "attributeValueReferences": [

    {

    "attributeFqn": "http://www.example.org/attr/color/value/red"

    }

    ]

    }

    ]

    }

    +

    Deprecated: use GetEntitlementsV2Request instead

    @@ -3325,6 +3431,68 @@

    GetEntitlementsResponse

    +

    GetEntitlementsV2Request

    +

    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    entitiesEntityrepeated

    list of requested entities

    scopeResourceAttributeoptional

    optional attribute fqn as a scope

    with_comprehensive_hierarchybooloptional

    optional parameter to return a full list of entitlements - returns lower hierarchy attributes

    + + + + + +

    GetEntitlementsV2Response

    +

    + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    entitlementsEntityEntitlementsV2repeated

    + + + + +

    ResourceAttribute

    A logical bucket of attributes belonging to a "Resource"

    @@ -3518,6 +3686,13 @@

    AuthorizationService

    + + GetEntitlementsV2 + GetEntitlementsV2Request + GetEntitlementsV2Response +

    + + diff --git a/docs/openapi/authorization/authorization.swagger.json b/docs/openapi/authorization/authorization.swagger.json index 16b31595aa..12a50bbe8b 100644 --- a/docs/openapi/authorization/authorization.swagger.json +++ b/docs/openapi/authorization/authorization.swagger.json @@ -68,7 +68,6 @@ "parameters": [ { "name": "body", - "description": "Example: Get entitlements for bob and alice (both represented using an email address\n\n{\n\"entities\": [\n{\n\"id\": \"e1\",\n\"emailAddress\": \"bob@example.org\"\n},\n{\n\"id\": \"e2\",\n\"emailAddress\": \"alice@example.org\"\n}\n],\n\"scope\": {\n\"attributeFqns\": [\n\"https://example.net/attr/attr1/value/value1\",\n\"https://example.net/attr/attr1/value/value2\"\n]\n}\n}", "in": "body", "required": true, "schema": { @@ -133,6 +132,18 @@ ], "default": "CATEGORY_UNSPECIFIED" }, + "EntityEntitlementsV2ActionsList": { + "type": "object", + "properties": { + "actions": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/policyAction" + } + } + } + }, "authorizationDecisionRequest": { "type": "object", "properties": { @@ -264,7 +275,23 @@ "type": "string" } } - } + }, + "title": "Deprecated: use EntityEntitlementsV2 instead" + }, + "authorizationEntityEntitlementsV2": { + "type": "object", + "properties": { + "entityId": { + "type": "string" + }, + "actionsPerAttributeValueFqn": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/EntityEntitlementsV2ActionsList" + } + } + }, + "title": "Entitlements for a given entity, mapping each attribute value FQN to any entitled actions[]" }, "authorizationGetDecisionsByTokenResponse": { "type": "object", @@ -322,8 +349,7 @@ "title": "optional parameter to return a full list of entitlements - returns lower hierarchy attributes" } }, - "description": "Example: Get entitlements for bob and alice (both represented using an email address\n\n{\n\"entities\": [\n{\n\"id\": \"e1\",\n\"emailAddress\": \"bob@example.org\"\n},\n{\n\"id\": \"e2\",\n\"emailAddress\": \"alice@example.org\"\n}\n],\n\"scope\": {\n\"attributeFqns\": [\n\"https://example.net/attr/attr1/value/value1\",\n\"https://example.net/attr/attr1/value/value2\"\n]\n}\n}", - "title": "Request to get entitlements for one or more entities for an optional attribute scope" + "title": "Deprecated: use GetEntitlementsRequestV2 instead" }, "authorizationGetEntitlementsResponse": { "type": "object", @@ -336,8 +362,19 @@ } } }, - "description": "{\n\"entitlements\": [\n{\n\"entityId\": \"e1\",\n\"attributeValueReferences\": [\n{\n\"attributeFqn\": \"http://www.example.org/attr/foo/value/bar\"\n}\n]\n},\n{\n\"entityId\": \"e2\",\n\"attributeValueReferences\": [\n{\n\"attributeFqn\": \"http://www.example.org/attr/color/value/red\"\n}\n]\n}\n]\n}", - "title": "Example Response for a request of : Get entitlements for bob and alice (both represented using an email address" + "title": "Deprecated: use GetEntitlementsV2Request instead" + }, + "authorizationGetEntitlementsV2Response": { + "type": "object", + "properties": { + "entitlements": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/authorizationEntityEntitlementsV2" + } + } + } }, "authorizationResourceAttribute": { "type": "object", diff --git a/protocol/go/authorization/authorization.pb.go b/protocol/go/authorization/authorization.pb.go index 210f7213fe..d5599f5cf2 100644 --- a/protocol/go/authorization/authorization.pb.go +++ b/protocol/go/authorization/authorization.pb.go @@ -764,28 +764,7 @@ func (x *GetDecisionsResponse) GetDecisionResponses() []*DecisionResponse { return nil } -// Request to get entitlements for one or more entities for an optional attribute scope -// -// Example: Get entitlements for bob and alice (both represented using an email address -// -// { -// "entities": [ -// { -// "id": "e1", -// "emailAddress": "bob@example.org" -// }, -// { -// "id": "e2", -// "emailAddress": "alice@example.org" -// } -// ], -// "scope": { -// "attributeFqns": [ -// "https://example.net/attr/attr1/value/value1", -// "https://example.net/attr/attr1/value/value2" -// ] -// } -// } +// Deprecated: use GetEntitlementsRequestV2 instead type GetEntitlementsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -852,6 +831,73 @@ func (x *GetEntitlementsRequest) GetWithComprehensiveHierarchy() bool { return false } +type GetEntitlementsV2Request struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // list of requested entities + Entities []*Entity `protobuf:"bytes,1,rep,name=entities,proto3" json:"entities,omitempty"` + // optional attribute fqn as a scope + Scope *ResourceAttribute `protobuf:"bytes,2,opt,name=scope,proto3,oneof" json:"scope,omitempty"` + // optional parameter to return a full list of entitlements - returns lower hierarchy attributes + WithComprehensiveHierarchy *bool `protobuf:"varint,3,opt,name=with_comprehensive_hierarchy,json=withComprehensiveHierarchy,proto3,oneof" json:"with_comprehensive_hierarchy,omitempty"` +} + +func (x *GetEntitlementsV2Request) Reset() { + *x = GetEntitlementsV2Request{} + if protoimpl.UnsafeEnabled { + mi := &file_authorization_authorization_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetEntitlementsV2Request) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetEntitlementsV2Request) ProtoMessage() {} + +func (x *GetEntitlementsV2Request) ProtoReflect() protoreflect.Message { + mi := &file_authorization_authorization_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetEntitlementsV2Request.ProtoReflect.Descriptor instead. +func (*GetEntitlementsV2Request) Descriptor() ([]byte, []int) { + return file_authorization_authorization_proto_rawDescGZIP(), []int{9} +} + +func (x *GetEntitlementsV2Request) GetEntities() []*Entity { + if x != nil { + return x.Entities + } + return nil +} + +func (x *GetEntitlementsV2Request) GetScope() *ResourceAttribute { + if x != nil { + return x.Scope + } + return nil +} + +func (x *GetEntitlementsV2Request) GetWithComprehensiveHierarchy() bool { + if x != nil && x.WithComprehensiveHierarchy != nil { + return *x.WithComprehensiveHierarchy + } + return false +} + +// Deprecated: use EntityEntitlementsV2 instead type EntityEntitlements struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -864,7 +910,7 @@ type EntityEntitlements struct { func (x *EntityEntitlements) Reset() { *x = EntityEntitlements{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_authorization_proto_msgTypes[9] + mi := &file_authorization_authorization_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -877,7 +923,7 @@ func (x *EntityEntitlements) String() string { func (*EntityEntitlements) ProtoMessage() {} func (x *EntityEntitlements) ProtoReflect() protoreflect.Message { - mi := &file_authorization_authorization_proto_msgTypes[9] + mi := &file_authorization_authorization_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -890,7 +936,7 @@ func (x *EntityEntitlements) ProtoReflect() protoreflect.Message { // Deprecated: Use EntityEntitlements.ProtoReflect.Descriptor instead. func (*EntityEntitlements) Descriptor() ([]byte, []int) { - return file_authorization_authorization_proto_rawDescGZIP(), []int{9} + return file_authorization_authorization_proto_rawDescGZIP(), []int{10} } func (x *EntityEntitlements) GetEntityId() string { @@ -907,6 +953,62 @@ func (x *EntityEntitlements) GetAttributeValueFqns() []string { return nil } +// Entitlements for a given entity, mapping each attribute value FQN to any entitled actions[] +type EntityEntitlementsV2 struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + EntityId string `protobuf:"bytes,1,opt,name=entity_id,json=entityId,proto3" json:"entity_id,omitempty"` + ActionsPerAttributeValueFqn map[string]*EntityEntitlementsV2_ActionsList `protobuf:"bytes,2,rep,name=actions_per_attribute_value_fqn,json=actionsPerAttributeValueFqn,proto3" json:"actions_per_attribute_value_fqn,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *EntityEntitlementsV2) Reset() { + *x = EntityEntitlementsV2{} + if protoimpl.UnsafeEnabled { + mi := &file_authorization_authorization_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EntityEntitlementsV2) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EntityEntitlementsV2) ProtoMessage() {} + +func (x *EntityEntitlementsV2) ProtoReflect() protoreflect.Message { + mi := &file_authorization_authorization_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EntityEntitlementsV2.ProtoReflect.Descriptor instead. +func (*EntityEntitlementsV2) Descriptor() ([]byte, []int) { + return file_authorization_authorization_proto_rawDescGZIP(), []int{11} +} + +func (x *EntityEntitlementsV2) GetEntityId() string { + if x != nil { + return x.EntityId + } + return "" +} + +func (x *EntityEntitlementsV2) GetActionsPerAttributeValueFqn() map[string]*EntityEntitlementsV2_ActionsList { + if x != nil { + return x.ActionsPerAttributeValueFqn + } + return nil +} + // A logical bucket of attributes belonging to a "Resource" type ResourceAttribute struct { state protoimpl.MessageState @@ -920,7 +1022,7 @@ type ResourceAttribute struct { func (x *ResourceAttribute) Reset() { *x = ResourceAttribute{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_authorization_proto_msgTypes[10] + mi := &file_authorization_authorization_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -933,7 +1035,7 @@ func (x *ResourceAttribute) String() string { func (*ResourceAttribute) ProtoMessage() {} func (x *ResourceAttribute) ProtoReflect() protoreflect.Message { - mi := &file_authorization_authorization_proto_msgTypes[10] + mi := &file_authorization_authorization_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -946,7 +1048,7 @@ func (x *ResourceAttribute) ProtoReflect() protoreflect.Message { // Deprecated: Use ResourceAttribute.ProtoReflect.Descriptor instead. func (*ResourceAttribute) Descriptor() ([]byte, []int) { - return file_authorization_authorization_proto_rawDescGZIP(), []int{10} + return file_authorization_authorization_proto_rawDescGZIP(), []int{12} } func (x *ResourceAttribute) GetResourceAttributesId() string { @@ -963,28 +1065,7 @@ func (x *ResourceAttribute) GetAttributeValueFqns() []string { return nil } -// Example Response for a request of : Get entitlements for bob and alice (both represented using an email address -// -// { -// "entitlements": [ -// { -// "entityId": "e1", -// "attributeValueReferences": [ -// { -// "attributeFqn": "http://www.example.org/attr/foo/value/bar" -// } -// ] -// }, -// { -// "entityId": "e2", -// "attributeValueReferences": [ -// { -// "attributeFqn": "http://www.example.org/attr/color/value/red" -// } -// ] -// } -// ] -// } +// Deprecated: use GetEntitlementsV2Request instead type GetEntitlementsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -996,7 +1077,7 @@ type GetEntitlementsResponse struct { func (x *GetEntitlementsResponse) Reset() { *x = GetEntitlementsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_authorization_proto_msgTypes[11] + mi := &file_authorization_authorization_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1009,7 +1090,7 @@ func (x *GetEntitlementsResponse) String() string { func (*GetEntitlementsResponse) ProtoMessage() {} func (x *GetEntitlementsResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorization_authorization_proto_msgTypes[11] + mi := &file_authorization_authorization_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1022,7 +1103,7 @@ func (x *GetEntitlementsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetEntitlementsResponse.ProtoReflect.Descriptor instead. func (*GetEntitlementsResponse) Descriptor() ([]byte, []int) { - return file_authorization_authorization_proto_rawDescGZIP(), []int{11} + return file_authorization_authorization_proto_rawDescGZIP(), []int{13} } func (x *GetEntitlementsResponse) GetEntitlements() []*EntityEntitlements { @@ -1032,6 +1113,53 @@ func (x *GetEntitlementsResponse) GetEntitlements() []*EntityEntitlements { return nil } +type GetEntitlementsV2Response struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Entitlements []*EntityEntitlementsV2 `protobuf:"bytes,1,rep,name=entitlements,proto3" json:"entitlements,omitempty"` +} + +func (x *GetEntitlementsV2Response) Reset() { + *x = GetEntitlementsV2Response{} + if protoimpl.UnsafeEnabled { + mi := &file_authorization_authorization_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetEntitlementsV2Response) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetEntitlementsV2Response) ProtoMessage() {} + +func (x *GetEntitlementsV2Response) ProtoReflect() protoreflect.Message { + mi := &file_authorization_authorization_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetEntitlementsV2Response.ProtoReflect.Descriptor instead. +func (*GetEntitlementsV2Response) Descriptor() ([]byte, []int) { + return file_authorization_authorization_proto_rawDescGZIP(), []int{14} +} + +func (x *GetEntitlementsV2Response) GetEntitlements() []*EntityEntitlementsV2 { + if x != nil { + return x.Entitlements + } + return nil +} + // Example Request Get Decisions by Token to answer the question - Do Bob and client1 (represented by token tok1) // and Alice and client2 (represented by token tok2) have TRANSMIT authorization for // 2 resources; resource1 (attr-set-1) defined by attributes foo:bar resource2 (attr-set-2) defined by attribute foo:bar, color:red ? @@ -1079,7 +1207,7 @@ type TokenDecisionRequest struct { func (x *TokenDecisionRequest) Reset() { *x = TokenDecisionRequest{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_authorization_proto_msgTypes[12] + mi := &file_authorization_authorization_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1092,7 +1220,7 @@ func (x *TokenDecisionRequest) String() string { func (*TokenDecisionRequest) ProtoMessage() {} func (x *TokenDecisionRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorization_authorization_proto_msgTypes[12] + mi := &file_authorization_authorization_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1105,7 +1233,7 @@ func (x *TokenDecisionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TokenDecisionRequest.ProtoReflect.Descriptor instead. func (*TokenDecisionRequest) Descriptor() ([]byte, []int) { - return file_authorization_authorization_proto_rawDescGZIP(), []int{12} + return file_authorization_authorization_proto_rawDescGZIP(), []int{15} } func (x *TokenDecisionRequest) GetActions() []*policy.Action { @@ -1140,7 +1268,7 @@ type GetDecisionsByTokenRequest struct { func (x *GetDecisionsByTokenRequest) Reset() { *x = GetDecisionsByTokenRequest{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_authorization_proto_msgTypes[13] + mi := &file_authorization_authorization_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1153,7 +1281,7 @@ func (x *GetDecisionsByTokenRequest) String() string { func (*GetDecisionsByTokenRequest) ProtoMessage() {} func (x *GetDecisionsByTokenRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorization_authorization_proto_msgTypes[13] + mi := &file_authorization_authorization_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1166,7 +1294,7 @@ func (x *GetDecisionsByTokenRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDecisionsByTokenRequest.ProtoReflect.Descriptor instead. func (*GetDecisionsByTokenRequest) Descriptor() ([]byte, []int) { - return file_authorization_authorization_proto_rawDescGZIP(), []int{13} + return file_authorization_authorization_proto_rawDescGZIP(), []int{16} } func (x *GetDecisionsByTokenRequest) GetDecisionRequests() []*TokenDecisionRequest { @@ -1187,7 +1315,7 @@ type GetDecisionsByTokenResponse struct { func (x *GetDecisionsByTokenResponse) Reset() { *x = GetDecisionsByTokenResponse{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_authorization_proto_msgTypes[14] + mi := &file_authorization_authorization_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1200,7 +1328,7 @@ func (x *GetDecisionsByTokenResponse) String() string { func (*GetDecisionsByTokenResponse) ProtoMessage() {} func (x *GetDecisionsByTokenResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorization_authorization_proto_msgTypes[14] + mi := &file_authorization_authorization_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1213,7 +1341,7 @@ func (x *GetDecisionsByTokenResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDecisionsByTokenResponse.ProtoReflect.Descriptor instead. func (*GetDecisionsByTokenResponse) Descriptor() ([]byte, []int) { - return file_authorization_authorization_proto_rawDescGZIP(), []int{14} + return file_authorization_authorization_proto_rawDescGZIP(), []int{17} } func (x *GetDecisionsByTokenResponse) GetDecisionResponses() []*DecisionResponse { @@ -1223,6 +1351,53 @@ func (x *GetDecisionsByTokenResponse) GetDecisionResponses() []*DecisionResponse return nil } +type EntityEntitlementsV2_ActionsList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Actions []*policy.Action `protobuf:"bytes,1,rep,name=actions,proto3" json:"actions,omitempty"` +} + +func (x *EntityEntitlementsV2_ActionsList) Reset() { + *x = EntityEntitlementsV2_ActionsList{} + if protoimpl.UnsafeEnabled { + mi := &file_authorization_authorization_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EntityEntitlementsV2_ActionsList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EntityEntitlementsV2_ActionsList) ProtoMessage() {} + +func (x *EntityEntitlementsV2_ActionsList) ProtoReflect() protoreflect.Message { + mi := &file_authorization_authorization_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EntityEntitlementsV2_ActionsList.ProtoReflect.Descriptor instead. +func (*EntityEntitlementsV2_ActionsList) Descriptor() ([]byte, []int) { + return file_authorization_authorization_proto_rawDescGZIP(), []int{11, 0} +} + +func (x *EntityEntitlementsV2_ActionsList) GetActions() []*policy.Action { + if x != nil { + return x.Actions + } + return nil +} + var File_authorization_authorization_proto protoreflect.FileDescriptor var file_authorization_authorization_proto_rawDesc = []byte{ @@ -1337,91 +1512,144 @@ var file_authorization_authorization_proto_rawDesc = []byte{ 0x69, 0x76, 0x65, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x42, 0x1f, 0x0a, 0x1d, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, - 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x22, 0x63, 0x0a, 0x12, 0x45, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x12, 0x30, 0x0a, - 0x14, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x5f, 0x66, 0x71, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x61, 0x74, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x73, 0x22, - 0x7b, 0x0a, 0x11, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x61, 0x74, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, - 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x73, 0x22, 0x60, 0x0a, 0x17, - 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, + 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x22, 0xfc, 0x01, 0x0a, 0x18, 0x47, + 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x56, 0x32, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x3b, 0x0a, 0x05, 0x73, 0x63, + 0x6f, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x48, 0x00, 0x52, 0x05, 0x73, + 0x63, 0x6f, 0x70, 0x65, 0x88, 0x01, 0x01, 0x12, 0x45, 0x0a, 0x1c, 0x77, 0x69, 0x74, 0x68, 0x5f, + 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, + 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, + 0x1a, 0x77, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, + 0x76, 0x65, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x88, 0x01, 0x01, 0x42, 0x08, + 0x0a, 0x06, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x42, 0x1f, 0x0a, 0x1d, 0x5f, 0x77, 0x69, 0x74, + 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, + 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x22, 0x63, 0x0a, 0x12, 0x45, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, + 0x1b, 0x0a, 0x09, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, + 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, + 0x66, 0x71, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x61, 0x74, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x73, 0x22, 0xfa, + 0x02, 0x0a, 0x14, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x56, 0x32, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x49, 0x64, 0x12, 0x8a, 0x01, 0x0a, 0x1f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, + 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x56, 0x32, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x1b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, + 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, + 0x6e, 0x1a, 0x37, 0x0a, 0x0b, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, 0x74, + 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x7f, 0x0a, 0x20, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x45, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2f, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x56, 0x32, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x7b, 0x0a, 0x11, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, + 0x12, 0x34, 0x0a, 0x16, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x74, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x14, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x65, 0x73, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x73, 0x22, 0x60, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x45, + 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x0c, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x64, 0x0a, 0x19, 0x47, 0x65, + 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x56, 0x32, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xc1, - 0x01, 0x0a, 0x14, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x2c, 0x0a, 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, - 0x51, 0x0a, 0x13, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x74, 0x74, 0x72, - 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x12, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x73, 0x22, 0x6e, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x50, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x73, 0x22, 0x6d, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x4e, 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x11, - 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x73, 0x32, 0x9c, 0x03, 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x75, 0x0a, 0x0c, 0x47, 0x65, - 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x22, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, - 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, - 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x3a, 0x01, 0x2a, 0x22, 0x11, - 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x8d, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x6f, - 0x6b, 0x65, 0x6e, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x7d, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x45, - 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x3a, 0x01, 0x2a, 0x22, 0x10, - 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x42, 0xb2, 0x01, 0x0a, 0x11, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x12, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x35, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, - 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x2f, 0x67, 0x6f, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x0d, 0x41, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0xca, 0x02, 0x0d, 0x41, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0xe2, 0x02, 0x19, 0x41, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x56, 0x32, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x22, 0xc1, 0x01, 0x0a, 0x14, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x2c, 0x0a, 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, + 0x73, 0x12, 0x51, 0x0a, 0x13, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, + 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, + 0x52, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x65, 0x73, 0x22, 0x6e, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x50, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x73, 0x22, 0x6d, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, + 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1f, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x73, 0x32, 0x86, 0x04, 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x75, 0x0a, 0x0c, + 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x22, 0x2e, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, + 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x23, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x3a, 0x01, 0x2a, + 0x22, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x8d, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x29, 0x2e, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x44, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x7d, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, + 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x3a, 0x01, 0x2a, + 0x22, 0x10, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x12, 0x68, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x56, 0x32, 0x12, 0x27, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xb2, 0x01, 0x0a, + 0x11, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x42, 0x12, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x35, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, + 0x6f, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0xa2, + 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0xca, 0x02, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0xe2, 0x02, 0x19, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0xea, 0x02, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1437,60 +1665,73 @@ func file_authorization_authorization_proto_rawDescGZIP() []byte { } var file_authorization_authorization_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_authorization_authorization_proto_msgTypes = make([]protoimpl.MessageInfo, 15) +var file_authorization_authorization_proto_msgTypes = make([]protoimpl.MessageInfo, 20) var file_authorization_authorization_proto_goTypes = []interface{}{ - (Entity_Category)(0), // 0: authorization.Entity.Category - (DecisionResponse_Decision)(0), // 1: authorization.DecisionResponse.Decision - (*Token)(nil), // 2: authorization.Token - (*Entity)(nil), // 3: authorization.Entity - (*EntityCustom)(nil), // 4: authorization.EntityCustom - (*EntityChain)(nil), // 5: authorization.EntityChain - (*DecisionRequest)(nil), // 6: authorization.DecisionRequest - (*DecisionResponse)(nil), // 7: authorization.DecisionResponse - (*GetDecisionsRequest)(nil), // 8: authorization.GetDecisionsRequest - (*GetDecisionsResponse)(nil), // 9: authorization.GetDecisionsResponse - (*GetEntitlementsRequest)(nil), // 10: authorization.GetEntitlementsRequest - (*EntityEntitlements)(nil), // 11: authorization.EntityEntitlements - (*ResourceAttribute)(nil), // 12: authorization.ResourceAttribute - (*GetEntitlementsResponse)(nil), // 13: authorization.GetEntitlementsResponse - (*TokenDecisionRequest)(nil), // 14: authorization.TokenDecisionRequest - (*GetDecisionsByTokenRequest)(nil), // 15: authorization.GetDecisionsByTokenRequest - (*GetDecisionsByTokenResponse)(nil), // 16: authorization.GetDecisionsByTokenResponse - (*anypb.Any)(nil), // 17: google.protobuf.Any - (*policy.Action)(nil), // 18: policy.Action + (Entity_Category)(0), // 0: authorization.Entity.Category + (DecisionResponse_Decision)(0), // 1: authorization.DecisionResponse.Decision + (*Token)(nil), // 2: authorization.Token + (*Entity)(nil), // 3: authorization.Entity + (*EntityCustom)(nil), // 4: authorization.EntityCustom + (*EntityChain)(nil), // 5: authorization.EntityChain + (*DecisionRequest)(nil), // 6: authorization.DecisionRequest + (*DecisionResponse)(nil), // 7: authorization.DecisionResponse + (*GetDecisionsRequest)(nil), // 8: authorization.GetDecisionsRequest + (*GetDecisionsResponse)(nil), // 9: authorization.GetDecisionsResponse + (*GetEntitlementsRequest)(nil), // 10: authorization.GetEntitlementsRequest + (*GetEntitlementsV2Request)(nil), // 11: authorization.GetEntitlementsV2Request + (*EntityEntitlements)(nil), // 12: authorization.EntityEntitlements + (*EntityEntitlementsV2)(nil), // 13: authorization.EntityEntitlementsV2 + (*ResourceAttribute)(nil), // 14: authorization.ResourceAttribute + (*GetEntitlementsResponse)(nil), // 15: authorization.GetEntitlementsResponse + (*GetEntitlementsV2Response)(nil), // 16: authorization.GetEntitlementsV2Response + (*TokenDecisionRequest)(nil), // 17: authorization.TokenDecisionRequest + (*GetDecisionsByTokenRequest)(nil), // 18: authorization.GetDecisionsByTokenRequest + (*GetDecisionsByTokenResponse)(nil), // 19: authorization.GetDecisionsByTokenResponse + (*EntityEntitlementsV2_ActionsList)(nil), // 20: authorization.EntityEntitlementsV2.ActionsList + nil, // 21: authorization.EntityEntitlementsV2.ActionsPerAttributeValueFqnEntry + (*anypb.Any)(nil), // 22: google.protobuf.Any + (*policy.Action)(nil), // 23: policy.Action } var file_authorization_authorization_proto_depIdxs = []int32{ - 17, // 0: authorization.Entity.claims:type_name -> google.protobuf.Any + 22, // 0: authorization.Entity.claims:type_name -> google.protobuf.Any 4, // 1: authorization.Entity.custom:type_name -> authorization.EntityCustom 0, // 2: authorization.Entity.category:type_name -> authorization.Entity.Category - 17, // 3: authorization.EntityCustom.extension:type_name -> google.protobuf.Any + 22, // 3: authorization.EntityCustom.extension:type_name -> google.protobuf.Any 3, // 4: authorization.EntityChain.entities:type_name -> authorization.Entity - 18, // 5: authorization.DecisionRequest.actions:type_name -> policy.Action + 23, // 5: authorization.DecisionRequest.actions:type_name -> policy.Action 5, // 6: authorization.DecisionRequest.entity_chains:type_name -> authorization.EntityChain - 12, // 7: authorization.DecisionRequest.resource_attributes:type_name -> authorization.ResourceAttribute - 18, // 8: authorization.DecisionResponse.action:type_name -> policy.Action + 14, // 7: authorization.DecisionRequest.resource_attributes:type_name -> authorization.ResourceAttribute + 23, // 8: authorization.DecisionResponse.action:type_name -> policy.Action 1, // 9: authorization.DecisionResponse.decision:type_name -> authorization.DecisionResponse.Decision 6, // 10: authorization.GetDecisionsRequest.decision_requests:type_name -> authorization.DecisionRequest 7, // 11: authorization.GetDecisionsResponse.decision_responses:type_name -> authorization.DecisionResponse 3, // 12: authorization.GetEntitlementsRequest.entities:type_name -> authorization.Entity - 12, // 13: authorization.GetEntitlementsRequest.scope:type_name -> authorization.ResourceAttribute - 11, // 14: authorization.GetEntitlementsResponse.entitlements:type_name -> authorization.EntityEntitlements - 18, // 15: authorization.TokenDecisionRequest.actions:type_name -> policy.Action - 2, // 16: authorization.TokenDecisionRequest.tokens:type_name -> authorization.Token - 12, // 17: authorization.TokenDecisionRequest.resource_attributes:type_name -> authorization.ResourceAttribute - 14, // 18: authorization.GetDecisionsByTokenRequest.decision_requests:type_name -> authorization.TokenDecisionRequest - 7, // 19: authorization.GetDecisionsByTokenResponse.decision_responses:type_name -> authorization.DecisionResponse - 8, // 20: authorization.AuthorizationService.GetDecisions:input_type -> authorization.GetDecisionsRequest - 15, // 21: authorization.AuthorizationService.GetDecisionsByToken:input_type -> authorization.GetDecisionsByTokenRequest - 10, // 22: authorization.AuthorizationService.GetEntitlements:input_type -> authorization.GetEntitlementsRequest - 9, // 23: authorization.AuthorizationService.GetDecisions:output_type -> authorization.GetDecisionsResponse - 16, // 24: authorization.AuthorizationService.GetDecisionsByToken:output_type -> authorization.GetDecisionsByTokenResponse - 13, // 25: authorization.AuthorizationService.GetEntitlements:output_type -> authorization.GetEntitlementsResponse - 23, // [23:26] is the sub-list for method output_type - 20, // [20:23] is the sub-list for method input_type - 20, // [20:20] is the sub-list for extension type_name - 20, // [20:20] is the sub-list for extension extendee - 0, // [0:20] is the sub-list for field type_name + 14, // 13: authorization.GetEntitlementsRequest.scope:type_name -> authorization.ResourceAttribute + 3, // 14: authorization.GetEntitlementsV2Request.entities:type_name -> authorization.Entity + 14, // 15: authorization.GetEntitlementsV2Request.scope:type_name -> authorization.ResourceAttribute + 21, // 16: authorization.EntityEntitlementsV2.actions_per_attribute_value_fqn:type_name -> authorization.EntityEntitlementsV2.ActionsPerAttributeValueFqnEntry + 12, // 17: authorization.GetEntitlementsResponse.entitlements:type_name -> authorization.EntityEntitlements + 13, // 18: authorization.GetEntitlementsV2Response.entitlements:type_name -> authorization.EntityEntitlementsV2 + 23, // 19: authorization.TokenDecisionRequest.actions:type_name -> policy.Action + 2, // 20: authorization.TokenDecisionRequest.tokens:type_name -> authorization.Token + 14, // 21: authorization.TokenDecisionRequest.resource_attributes:type_name -> authorization.ResourceAttribute + 17, // 22: authorization.GetDecisionsByTokenRequest.decision_requests:type_name -> authorization.TokenDecisionRequest + 7, // 23: authorization.GetDecisionsByTokenResponse.decision_responses:type_name -> authorization.DecisionResponse + 23, // 24: authorization.EntityEntitlementsV2.ActionsList.actions:type_name -> policy.Action + 20, // 25: authorization.EntityEntitlementsV2.ActionsPerAttributeValueFqnEntry.value:type_name -> authorization.EntityEntitlementsV2.ActionsList + 8, // 26: authorization.AuthorizationService.GetDecisions:input_type -> authorization.GetDecisionsRequest + 18, // 27: authorization.AuthorizationService.GetDecisionsByToken:input_type -> authorization.GetDecisionsByTokenRequest + 10, // 28: authorization.AuthorizationService.GetEntitlements:input_type -> authorization.GetEntitlementsRequest + 11, // 29: authorization.AuthorizationService.GetEntitlementsV2:input_type -> authorization.GetEntitlementsV2Request + 9, // 30: authorization.AuthorizationService.GetDecisions:output_type -> authorization.GetDecisionsResponse + 19, // 31: authorization.AuthorizationService.GetDecisionsByToken:output_type -> authorization.GetDecisionsByTokenResponse + 15, // 32: authorization.AuthorizationService.GetEntitlements:output_type -> authorization.GetEntitlementsResponse + 16, // 33: authorization.AuthorizationService.GetEntitlementsV2:output_type -> authorization.GetEntitlementsV2Response + 30, // [30:34] is the sub-list for method output_type + 26, // [26:30] is the sub-list for method input_type + 26, // [26:26] is the sub-list for extension type_name + 26, // [26:26] is the sub-list for extension extendee + 0, // [0:26] is the sub-list for field type_name } func init() { file_authorization_authorization_proto_init() } @@ -1608,7 +1849,7 @@ func file_authorization_authorization_proto_init() { } } file_authorization_authorization_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EntityEntitlements); i { + switch v := v.(*GetEntitlementsV2Request); i { case 0: return &v.state case 1: @@ -1620,7 +1861,7 @@ func file_authorization_authorization_proto_init() { } } file_authorization_authorization_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ResourceAttribute); i { + switch v := v.(*EntityEntitlements); i { case 0: return &v.state case 1: @@ -1632,7 +1873,7 @@ func file_authorization_authorization_proto_init() { } } file_authorization_authorization_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetEntitlementsResponse); i { + switch v := v.(*EntityEntitlementsV2); i { case 0: return &v.state case 1: @@ -1644,7 +1885,7 @@ func file_authorization_authorization_proto_init() { } } file_authorization_authorization_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TokenDecisionRequest); i { + switch v := v.(*ResourceAttribute); i { case 0: return &v.state case 1: @@ -1656,7 +1897,7 @@ func file_authorization_authorization_proto_init() { } } file_authorization_authorization_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDecisionsByTokenRequest); i { + switch v := v.(*GetEntitlementsResponse); i { case 0: return &v.state case 1: @@ -1668,6 +1909,42 @@ func file_authorization_authorization_proto_init() { } } file_authorization_authorization_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetEntitlementsV2Response); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_authorization_authorization_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TokenDecisionRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_authorization_authorization_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetDecisionsByTokenRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_authorization_authorization_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetDecisionsByTokenResponse); i { case 0: return &v.state @@ -1679,6 +1956,18 @@ func file_authorization_authorization_proto_init() { return nil } } + file_authorization_authorization_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EntityEntitlementsV2_ActionsList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } file_authorization_authorization_proto_msgTypes[1].OneofWrappers = []interface{}{ (*Entity_EmailAddress)(nil), @@ -1690,13 +1979,14 @@ func file_authorization_authorization_proto_init() { (*Entity_ClientId)(nil), } file_authorization_authorization_proto_msgTypes[8].OneofWrappers = []interface{}{} + file_authorization_authorization_proto_msgTypes[9].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_authorization_authorization_proto_rawDesc, NumEnums: 2, - NumMessages: 15, + NumMessages: 20, NumExtensions: 0, NumServices: 1, }, diff --git a/protocol/go/authorization/authorization_grpc.pb.go b/protocol/go/authorization/authorization_grpc.pb.go index ec4e9c9dce..7096ce89e1 100644 --- a/protocol/go/authorization/authorization_grpc.pb.go +++ b/protocol/go/authorization/authorization_grpc.pb.go @@ -22,6 +22,7 @@ const ( AuthorizationService_GetDecisions_FullMethodName = "/authorization.AuthorizationService/GetDecisions" AuthorizationService_GetDecisionsByToken_FullMethodName = "/authorization.AuthorizationService/GetDecisionsByToken" AuthorizationService_GetEntitlements_FullMethodName = "/authorization.AuthorizationService/GetEntitlements" + AuthorizationService_GetEntitlementsV2_FullMethodName = "/authorization.AuthorizationService/GetEntitlementsV2" ) // AuthorizationServiceClient is the client API for AuthorizationService service. @@ -31,6 +32,7 @@ type AuthorizationServiceClient interface { GetDecisions(ctx context.Context, in *GetDecisionsRequest, opts ...grpc.CallOption) (*GetDecisionsResponse, error) GetDecisionsByToken(ctx context.Context, in *GetDecisionsByTokenRequest, opts ...grpc.CallOption) (*GetDecisionsByTokenResponse, error) GetEntitlements(ctx context.Context, in *GetEntitlementsRequest, opts ...grpc.CallOption) (*GetEntitlementsResponse, error) + GetEntitlementsV2(ctx context.Context, in *GetEntitlementsV2Request, opts ...grpc.CallOption) (*GetEntitlementsV2Response, error) } type authorizationServiceClient struct { @@ -68,6 +70,15 @@ func (c *authorizationServiceClient) GetEntitlements(ctx context.Context, in *Ge return out, nil } +func (c *authorizationServiceClient) GetEntitlementsV2(ctx context.Context, in *GetEntitlementsV2Request, opts ...grpc.CallOption) (*GetEntitlementsV2Response, error) { + out := new(GetEntitlementsV2Response) + err := c.cc.Invoke(ctx, AuthorizationService_GetEntitlementsV2_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // AuthorizationServiceServer is the server API for AuthorizationService service. // All implementations must embed UnimplementedAuthorizationServiceServer // for forward compatibility @@ -75,6 +86,7 @@ type AuthorizationServiceServer interface { GetDecisions(context.Context, *GetDecisionsRequest) (*GetDecisionsResponse, error) GetDecisionsByToken(context.Context, *GetDecisionsByTokenRequest) (*GetDecisionsByTokenResponse, error) GetEntitlements(context.Context, *GetEntitlementsRequest) (*GetEntitlementsResponse, error) + GetEntitlementsV2(context.Context, *GetEntitlementsV2Request) (*GetEntitlementsV2Response, error) mustEmbedUnimplementedAuthorizationServiceServer() } @@ -91,6 +103,9 @@ func (UnimplementedAuthorizationServiceServer) GetDecisionsByToken(context.Conte func (UnimplementedAuthorizationServiceServer) GetEntitlements(context.Context, *GetEntitlementsRequest) (*GetEntitlementsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetEntitlements not implemented") } +func (UnimplementedAuthorizationServiceServer) GetEntitlementsV2(context.Context, *GetEntitlementsV2Request) (*GetEntitlementsV2Response, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetEntitlementsV2 not implemented") +} func (UnimplementedAuthorizationServiceServer) mustEmbedUnimplementedAuthorizationServiceServer() {} // UnsafeAuthorizationServiceServer may be embedded to opt out of forward compatibility for this service. @@ -158,6 +173,24 @@ func _AuthorizationService_GetEntitlements_Handler(srv interface{}, ctx context. return interceptor(ctx, in, info, handler) } +func _AuthorizationService_GetEntitlementsV2_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetEntitlementsV2Request) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AuthorizationServiceServer).GetEntitlementsV2(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: AuthorizationService_GetEntitlementsV2_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AuthorizationServiceServer).GetEntitlementsV2(ctx, req.(*GetEntitlementsV2Request)) + } + return interceptor(ctx, in, info, handler) +} + // AuthorizationService_ServiceDesc is the grpc.ServiceDesc for AuthorizationService service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -177,6 +210,10 @@ var AuthorizationService_ServiceDesc = grpc.ServiceDesc{ MethodName: "GetEntitlements", Handler: _AuthorizationService_GetEntitlements_Handler, }, + { + MethodName: "GetEntitlementsV2", + Handler: _AuthorizationService_GetEntitlementsV2_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "authorization/authorization.proto", diff --git a/protocol/go/authorization/authorizationconnect/authorization.connect.go b/protocol/go/authorization/authorizationconnect/authorization.connect.go index dd5efadb4d..d318792cfb 100644 --- a/protocol/go/authorization/authorizationconnect/authorization.connect.go +++ b/protocol/go/authorization/authorizationconnect/authorization.connect.go @@ -42,6 +42,9 @@ const ( // AuthorizationServiceGetEntitlementsProcedure is the fully-qualified name of the // AuthorizationService's GetEntitlements RPC. AuthorizationServiceGetEntitlementsProcedure = "/authorization.AuthorizationService/GetEntitlements" + // AuthorizationServiceGetEntitlementsV2Procedure is the fully-qualified name of the + // AuthorizationService's GetEntitlementsV2 RPC. + AuthorizationServiceGetEntitlementsV2Procedure = "/authorization.AuthorizationService/GetEntitlementsV2" ) // These variables are the protoreflect.Descriptor objects for the RPCs defined in this package. @@ -50,6 +53,7 @@ var ( authorizationServiceGetDecisionsMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetDecisions") authorizationServiceGetDecisionsByTokenMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetDecisionsByToken") authorizationServiceGetEntitlementsMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetEntitlements") + authorizationServiceGetEntitlementsV2MethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetEntitlementsV2") ) // AuthorizationServiceClient is a client for the authorization.AuthorizationService service. @@ -57,6 +61,7 @@ type AuthorizationServiceClient interface { GetDecisions(context.Context, *connect.Request[authorization.GetDecisionsRequest]) (*connect.Response[authorization.GetDecisionsResponse], error) GetDecisionsByToken(context.Context, *connect.Request[authorization.GetDecisionsByTokenRequest]) (*connect.Response[authorization.GetDecisionsByTokenResponse], error) GetEntitlements(context.Context, *connect.Request[authorization.GetEntitlementsRequest]) (*connect.Response[authorization.GetEntitlementsResponse], error) + GetEntitlementsV2(context.Context, *connect.Request[authorization.GetEntitlementsV2Request]) (*connect.Response[authorization.GetEntitlementsV2Response], error) } // NewAuthorizationServiceClient constructs a client for the authorization.AuthorizationService @@ -87,6 +92,12 @@ func NewAuthorizationServiceClient(httpClient connect.HTTPClient, baseURL string connect.WithSchema(authorizationServiceGetEntitlementsMethodDescriptor), connect.WithClientOptions(opts...), ), + getEntitlementsV2: connect.NewClient[authorization.GetEntitlementsV2Request, authorization.GetEntitlementsV2Response]( + httpClient, + baseURL+AuthorizationServiceGetEntitlementsV2Procedure, + connect.WithSchema(authorizationServiceGetEntitlementsV2MethodDescriptor), + connect.WithClientOptions(opts...), + ), } } @@ -95,6 +106,7 @@ type authorizationServiceClient struct { getDecisions *connect.Client[authorization.GetDecisionsRequest, authorization.GetDecisionsResponse] getDecisionsByToken *connect.Client[authorization.GetDecisionsByTokenRequest, authorization.GetDecisionsByTokenResponse] getEntitlements *connect.Client[authorization.GetEntitlementsRequest, authorization.GetEntitlementsResponse] + getEntitlementsV2 *connect.Client[authorization.GetEntitlementsV2Request, authorization.GetEntitlementsV2Response] } // GetDecisions calls authorization.AuthorizationService.GetDecisions. @@ -112,12 +124,18 @@ func (c *authorizationServiceClient) GetEntitlements(ctx context.Context, req *c return c.getEntitlements.CallUnary(ctx, req) } +// GetEntitlementsV2 calls authorization.AuthorizationService.GetEntitlementsV2. +func (c *authorizationServiceClient) GetEntitlementsV2(ctx context.Context, req *connect.Request[authorization.GetEntitlementsV2Request]) (*connect.Response[authorization.GetEntitlementsV2Response], error) { + return c.getEntitlementsV2.CallUnary(ctx, req) +} + // AuthorizationServiceHandler is an implementation of the authorization.AuthorizationService // service. type AuthorizationServiceHandler interface { GetDecisions(context.Context, *connect.Request[authorization.GetDecisionsRequest]) (*connect.Response[authorization.GetDecisionsResponse], error) GetDecisionsByToken(context.Context, *connect.Request[authorization.GetDecisionsByTokenRequest]) (*connect.Response[authorization.GetDecisionsByTokenResponse], error) GetEntitlements(context.Context, *connect.Request[authorization.GetEntitlementsRequest]) (*connect.Response[authorization.GetEntitlementsResponse], error) + GetEntitlementsV2(context.Context, *connect.Request[authorization.GetEntitlementsV2Request]) (*connect.Response[authorization.GetEntitlementsV2Response], error) } // NewAuthorizationServiceHandler builds an HTTP handler from the service implementation. It returns @@ -144,6 +162,12 @@ func NewAuthorizationServiceHandler(svc AuthorizationServiceHandler, opts ...con connect.WithSchema(authorizationServiceGetEntitlementsMethodDescriptor), connect.WithHandlerOptions(opts...), ) + authorizationServiceGetEntitlementsV2Handler := connect.NewUnaryHandler( + AuthorizationServiceGetEntitlementsV2Procedure, + svc.GetEntitlementsV2, + connect.WithSchema(authorizationServiceGetEntitlementsV2MethodDescriptor), + connect.WithHandlerOptions(opts...), + ) return "/authorization.AuthorizationService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { switch r.URL.Path { case AuthorizationServiceGetDecisionsProcedure: @@ -152,6 +176,8 @@ func NewAuthorizationServiceHandler(svc AuthorizationServiceHandler, opts ...con authorizationServiceGetDecisionsByTokenHandler.ServeHTTP(w, r) case AuthorizationServiceGetEntitlementsProcedure: authorizationServiceGetEntitlementsHandler.ServeHTTP(w, r) + case AuthorizationServiceGetEntitlementsV2Procedure: + authorizationServiceGetEntitlementsV2Handler.ServeHTTP(w, r) default: http.NotFound(w, r) } @@ -172,3 +198,7 @@ func (UnimplementedAuthorizationServiceHandler) GetDecisionsByToken(context.Cont func (UnimplementedAuthorizationServiceHandler) GetEntitlements(context.Context, *connect.Request[authorization.GetEntitlementsRequest]) (*connect.Response[authorization.GetEntitlementsResponse], error) { return nil, connect.NewError(connect.CodeUnimplemented, errors.New("authorization.AuthorizationService.GetEntitlements is not implemented")) } + +func (UnimplementedAuthorizationServiceHandler) GetEntitlementsV2(context.Context, *connect.Request[authorization.GetEntitlementsV2Request]) (*connect.Response[authorization.GetEntitlementsV2Response], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("authorization.AuthorizationService.GetEntitlementsV2 is not implemented")) +} diff --git a/service/authorization/authorization.proto b/service/authorization/authorization.proto index 058f1f18f3..ee430d819e 100644 --- a/service/authorization/authorization.proto +++ b/service/authorization/authorization.proto @@ -4,10 +4,8 @@ package authorization; import "google/api/annotations.proto"; import "google/protobuf/any.proto"; - import "policy/objects.proto"; - message Token { string id = 1; // ephemeral id for tracking between request and response string jwt = 2; // the token @@ -47,9 +45,9 @@ message EntityChain { } /* - Example Request Get Decisions to answer the question - Do Bob (represented by entity chain ec1) - and Alice (represented by entity chain ec2) have TRANSMIT authorization for - 2 resources; resource1 (attr-set-1) defined by attributes foo:bar resource2 (attr-set-2) defined by attribute foo:bar, color:red ? + Example Request Get Decisions to answer the question - Do Bob (represented by entity chain ec1) + and Alice (represented by entity chain ec2) have TRANSMIT authorization for + 2 resources; resource1 (attr-set-1) defined by attributes foo:bar resource2 (attr-set-2) defined by attribute foo:bar, color:red ? { "actions": [ @@ -158,31 +156,7 @@ message GetDecisionsResponse { repeated DecisionResponse decision_responses = 1; } -/* - Request to get entitlements for one or more entities for an optional attribute scope - - Example: Get entitlements for bob and alice (both represented using an email address - - { - "entities": [ - { - "id": "e1", - "emailAddress": "bob@example.org" - }, - { - "id": "e2", - "emailAddress": "alice@example.org" - } - ], - "scope": { - "attributeFqns": [ - "https://example.net/attr/attr1/value/value1", - "https://example.net/attr/attr1/value/value2" - ] - } - } - -*/ +// Deprecated: use GetEntitlementsRequestV2 instead message GetEntitlementsRequest { // list of requested entities repeated Entity entities = 1; @@ -192,53 +166,50 @@ message GetEntitlementsRequest { optional bool with_comprehensive_hierarchy = 3; } +message GetEntitlementsV2Request { + // list of requested entities + repeated Entity entities = 1; + // optional attribute fqn as a scope + optional ResourceAttribute scope = 2; + // optional parameter to return a full list of entitlements - returns lower hierarchy attributes + optional bool with_comprehensive_hierarchy = 3; +} + +// Deprecated: use EntityEntitlementsV2 instead message EntityEntitlements { string entity_id = 1; repeated string attribute_value_fqns = 2; } +// Entitlements for a given entity, mapping each attribute value FQN to any entitled actions[] +message EntityEntitlementsV2 { + message ActionsList { + repeated policy.Action actions = 1; + } + + string entity_id = 1; + map actions_per_attribute_value_fqn = 2; +} + //A logical bucket of attributes belonging to a "Resource" message ResourceAttribute { string resource_attributes_id = 1; repeated string attribute_value_fqns = 2; } -/* - - Example Response for a request of : Get entitlements for bob and alice (both represented using an email address - - { - "entitlements": [ - { - "entityId": "e1", - "attributeValueReferences": [ - { - "attributeFqn": "http://www.example.org/attr/foo/value/bar" - } - ] - }, - { - "entityId": "e2", - "attributeValueReferences": [ - { - "attributeFqn": "http://www.example.org/attr/color/value/red" - } - ] - } - ] - } - - -*/ +// Deprecated: use GetEntitlementsV2Request instead message GetEntitlementsResponse { repeated EntityEntitlements entitlements = 1; } +message GetEntitlementsV2Response { + repeated EntityEntitlementsV2 entitlements = 1; +} /* - Example Request Get Decisions by Token to answer the question - Do Bob and client1 (represented by token tok1) - and Alice and client2 (represented by token tok2) have TRANSMIT authorization for - 2 resources; resource1 (attr-set-1) defined by attributes foo:bar resource2 (attr-set-2) defined by attribute foo:bar, color:red ? + Example Request Get Decisions by Token to answer the question - Do Bob and client1 (represented by token tok1) + and Alice and client2 (represented by token tok2) have TRANSMIT authorization for + 2 resources; resource1 (attr-set-1) defined by attributes foo:bar resource2 (attr-set-2) defined by attribute foo:bar, color:red ? { "actions": [ @@ -302,4 +273,5 @@ service AuthorizationService { body: "*" }; } + rpc GetEntitlementsV2(GetEntitlementsV2Request) returns (GetEntitlementsV2Response) {} } From c547edcf842537d57756b057a51b20e4f0e85a9e Mon Sep 17 00:00:00 2001 From: jakedoublev Date: Mon, 28 Apr 2025 15:59:08 -0700 Subject: [PATCH 02/49] fix copilot-flagged comment --- docs/grpc/index.html | 2 +- .../authorization/authorization.swagger.json | 2 +- protocol/go/authorization/authorization.pb.go | 2 +- service/authorization/authorization.go | 4 +- service/authorization/authorization.proto | 154 +++++++++--------- 5 files changed, 83 insertions(+), 81 deletions(-) diff --git a/docs/grpc/index.html b/docs/grpc/index.html index 3334915e99..d848f0ce1e 100644 --- a/docs/grpc/index.html +++ b/docs/grpc/index.html @@ -3370,7 +3370,7 @@

    GetDecisionsResponse

    GetEntitlementsRequest

    -

    Deprecated: use GetEntitlementsRequestV2 instead

    +

    Deprecated: use GetEntitlementsV2Request instead

    diff --git a/docs/openapi/authorization/authorization.swagger.json b/docs/openapi/authorization/authorization.swagger.json index 12a50bbe8b..2213666a1e 100644 --- a/docs/openapi/authorization/authorization.swagger.json +++ b/docs/openapi/authorization/authorization.swagger.json @@ -349,7 +349,7 @@ "title": "optional parameter to return a full list of entitlements - returns lower hierarchy attributes" } }, - "title": "Deprecated: use GetEntitlementsRequestV2 instead" + "title": "Deprecated: use GetEntitlementsV2Request instead" }, "authorizationGetEntitlementsResponse": { "type": "object", diff --git a/protocol/go/authorization/authorization.pb.go b/protocol/go/authorization/authorization.pb.go index d5599f5cf2..663c1e8e2c 100644 --- a/protocol/go/authorization/authorization.pb.go +++ b/protocol/go/authorization/authorization.pb.go @@ -764,7 +764,7 @@ func (x *GetDecisionsResponse) GetDecisionResponses() []*DecisionResponse { return nil } -// Deprecated: use GetEntitlementsRequestV2 instead +// Deprecated: use GetEntitlementsV2Request instead type GetEntitlementsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache diff --git a/service/authorization/authorization.go b/service/authorization/authorization.go index c013991b18..35c879ac8d 100644 --- a/service/authorization/authorization.go +++ b/service/authorization/authorization.go @@ -265,6 +265,7 @@ func (as *AuthorizationService) getDecisions(ctx context.Context, dr *authorizat decisionResp := &authorization.DecisionResponse{ Decision: authorization.DecisionResponse_DECISION_DENY, EntityChainId: ec.GetId(), + // TODO: make this real Action: &policy.Action{ Value: &policy.Action_Standard{ Standard: policy.Action_STANDARD_ACTION_TRANSMIT, @@ -360,7 +361,7 @@ func (as *AuthorizationService) getDecisions(ctx context.Context, dr *authorizat // Entitlements for environment entites in chain envEntityAttrValues := make(map[string][]string) // Entitlementsfor sbuject entities in chain - subjectEntityAttrValues := make(map[string][]string) + subjectEntityAttrValues := make(access.EntityIDsToEntitlements) // handle empty entity / attr list decision := authorization.DecisionResponse_DECISION_DENY @@ -429,6 +430,7 @@ func (as *AuthorizationService) getDecisions(ctx context.Context, dr *authorizat decisionResp := &authorization.DecisionResponse{ Decision: decision, EntityChainId: ec.GetId(), + // TODO: make this real Action: &policy.Action{ Value: &policy.Action_Standard{ Standard: policy.Action_STANDARD_ACTION_TRANSMIT, diff --git a/service/authorization/authorization.proto b/service/authorization/authorization.proto index ee430d819e..23788acdaf 100644 --- a/service/authorization/authorization.proto +++ b/service/authorization/authorization.proto @@ -45,50 +45,50 @@ message EntityChain { } /* - Example Request Get Decisions to answer the question - Do Bob (represented by entity chain ec1) - and Alice (represented by entity chain ec2) have TRANSMIT authorization for - 2 resources; resource1 (attr-set-1) defined by attributes foo:bar resource2 (attr-set-2) defined by attribute foo:bar, color:red ? + Example Request Get Decisions to answer the question - Do Bob (represented by entity chain ec1) + and Alice (represented by entity chain ec2) have TRANSMIT authorization for + 2 resources; resource1 (attr-set-1) defined by attributes foo:bar resource2 (attr-set-2) defined by attribute foo:bar, color:red ? - { - "actions": [ - { - "standard": "STANDARD_ACTION_TRANSMIT" - } - ], - "entityChains": [ - { - "id": "ec1", - "entities": [ - { - "emailAddress": "bob@example.org" - } - ] - }, - { - "id": "ec2", - "entities": [ - { - "userName": "alice@example.org" - } - ] - } - ], - "resourceAttributes": [ - { - "resourceAttributeId": "attr-set-1", - "attributeFqns": [ - "https://www.example.org/attr/foo/value/value1" - ] - }, - { - "resourceAttributeId": "attr-set-2", - "attributeFqns": [ - "https://example.net/attr/attr1/value/value1", - "https://example.net/attr/attr1/value/value2" - ] - } - ] -} + { + "actions": [ + { + "standard": "STANDARD_ACTION_TRANSMIT" + } + ], + "entityChains": [ + { + "id": "ec1", + "entities": [ + { + "emailAddress": "bob@example.org" + } + ] + }, + { + "id": "ec2", + "entities": [ + { + "userName": "alice@example.org" + } + ] + } + ], + "resourceAttributes": [ + { + "resourceAttributeId": "attr-set-1", + "attributeFqns": [ + "https://www.example.org/attr/foo/value/value1" + ] + }, + { + "resourceAttributeId": "attr-set-2", + "attributeFqns": [ + "https://example.net/attr/attr1/value/value1", + "https://example.net/attr/attr1/value/value2" + ] + } + ] + } */ message DecisionRequest { @@ -156,7 +156,7 @@ message GetDecisionsResponse { repeated DecisionResponse decision_responses = 1; } -// Deprecated: use GetEntitlementsRequestV2 instead +// Deprecated: use GetEntitlementsV2Request instead message GetEntitlementsRequest { // list of requested entities repeated Entity entities = 1; @@ -207,40 +207,40 @@ message GetEntitlementsV2Response { } /* - Example Request Get Decisions by Token to answer the question - Do Bob and client1 (represented by token tok1) - and Alice and client2 (represented by token tok2) have TRANSMIT authorization for - 2 resources; resource1 (attr-set-1) defined by attributes foo:bar resource2 (attr-set-2) defined by attribute foo:bar, color:red ? + Example Request Get Decisions by Token to answer the question - Do Bob and client1 (represented by token tok1) + and Alice and client2 (represented by token tok2) have TRANSMIT authorization for + 2 resources; resource1 (attr-set-1) defined by attributes foo:bar resource2 (attr-set-2) defined by attribute foo:bar, color:red ? - { - "actions": [ - { - "standard": "STANDARD_ACTION_TRANSMIT" - } - ], - "tokens": [ - { - "id": "tok1", - "jwt": .... - }, - { - "id": "tok2", - "jwt": ..... - } - ], - "resourceAttributes": [ - { - "attributeFqns": [ - "https://www.example.org/attr/foo/value/value1" - ] - }, - { - "attributeFqns": [ - "https://example.net/attr/attr1/value/value1", - "https://example.net/attr/attr1/value/value2" - ] - } - ] -} + { + "actions": [ + { + "standard": "STANDARD_ACTION_TRANSMIT" + } + ], + "tokens": [ + { + "id": "tok1", + "jwt": .... + }, + { + "id": "tok2", + "jwt": ..... + } + ], + "resourceAttributes": [ + { + "attributeFqns": [ + "https://www.example.org/attr/foo/value/value1" + ] + }, + { + "attributeFqns": [ + "https://example.net/attr/attr1/value/value1", + "https://example.net/attr/attr1/value/value2" + ] + } + ] + } */ message TokenDecisionRequest { From 88437293898f31fce29e36430b934955970fc363 Mon Sep 17 00:00:00 2001 From: jakedoublev Date: Tue, 29 Apr 2025 07:33:30 -0700 Subject: [PATCH 03/49] proto fixes --- docs/grpc/index.html | 978 ++++++++-- .../authorization/authorization.swagger.json | 86 +- .../v2/authorization.swagger.json | 429 ++++ .../entity_resolution.swagger.json | 20 +- protocol/go/authorization/authorization.pb.go | 634 ++---- .../go/authorization/authorization_grpc.pb.go | 37 - .../authorization.connect.go | 30 - .../go/authorization/v2/authorization.pb.go | 1722 +++++++++++++++++ .../authorization/v2/authorization.pb.gw.go | 250 +++ .../authorization/v2/authorization_grpc.pb.go | 183 ++ .../authorization.connect.go | 174 ++ service/authorization/authorization.proto | 27 - service/authorization/v2/authorization.proto | 213 ++ 13 files changed, 3956 insertions(+), 827 deletions(-) create mode 100644 docs/openapi/authorization/v2/authorization.swagger.json create mode 100644 protocol/go/authorization/v2/authorization.pb.go create mode 100644 protocol/go/authorization/v2/authorization.pb.gw.go create mode 100644 protocol/go/authorization/v2/authorization_grpc.pb.go create mode 100644 protocol/go/authorization/v2/authorizationv2connect/authorization.connect.go create mode 100644 service/authorization/v2/authorization.proto diff --git a/docs/grpc/index.html b/docs/grpc/index.html index d848f0ce1e..2928bd2031 100644 --- a/docs/grpc/index.html +++ b/docs/grpc/index.html @@ -349,74 +349,145 @@

    Table of Contents

  • - MEntityEntitlementsV2 + MGetDecisionsByTokenRequest
  • - MEntityEntitlementsV2.ActionsList + MGetDecisionsByTokenResponse
  • - MEntityEntitlementsV2.ActionsPerAttributeValueFqnEntry + MGetDecisionsRequest
  • - MGetDecisionsByTokenRequest + MGetDecisionsResponse
  • - MGetDecisionsByTokenResponse + MGetEntitlementsRequest
  • - MGetDecisionsRequest + MGetEntitlementsResponse
  • - MGetDecisionsResponse + MResourceAttribute
  • - MGetEntitlementsRequest + MToken
  • - MGetEntitlementsResponse + MTokenDecisionRequest
  • +
  • - MGetEntitlementsV2Request + EDecisionResponse.Decision
  • - MGetEntitlementsV2Response + EEntity.Category
  • + +
  • - MResourceAttribute + SAuthorizationService
  • + + + + +
  • + authorization/v2/authorization.proto + @@ -3157,7 +3228,7 @@

    EntityCustom

    EntityEntitlements

    -

    Deprecated: use EntityEntitlementsV2 instead

    +

  • @@ -3187,92 +3258,6 @@

    EntityEntitlements

    -

    EntityEntitlementsV2

    -

    Entitlements for a given entity, mapping each attribute value FQN to any entitled actions[]

    - - -
    - - - - - - - - - - - - - - - - - - - - -
    FieldTypeLabelDescription
    entity_idstring

    actions_per_attribute_value_fqnEntityEntitlementsV2.ActionsPerAttributeValueFqnEntryrepeated

    - - - - - -

    EntityEntitlementsV2.ActionsList

    -

    - - - - - - - - - - - - - - - - -
    FieldTypeLabelDescription
    actionspolicy.Actionrepeated

    - - - - - -

    EntityEntitlementsV2.ActionsPerAttributeValueFqnEntry

    -

    - - - - - - - - - - - - - - - - - - - - - - - -
    FieldTypeLabelDescription
    keystring

    valueEntityEntitlementsV2.ActionsList

    - - - - -

    GetDecisionsByTokenRequest

    @@ -3370,68 +3355,6 @@

    GetDecisionsResponse

    GetEntitlementsRequest

    -

    Deprecated: use GetEntitlementsV2Request instead

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    FieldTypeLabelDescription
    entitiesEntityrepeated

    list of requested entities

    scopeResourceAttributeoptional

    optional attribute fqn as a scope

    with_comprehensive_hierarchybooloptional

    optional parameter to return a full list of entitlements - returns lower hierarchy attributes

    - - - - - -

    GetEntitlementsResponse

    -

    Deprecated: use GetEntitlementsV2Request instead

    - - - - - - - - - - - - - - - - -
    FieldTypeLabelDescription
    entitlementsEntityEntitlementsrepeated

    - - - - - -

    GetEntitlementsV2Request

    @@ -3469,7 +3392,7 @@

    GetEntitlementsV2Request

    -

    GetEntitlementsV2Response

    +

    GetEntitlementsResponse

    @@ -3481,7 +3404,7 @@

    GetEntitlementsV2Response

    entitlements - EntityEntitlementsV2 + EntityEntitlements repeated

    @@ -3686,13 +3609,6 @@

    AuthorizationService

    - - GetEntitlementsV2 - GetEntitlementsV2Request - GetEntitlementsV2Response -

    - - @@ -3747,6 +3663,718 @@

    Methods with HTTP bindings

    +
    +

    authorization/v2/authorization.proto

    Top +
    +

    + + +

    DecisionRequest

    +

    Example Request Get Decisions to answer the question - Do Bob (represented by entity chain ec1)

    and Alice (represented by entity chain ec2) have TRANSMIT authorization for

    2 resources; resource1 (attr-set-1) defined by attributes foo:bar resource2 (attr-set-2) defined by attribute foo:bar, color:red ?

    {

    "actions": [

    {

    "standard": "STANDARD_ACTION_TRANSMIT"

    }

    ],

    "entityChains": [

    {

    "id": "ec1",

    "entities": [

    {

    "emailAddress": "bob@example.org"

    }

    ]

    },

    {

    "id": "ec2",

    "entities": [

    {

    "userName": "alice@example.org"

    }

    ]

    }

    ],

    "resourceAttributes": [

    {

    "resourceAttributeId": "attr-set-1",

    "attributeFqns": [

    "https://www.example.org/attr/foo/value/value1"

    ]

    },

    {

    "resourceAttributeId": "attr-set-2",

    "attributeFqns": [

    "https://example.net/attr/attr1/value/value1",

    "https://example.net/attr/attr1/value/value2"

    ]

    }

    ]

    }

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    actionspolicy.Actionrepeated

    entity_chainsEntityChainrepeated

    resource_attributesResourceAttributerepeated

    + + + + + +

    DecisionResponse

    +

    Example response for a Decision Request - Do Bob (represented by entity chain ec1)

    and Alice (represented by entity chain ec2) have TRANSMIT authorization for

    2 resources; resource1 (attr-set-1) defined by attributes foo:bar resource2 (attr-set-2) defined by attribute foo:bar, color:red ?

    Results:

    - bob has permitted authorization to transmit for a resource defined by attr-set-1 attributes and has a watermark obligation

    - bob has denied authorization to transmit a for a resource defined by attr-set-2 attributes

    - alice has permitted authorization to transmit for a resource defined by attr-set-1 attributes

    - alice has denied authorization to transmit a for a resource defined by attr-set-2 attributes

    {

    "entityChainId": "ec1",

    "resourceAttributesId": "attr-set-1",

    "decision": "DECISION_PERMIT",

    "obligations": [

    "http://www.example.org/obligation/watermark"

    ]

    },

    {

    "entityChainId": "ec1",

    "resourceAttributesId": "attr-set-2",

    "decision": "DECISION_PERMIT"

    },

    {

    "entityChainId": "ec2",

    "resourceAttributesId": "attr-set-1",

    "decision": "DECISION_PERMIT"

    },

    {

    "entityChainId": "ec2",

    "resourceAttributesId": "attr-set-2",

    "decision": "DECISION_DENY"

    }

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    entity_chain_idstring

    ephemeral entity chain id from the request

    resource_attributes_idstring

    ephemeral resource attributes id from the request

    actionpolicy.Action

    Action of the decision response

    decisionDecisionResponse.Decision

    The decision response

    obligationsstringrepeated

    optional list of obligations represented in URI format

    + + + + + +

    Entity

    +

    PE (Person Entity) or NPE (Non-Person Entity)

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    idstring

    ephemeral id for tracking between request and response

    email_addressstring

    one of the entity options must be set

    user_namestring

    remote_claims_urlstring

    uuidstring

    claimsgoogle.protobuf.Any

    customEntityCustom

    client_idstring

    categoryEntity.Category

    + + + + + +

    EntityChain

    +

    A set of related PE and NPE

    + + + + + + + + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    idstring

    ephemeral id for tracking between request and response

    entitiesEntityrepeated

    + + + + + +

    EntityCustom

    +

    Entity type for custom entities beyond the standard types

    + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    extensiongoogle.protobuf.Any

    + + + + + +

    EntityEntitlements

    +

    Entitlements for a given entity, mapping each attribute value FQN to any entitled actions[]

    + + + + + + + + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    entity_idstring

    actions_per_attribute_value_fqnEntityEntitlements.ActionsPerAttributeValueFqnEntryrepeated

    + + + + + +

    EntityEntitlements.ActionsList

    +

    + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    actionspolicy.Actionrepeated

    + + + + + +

    EntityEntitlements.ActionsPerAttributeValueFqnEntry

    +

    + + + + + + + + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    keystring

    valueEntityEntitlements.ActionsList

    + + + + + +

    GetDecisionsByTokenRequest

    +

    + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    decision_requestsTokenDecisionRequestrepeated

    + + + + + +

    GetDecisionsByTokenResponse

    +

    + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    decision_responsesDecisionResponserepeated

    + + + + + +

    GetDecisionsRequest

    +

    + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    decision_requestsDecisionRequestrepeated

    + + + + + +

    GetDecisionsResponse

    +

    + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    decision_responsesDecisionResponserepeated

    + + + + + +

    GetEntitlementsRequest

    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    entitiesEntityrepeated

    list of requested entities

    scopeResourceAttributeoptional

    optional attribute fqn as a scope

    with_comprehensive_hierarchybooloptional

    optional parameter to return a full list of entitlements - returns lower hierarchy attributes

    + + + + + +

    GetEntitlementsResponse

    +

    + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    entitlementsEntityEntitlementsrepeated

    + + + + + +

    ResourceAttribute

    +

    A logical bucket of attributes belonging to a "Resource"

    + + + + + + + + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    resource_attributes_idstring

    attribute_value_fqnsstringrepeated

    + + + + + +

    Token

    +

    + + + + + + + + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    idstring

    ephemeral id for tracking between request and response

    jwtstring

    the token

    + + + + + +

    TokenDecisionRequest

    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    actionspolicy.Actionrepeated

    tokensTokenrepeated

    resource_attributesResourceAttributerepeated

    + + + + + + + +

    DecisionResponse.Decision

    +

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameNumberDescription
    DECISION_UNSPECIFIED0

    DECISION_DENY1

    DECISION_PERMIT2

    + +

    Entity.Category

    +

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameNumberDescription
    CATEGORY_UNSPECIFIED0

    CATEGORY_SUBJECT1

    CATEGORY_ENVIRONMENT2

    + + + + + +

    AuthorizationService

    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Method NameRequest TypeResponse TypeDescription
    GetDecisionsGetDecisionsRequestGetDecisionsResponse

    GetDecisionsByTokenGetDecisionsByTokenRequestGetDecisionsByTokenResponse

    GetEntitlementsGetEntitlementsRequestGetEntitlementsResponse

    + + + + +

    Methods with HTTP bindings

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Method NameMethodPatternBody
    GetDecisionsPOST/v1/authorization*
    GetDecisionsByTokenPOST/v1/token/authorization
    + + + +

    entityresolution/entity_resolution.proto

    Top
    diff --git a/docs/openapi/authorization/authorization.swagger.json b/docs/openapi/authorization/authorization.swagger.json index 2213666a1e..e223d843e9 100644 --- a/docs/openapi/authorization/authorization.swagger.json +++ b/docs/openapi/authorization/authorization.swagger.json @@ -114,36 +114,6 @@ "default": "STANDARD_ACTION_UNSPECIFIED", "title": "- STANDARD_ACTION_DECRYPT: Deprecated\nMigrate to 'read' action name\n - STANDARD_ACTION_TRANSMIT: Deprecated\nMigrate to 'create' action name" }, - "DecisionResponseDecision": { - "type": "string", - "enum": [ - "DECISION_UNSPECIFIED", - "DECISION_DENY", - "DECISION_PERMIT" - ], - "default": "DECISION_UNSPECIFIED" - }, - "EntityCategory": { - "type": "string", - "enum": [ - "CATEGORY_UNSPECIFIED", - "CATEGORY_SUBJECT", - "CATEGORY_ENVIRONMENT" - ], - "default": "CATEGORY_UNSPECIFIED" - }, - "EntityEntitlementsV2ActionsList": { - "type": "object", - "properties": { - "actions": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/policyAction" - } - } - } - }, "authorizationDecisionRequest": { "type": "object", "properties": { @@ -188,7 +158,7 @@ "title": "Action of the decision response" }, "decision": { - "$ref": "#/definitions/DecisionResponseDecision", + "$ref": "#/definitions/authorizationDecisionResponseDecision", "title": "The decision response" }, "obligations": { @@ -202,6 +172,15 @@ "description": "Results:\n- bob has permitted authorization to transmit for a resource defined by attr-set-1 attributes and has a watermark obligation\n- bob has denied authorization to transmit a for a resource defined by attr-set-2 attributes\n- alice has permitted authorization to transmit for a resource defined by attr-set-1 attributes\n- alice has denied authorization to transmit a for a resource defined by attr-set-2 attributes\n\n{\n\"entityChainId\": \"ec1\",\n\"resourceAttributesId\": \"attr-set-1\",\n\"decision\": \"DECISION_PERMIT\",\n\"obligations\": [\n\"http://www.example.org/obligation/watermark\"\n]\n},\n{\n\"entityChainId\": \"ec1\",\n\"resourceAttributesId\": \"attr-set-2\",\n\"decision\": \"DECISION_PERMIT\"\n},\n{\n\"entityChainId\": \"ec2\",\n\"resourceAttributesId\": \"attr-set-1\",\n\"decision\": \"DECISION_PERMIT\"\n},\n{\n\"entityChainId\": \"ec2\",\n\"resourceAttributesId\": \"attr-set-2\",\n\"decision\": \"DECISION_DENY\"\n}", "title": "Example response for a Decision Request - Do Bob (represented by entity chain ec1)\nand Alice (represented by entity chain ec2) have TRANSMIT authorization for\n2 resources; resource1 (attr-set-1) defined by attributes foo:bar resource2 (attr-set-2) defined by attribute foo:bar, color:red ?" }, + "authorizationDecisionResponseDecision": { + "type": "string", + "enum": [ + "DECISION_UNSPECIFIED", + "DECISION_DENY", + "DECISION_PERMIT" + ], + "default": "DECISION_UNSPECIFIED" + }, "authorizationEntity": { "type": "object", "properties": { @@ -232,11 +211,20 @@ "type": "string" }, "category": { - "$ref": "#/definitions/EntityCategory" + "$ref": "#/definitions/authorizationEntityCategory" } }, "title": "PE (Person Entity) or NPE (Non-Person Entity)" }, + "authorizationEntityCategory": { + "type": "string", + "enum": [ + "CATEGORY_UNSPECIFIED", + "CATEGORY_SUBJECT", + "CATEGORY_ENVIRONMENT" + ], + "default": "CATEGORY_UNSPECIFIED" + }, "authorizationEntityChain": { "type": "object", "properties": { @@ -275,23 +263,7 @@ "type": "string" } } - }, - "title": "Deprecated: use EntityEntitlementsV2 instead" - }, - "authorizationEntityEntitlementsV2": { - "type": "object", - "properties": { - "entityId": { - "type": "string" - }, - "actionsPerAttributeValueFqn": { - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/EntityEntitlementsV2ActionsList" - } - } - }, - "title": "Entitlements for a given entity, mapping each attribute value FQN to any entitled actions[]" + } }, "authorizationGetDecisionsByTokenResponse": { "type": "object", @@ -348,8 +320,7 @@ "type": "boolean", "title": "optional parameter to return a full list of entitlements - returns lower hierarchy attributes" } - }, - "title": "Deprecated: use GetEntitlementsV2Request instead" + } }, "authorizationGetEntitlementsResponse": { "type": "object", @@ -361,19 +332,6 @@ "$ref": "#/definitions/authorizationEntityEntitlements" } } - }, - "title": "Deprecated: use GetEntitlementsV2Request instead" - }, - "authorizationGetEntitlementsV2Response": { - "type": "object", - "properties": { - "entitlements": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/authorizationEntityEntitlementsV2" - } - } } }, "authorizationResourceAttribute": { diff --git a/docs/openapi/authorization/v2/authorization.swagger.json b/docs/openapi/authorization/v2/authorization.swagger.json new file mode 100644 index 0000000000..fe3e774efe --- /dev/null +++ b/docs/openapi/authorization/v2/authorization.swagger.json @@ -0,0 +1,429 @@ +{ + "swagger": "2.0", + "info": { + "title": "authorization/v2/authorization.proto", + "version": "version not set" + }, + "tags": [ + { + "name": "AuthorizationService" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/v1/authorization": { + "post": { + "operationId": "AuthorizationService_GetDecisions", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/authorizationv2GetDecisionsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/authorizationv2GetDecisionsRequest" + } + } + ], + "tags": [ + "AuthorizationService" + ] + } + }, + "/v1/token/authorization": { + "post": { + "operationId": "AuthorizationService_GetDecisionsByToken", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/authorizationv2GetDecisionsByTokenResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "AuthorizationService" + ] + } + } + }, + "definitions": { + "ActionStandardAction": { + "type": "string", + "enum": [ + "STANDARD_ACTION_UNSPECIFIED", + "STANDARD_ACTION_DECRYPT", + "STANDARD_ACTION_TRANSMIT" + ], + "default": "STANDARD_ACTION_UNSPECIFIED", + "title": "- STANDARD_ACTION_DECRYPT: Deprecated\nMigrate to 'read' action name\n - STANDARD_ACTION_TRANSMIT: Deprecated\nMigrate to 'create' action name" + }, + "EntityEntitlementsActionsList": { + "type": "object", + "properties": { + "actions": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/policyAction" + } + } + } + }, + "authorizationv2DecisionRequest": { + "type": "object", + "properties": { + "actions": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/policyAction" + } + }, + "entityChains": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/authorizationv2EntityChain" + } + }, + "resourceAttributes": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/authorizationv2ResourceAttribute" + } + } + }, + "description": "{\n\"actions\": [\n{\n\"standard\": \"STANDARD_ACTION_TRANSMIT\"\n}\n],\n\"entityChains\": [\n{\n\"id\": \"ec1\",\n\"entities\": [\n{\n\"emailAddress\": \"bob@example.org\"\n}\n]\n},\n{\n\"id\": \"ec2\",\n\"entities\": [\n{\n\"userName\": \"alice@example.org\"\n}\n]\n}\n],\n\"resourceAttributes\": [\n{\n\"resourceAttributeId\": \"attr-set-1\",\n\"attributeFqns\": [\n\"https://www.example.org/attr/foo/value/value1\"\n]\n},\n{\n\"resourceAttributeId\": \"attr-set-2\",\n\"attributeFqns\": [\n\"https://example.net/attr/attr1/value/value1\",\n\"https://example.net/attr/attr1/value/value2\"\n]\n}\n]\n}", + "title": "Example Request Get Decisions to answer the question - Do Bob (represented by entity chain ec1)\nand Alice (represented by entity chain ec2) have TRANSMIT authorization for\n2 resources; resource1 (attr-set-1) defined by attributes foo:bar resource2 (attr-set-2) defined by attribute foo:bar, color:red ?" + }, + "authorizationv2DecisionResponse": { + "type": "object", + "properties": { + "entityChainId": { + "type": "string", + "title": "ephemeral entity chain id from the request" + }, + "resourceAttributesId": { + "type": "string", + "title": "ephemeral resource attributes id from the request" + }, + "action": { + "$ref": "#/definitions/policyAction", + "title": "Action of the decision response" + }, + "decision": { + "$ref": "#/definitions/authorizationv2DecisionResponseDecision", + "title": "The decision response" + }, + "obligations": { + "type": "array", + "items": { + "type": "string" + }, + "title": "optional list of obligations represented in URI format" + } + }, + "description": "Results:\n- bob has permitted authorization to transmit for a resource defined by attr-set-1 attributes and has a watermark obligation\n- bob has denied authorization to transmit a for a resource defined by attr-set-2 attributes\n- alice has permitted authorization to transmit for a resource defined by attr-set-1 attributes\n- alice has denied authorization to transmit a for a resource defined by attr-set-2 attributes\n\n{\n\"entityChainId\": \"ec1\",\n\"resourceAttributesId\": \"attr-set-1\",\n\"decision\": \"DECISION_PERMIT\",\n\"obligations\": [\n\"http://www.example.org/obligation/watermark\"\n]\n},\n{\n\"entityChainId\": \"ec1\",\n\"resourceAttributesId\": \"attr-set-2\",\n\"decision\": \"DECISION_PERMIT\"\n},\n{\n\"entityChainId\": \"ec2\",\n\"resourceAttributesId\": \"attr-set-1\",\n\"decision\": \"DECISION_PERMIT\"\n},\n{\n\"entityChainId\": \"ec2\",\n\"resourceAttributesId\": \"attr-set-2\",\n\"decision\": \"DECISION_DENY\"\n}", + "title": "Example response for a Decision Request - Do Bob (represented by entity chain ec1)\nand Alice (represented by entity chain ec2) have TRANSMIT authorization for\n2 resources; resource1 (attr-set-1) defined by attributes foo:bar resource2 (attr-set-2) defined by attribute foo:bar, color:red ?" + }, + "authorizationv2DecisionResponseDecision": { + "type": "string", + "enum": [ + "DECISION_UNSPECIFIED", + "DECISION_DENY", + "DECISION_PERMIT" + ], + "default": "DECISION_UNSPECIFIED" + }, + "authorizationv2Entity": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "ephemeral id for tracking between request and response" + }, + "emailAddress": { + "type": "string", + "title": "one of the entity options must be set" + }, + "userName": { + "type": "string" + }, + "remoteClaimsUrl": { + "type": "string" + }, + "uuid": { + "type": "string" + }, + "claims": { + "$ref": "#/definitions/protobufAny" + }, + "custom": { + "$ref": "#/definitions/authorizationv2EntityCustom" + }, + "clientId": { + "type": "string" + }, + "category": { + "$ref": "#/definitions/authorizationv2EntityCategory" + } + }, + "title": "PE (Person Entity) or NPE (Non-Person Entity)" + }, + "authorizationv2EntityCategory": { + "type": "string", + "enum": [ + "CATEGORY_UNSPECIFIED", + "CATEGORY_SUBJECT", + "CATEGORY_ENVIRONMENT" + ], + "default": "CATEGORY_UNSPECIFIED" + }, + "authorizationv2EntityChain": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "ephemeral id for tracking between request and response" + }, + "entities": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/authorizationv2Entity" + } + } + }, + "title": "A set of related PE and NPE" + }, + "authorizationv2EntityCustom": { + "type": "object", + "properties": { + "extension": { + "$ref": "#/definitions/protobufAny" + } + }, + "title": "Entity type for custom entities beyond the standard types" + }, + "authorizationv2EntityEntitlements": { + "type": "object", + "properties": { + "entityId": { + "type": "string" + }, + "actionsPerAttributeValueFqn": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/EntityEntitlementsActionsList" + } + } + }, + "title": "Entitlements for a given entity, mapping each attribute value FQN to any entitled actions[]" + }, + "authorizationv2GetDecisionsByTokenResponse": { + "type": "object", + "properties": { + "decisionResponses": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/authorizationv2DecisionResponse" + } + } + } + }, + "authorizationv2GetDecisionsRequest": { + "type": "object", + "properties": { + "decisionRequests": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/authorizationv2DecisionRequest" + } + } + } + }, + "authorizationv2GetDecisionsResponse": { + "type": "object", + "properties": { + "decisionResponses": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/authorizationv2DecisionResponse" + } + } + } + }, + "authorizationv2GetEntitlementsResponse": { + "type": "object", + "properties": { + "entitlements": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/authorizationv2EntityEntitlements" + } + } + } + }, + "authorizationv2ResourceAttribute": { + "type": "object", + "properties": { + "resourceAttributesId": { + "type": "string" + }, + "attributeValueFqns": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "title": "A logical bucket of attributes belonging to a \"Resource\"" + }, + "authorizationv2Token": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "ephemeral id for tracking between request and response" + }, + "jwt": { + "type": "string", + "title": "the token" + } + } + }, + "authorizationv2TokenDecisionRequest": { + "type": "object", + "properties": { + "actions": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/policyAction" + } + }, + "tokens": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/authorizationv2Token" + } + }, + "resourceAttributes": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/authorizationv2ResourceAttribute" + } + } + } + }, + "commonMetadata": { + "type": "object", + "properties": { + "createdAt": { + "type": "string", + "format": "date-time", + "title": "created_at set by server (entity who created will recorded in an audit event)" + }, + "updatedAt": { + "type": "string", + "format": "date-time", + "title": "updated_at set by server (entity who updated will recorded in an audit event)" + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "title": "optional short description" + } + }, + "title": "Struct to uniquely identify a resource with optional additional metadata" + }, + "policyAction": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "Generated uuid in database" + }, + "standard": { + "$ref": "#/definitions/ActionStandardAction", + "title": "Deprecated" + }, + "custom": { + "type": "string", + "title": "Deprecated" + }, + "name": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/commonMetadata" + } + }, + "title": "An action an entity can take" + }, + "protobufAny": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." + } + }, + "additionalProperties": {}, + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + }, + "rpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/protobufAny" + } + } + } + } + } +} diff --git a/docs/openapi/entityresolution/entity_resolution.swagger.json b/docs/openapi/entityresolution/entity_resolution.swagger.json index 45cb881517..8e179b635f 100644 --- a/docs/openapi/entityresolution/entity_resolution.swagger.json +++ b/docs/openapi/entityresolution/entity_resolution.swagger.json @@ -82,15 +82,6 @@ } }, "definitions": { - "EntityCategory": { - "type": "string", - "enum": [ - "CATEGORY_UNSPECIFIED", - "CATEGORY_SUBJECT", - "CATEGORY_ENVIRONMENT" - ], - "default": "CATEGORY_UNSPECIFIED" - }, "authorizationEntity": { "type": "object", "properties": { @@ -121,11 +112,20 @@ "type": "string" }, "category": { - "$ref": "#/definitions/EntityCategory" + "$ref": "#/definitions/authorizationEntityCategory" } }, "title": "PE (Person Entity) or NPE (Non-Person Entity)" }, + "authorizationEntityCategory": { + "type": "string", + "enum": [ + "CATEGORY_UNSPECIFIED", + "CATEGORY_SUBJECT", + "CATEGORY_ENVIRONMENT" + ], + "default": "CATEGORY_UNSPECIFIED" + }, "authorizationEntityChain": { "type": "object", "properties": { diff --git a/protocol/go/authorization/authorization.pb.go b/protocol/go/authorization/authorization.pb.go index 663c1e8e2c..4740cde29e 100644 --- a/protocol/go/authorization/authorization.pb.go +++ b/protocol/go/authorization/authorization.pb.go @@ -764,7 +764,6 @@ func (x *GetDecisionsResponse) GetDecisionResponses() []*DecisionResponse { return nil } -// Deprecated: use GetEntitlementsV2Request instead type GetEntitlementsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -831,73 +830,6 @@ func (x *GetEntitlementsRequest) GetWithComprehensiveHierarchy() bool { return false } -type GetEntitlementsV2Request struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // list of requested entities - Entities []*Entity `protobuf:"bytes,1,rep,name=entities,proto3" json:"entities,omitempty"` - // optional attribute fqn as a scope - Scope *ResourceAttribute `protobuf:"bytes,2,opt,name=scope,proto3,oneof" json:"scope,omitempty"` - // optional parameter to return a full list of entitlements - returns lower hierarchy attributes - WithComprehensiveHierarchy *bool `protobuf:"varint,3,opt,name=with_comprehensive_hierarchy,json=withComprehensiveHierarchy,proto3,oneof" json:"with_comprehensive_hierarchy,omitempty"` -} - -func (x *GetEntitlementsV2Request) Reset() { - *x = GetEntitlementsV2Request{} - if protoimpl.UnsafeEnabled { - mi := &file_authorization_authorization_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetEntitlementsV2Request) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetEntitlementsV2Request) ProtoMessage() {} - -func (x *GetEntitlementsV2Request) ProtoReflect() protoreflect.Message { - mi := &file_authorization_authorization_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetEntitlementsV2Request.ProtoReflect.Descriptor instead. -func (*GetEntitlementsV2Request) Descriptor() ([]byte, []int) { - return file_authorization_authorization_proto_rawDescGZIP(), []int{9} -} - -func (x *GetEntitlementsV2Request) GetEntities() []*Entity { - if x != nil { - return x.Entities - } - return nil -} - -func (x *GetEntitlementsV2Request) GetScope() *ResourceAttribute { - if x != nil { - return x.Scope - } - return nil -} - -func (x *GetEntitlementsV2Request) GetWithComprehensiveHierarchy() bool { - if x != nil && x.WithComprehensiveHierarchy != nil { - return *x.WithComprehensiveHierarchy - } - return false -} - -// Deprecated: use EntityEntitlementsV2 instead type EntityEntitlements struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -910,7 +842,7 @@ type EntityEntitlements struct { func (x *EntityEntitlements) Reset() { *x = EntityEntitlements{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_authorization_proto_msgTypes[10] + mi := &file_authorization_authorization_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -923,7 +855,7 @@ func (x *EntityEntitlements) String() string { func (*EntityEntitlements) ProtoMessage() {} func (x *EntityEntitlements) ProtoReflect() protoreflect.Message { - mi := &file_authorization_authorization_proto_msgTypes[10] + mi := &file_authorization_authorization_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -936,7 +868,7 @@ func (x *EntityEntitlements) ProtoReflect() protoreflect.Message { // Deprecated: Use EntityEntitlements.ProtoReflect.Descriptor instead. func (*EntityEntitlements) Descriptor() ([]byte, []int) { - return file_authorization_authorization_proto_rawDescGZIP(), []int{10} + return file_authorization_authorization_proto_rawDescGZIP(), []int{9} } func (x *EntityEntitlements) GetEntityId() string { @@ -953,62 +885,6 @@ func (x *EntityEntitlements) GetAttributeValueFqns() []string { return nil } -// Entitlements for a given entity, mapping each attribute value FQN to any entitled actions[] -type EntityEntitlementsV2 struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - EntityId string `protobuf:"bytes,1,opt,name=entity_id,json=entityId,proto3" json:"entity_id,omitempty"` - ActionsPerAttributeValueFqn map[string]*EntityEntitlementsV2_ActionsList `protobuf:"bytes,2,rep,name=actions_per_attribute_value_fqn,json=actionsPerAttributeValueFqn,proto3" json:"actions_per_attribute_value_fqn,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *EntityEntitlementsV2) Reset() { - *x = EntityEntitlementsV2{} - if protoimpl.UnsafeEnabled { - mi := &file_authorization_authorization_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *EntityEntitlementsV2) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*EntityEntitlementsV2) ProtoMessage() {} - -func (x *EntityEntitlementsV2) ProtoReflect() protoreflect.Message { - mi := &file_authorization_authorization_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use EntityEntitlementsV2.ProtoReflect.Descriptor instead. -func (*EntityEntitlementsV2) Descriptor() ([]byte, []int) { - return file_authorization_authorization_proto_rawDescGZIP(), []int{11} -} - -func (x *EntityEntitlementsV2) GetEntityId() string { - if x != nil { - return x.EntityId - } - return "" -} - -func (x *EntityEntitlementsV2) GetActionsPerAttributeValueFqn() map[string]*EntityEntitlementsV2_ActionsList { - if x != nil { - return x.ActionsPerAttributeValueFqn - } - return nil -} - // A logical bucket of attributes belonging to a "Resource" type ResourceAttribute struct { state protoimpl.MessageState @@ -1022,7 +898,7 @@ type ResourceAttribute struct { func (x *ResourceAttribute) Reset() { *x = ResourceAttribute{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_authorization_proto_msgTypes[12] + mi := &file_authorization_authorization_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1035,7 +911,7 @@ func (x *ResourceAttribute) String() string { func (*ResourceAttribute) ProtoMessage() {} func (x *ResourceAttribute) ProtoReflect() protoreflect.Message { - mi := &file_authorization_authorization_proto_msgTypes[12] + mi := &file_authorization_authorization_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1048,7 +924,7 @@ func (x *ResourceAttribute) ProtoReflect() protoreflect.Message { // Deprecated: Use ResourceAttribute.ProtoReflect.Descriptor instead. func (*ResourceAttribute) Descriptor() ([]byte, []int) { - return file_authorization_authorization_proto_rawDescGZIP(), []int{12} + return file_authorization_authorization_proto_rawDescGZIP(), []int{10} } func (x *ResourceAttribute) GetResourceAttributesId() string { @@ -1065,7 +941,6 @@ func (x *ResourceAttribute) GetAttributeValueFqns() []string { return nil } -// Deprecated: use GetEntitlementsV2Request instead type GetEntitlementsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1077,7 +952,7 @@ type GetEntitlementsResponse struct { func (x *GetEntitlementsResponse) Reset() { *x = GetEntitlementsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_authorization_proto_msgTypes[13] + mi := &file_authorization_authorization_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1090,7 +965,7 @@ func (x *GetEntitlementsResponse) String() string { func (*GetEntitlementsResponse) ProtoMessage() {} func (x *GetEntitlementsResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorization_authorization_proto_msgTypes[13] + mi := &file_authorization_authorization_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1103,7 +978,7 @@ func (x *GetEntitlementsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetEntitlementsResponse.ProtoReflect.Descriptor instead. func (*GetEntitlementsResponse) Descriptor() ([]byte, []int) { - return file_authorization_authorization_proto_rawDescGZIP(), []int{13} + return file_authorization_authorization_proto_rawDescGZIP(), []int{11} } func (x *GetEntitlementsResponse) GetEntitlements() []*EntityEntitlements { @@ -1113,53 +988,6 @@ func (x *GetEntitlementsResponse) GetEntitlements() []*EntityEntitlements { return nil } -type GetEntitlementsV2Response struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Entitlements []*EntityEntitlementsV2 `protobuf:"bytes,1,rep,name=entitlements,proto3" json:"entitlements,omitempty"` -} - -func (x *GetEntitlementsV2Response) Reset() { - *x = GetEntitlementsV2Response{} - if protoimpl.UnsafeEnabled { - mi := &file_authorization_authorization_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetEntitlementsV2Response) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetEntitlementsV2Response) ProtoMessage() {} - -func (x *GetEntitlementsV2Response) ProtoReflect() protoreflect.Message { - mi := &file_authorization_authorization_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetEntitlementsV2Response.ProtoReflect.Descriptor instead. -func (*GetEntitlementsV2Response) Descriptor() ([]byte, []int) { - return file_authorization_authorization_proto_rawDescGZIP(), []int{14} -} - -func (x *GetEntitlementsV2Response) GetEntitlements() []*EntityEntitlementsV2 { - if x != nil { - return x.Entitlements - } - return nil -} - // Example Request Get Decisions by Token to answer the question - Do Bob and client1 (represented by token tok1) // and Alice and client2 (represented by token tok2) have TRANSMIT authorization for // 2 resources; resource1 (attr-set-1) defined by attributes foo:bar resource2 (attr-set-2) defined by attribute foo:bar, color:red ? @@ -1207,7 +1035,7 @@ type TokenDecisionRequest struct { func (x *TokenDecisionRequest) Reset() { *x = TokenDecisionRequest{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_authorization_proto_msgTypes[15] + mi := &file_authorization_authorization_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1220,7 +1048,7 @@ func (x *TokenDecisionRequest) String() string { func (*TokenDecisionRequest) ProtoMessage() {} func (x *TokenDecisionRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorization_authorization_proto_msgTypes[15] + mi := &file_authorization_authorization_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1233,7 +1061,7 @@ func (x *TokenDecisionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TokenDecisionRequest.ProtoReflect.Descriptor instead. func (*TokenDecisionRequest) Descriptor() ([]byte, []int) { - return file_authorization_authorization_proto_rawDescGZIP(), []int{15} + return file_authorization_authorization_proto_rawDescGZIP(), []int{12} } func (x *TokenDecisionRequest) GetActions() []*policy.Action { @@ -1268,7 +1096,7 @@ type GetDecisionsByTokenRequest struct { func (x *GetDecisionsByTokenRequest) Reset() { *x = GetDecisionsByTokenRequest{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_authorization_proto_msgTypes[16] + mi := &file_authorization_authorization_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1281,7 +1109,7 @@ func (x *GetDecisionsByTokenRequest) String() string { func (*GetDecisionsByTokenRequest) ProtoMessage() {} func (x *GetDecisionsByTokenRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorization_authorization_proto_msgTypes[16] + mi := &file_authorization_authorization_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1294,7 +1122,7 @@ func (x *GetDecisionsByTokenRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDecisionsByTokenRequest.ProtoReflect.Descriptor instead. func (*GetDecisionsByTokenRequest) Descriptor() ([]byte, []int) { - return file_authorization_authorization_proto_rawDescGZIP(), []int{16} + return file_authorization_authorization_proto_rawDescGZIP(), []int{13} } func (x *GetDecisionsByTokenRequest) GetDecisionRequests() []*TokenDecisionRequest { @@ -1315,7 +1143,7 @@ type GetDecisionsByTokenResponse struct { func (x *GetDecisionsByTokenResponse) Reset() { *x = GetDecisionsByTokenResponse{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_authorization_proto_msgTypes[17] + mi := &file_authorization_authorization_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1328,7 +1156,7 @@ func (x *GetDecisionsByTokenResponse) String() string { func (*GetDecisionsByTokenResponse) ProtoMessage() {} func (x *GetDecisionsByTokenResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorization_authorization_proto_msgTypes[17] + mi := &file_authorization_authorization_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1341,7 +1169,7 @@ func (x *GetDecisionsByTokenResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDecisionsByTokenResponse.ProtoReflect.Descriptor instead. func (*GetDecisionsByTokenResponse) Descriptor() ([]byte, []int) { - return file_authorization_authorization_proto_rawDescGZIP(), []int{17} + return file_authorization_authorization_proto_rawDescGZIP(), []int{14} } func (x *GetDecisionsByTokenResponse) GetDecisionResponses() []*DecisionResponse { @@ -1351,53 +1179,6 @@ func (x *GetDecisionsByTokenResponse) GetDecisionResponses() []*DecisionResponse return nil } -type EntityEntitlementsV2_ActionsList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Actions []*policy.Action `protobuf:"bytes,1,rep,name=actions,proto3" json:"actions,omitempty"` -} - -func (x *EntityEntitlementsV2_ActionsList) Reset() { - *x = EntityEntitlementsV2_ActionsList{} - if protoimpl.UnsafeEnabled { - mi := &file_authorization_authorization_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *EntityEntitlementsV2_ActionsList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*EntityEntitlementsV2_ActionsList) ProtoMessage() {} - -func (x *EntityEntitlementsV2_ActionsList) ProtoReflect() protoreflect.Message { - mi := &file_authorization_authorization_proto_msgTypes[18] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use EntityEntitlementsV2_ActionsList.ProtoReflect.Descriptor instead. -func (*EntityEntitlementsV2_ActionsList) Descriptor() ([]byte, []int) { - return file_authorization_authorization_proto_rawDescGZIP(), []int{11, 0} -} - -func (x *EntityEntitlementsV2_ActionsList) GetActions() []*policy.Action { - if x != nil { - return x.Actions - } - return nil -} - var File_authorization_authorization_proto protoreflect.FileDescriptor var file_authorization_authorization_proto_rawDesc = []byte{ @@ -1512,144 +1293,91 @@ var file_authorization_authorization_proto_rawDesc = []byte{ 0x69, 0x76, 0x65, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x42, 0x1f, 0x0a, 0x1d, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, - 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x22, 0xfc, 0x01, 0x0a, 0x18, 0x47, - 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x56, 0x32, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x3b, 0x0a, 0x05, 0x73, 0x63, - 0x6f, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x48, 0x00, 0x52, 0x05, 0x73, - 0x63, 0x6f, 0x70, 0x65, 0x88, 0x01, 0x01, 0x12, 0x45, 0x0a, 0x1c, 0x77, 0x69, 0x74, 0x68, 0x5f, - 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, - 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, - 0x1a, 0x77, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, - 0x76, 0x65, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x88, 0x01, 0x01, 0x42, 0x08, - 0x0a, 0x06, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x42, 0x1f, 0x0a, 0x1d, 0x5f, 0x77, 0x69, 0x74, - 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, - 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x22, 0x63, 0x0a, 0x12, 0x45, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, - 0x1b, 0x0a, 0x09, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, - 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, - 0x66, 0x71, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x61, 0x74, 0x74, 0x72, - 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x73, 0x22, 0xfa, - 0x02, 0x0a, 0x14, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x56, 0x32, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x49, 0x64, 0x12, 0x8a, 0x01, 0x0a, 0x1f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, - 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x56, 0x32, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x1b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, - 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, - 0x6e, 0x1a, 0x37, 0x0a, 0x0b, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, 0x74, - 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x7f, 0x0a, 0x20, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x45, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2f, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x56, 0x32, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x7b, 0x0a, 0x11, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, - 0x12, 0x34, 0x0a, 0x16, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x74, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x14, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x65, 0x73, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x73, 0x22, 0x60, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x45, - 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x0c, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x64, 0x0a, 0x19, 0x47, 0x65, - 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x56, 0x32, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x47, 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, + 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x22, 0x63, 0x0a, 0x12, 0x45, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x12, 0x30, 0x0a, + 0x14, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x5f, 0x66, 0x71, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x61, 0x74, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x73, 0x22, + 0x7b, 0x0a, 0x11, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x61, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, + 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x73, 0x22, 0x60, 0x0a, 0x17, + 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x56, 0x32, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x22, 0xc1, 0x01, 0x0a, 0x14, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x2c, 0x0a, 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, - 0x73, 0x12, 0x51, 0x0a, 0x13, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x74, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, - 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, - 0x52, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x65, 0x73, 0x22, 0x6e, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x50, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x73, 0x22, 0x6d, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, - 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x1f, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x73, 0x32, 0x86, 0x04, 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x75, 0x0a, 0x0c, - 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x22, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, - 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x23, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x3a, 0x01, 0x2a, - 0x22, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x8d, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x29, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x44, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x7d, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, - 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x3a, 0x01, 0x2a, - 0x22, 0x10, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x12, 0x68, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x56, 0x32, 0x12, 0x27, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, - 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xb2, 0x01, 0x0a, - 0x11, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x42, 0x12, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x35, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, - 0x6f, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0xa2, - 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0xca, 0x02, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0xe2, 0x02, 0x19, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0xea, 0x02, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xc1, + 0x01, 0x0a, 0x14, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x2c, 0x0a, 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, + 0x51, 0x0a, 0x13, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x74, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x12, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x65, 0x73, 0x22, 0x6e, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x50, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x73, 0x22, 0x6d, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x4e, 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x11, + 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x73, 0x32, 0x9c, 0x03, 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x75, 0x0a, 0x0c, 0x47, 0x65, + 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x22, 0x2e, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, + 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, + 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x3a, 0x01, 0x2a, 0x22, 0x11, + 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x8d, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x7d, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x45, + 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x3a, 0x01, 0x2a, 0x22, 0x10, + 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x42, 0xb2, 0x01, 0x0a, 0x11, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x12, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x35, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, + 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, + 0x6f, 0x6c, 0x2f, 0x67, 0x6f, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x0d, 0x41, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0xca, 0x02, 0x0d, 0x41, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0xe2, 0x02, 0x19, 0x41, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1665,73 +1393,60 @@ func file_authorization_authorization_proto_rawDescGZIP() []byte { } var file_authorization_authorization_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_authorization_authorization_proto_msgTypes = make([]protoimpl.MessageInfo, 20) +var file_authorization_authorization_proto_msgTypes = make([]protoimpl.MessageInfo, 15) var file_authorization_authorization_proto_goTypes = []interface{}{ - (Entity_Category)(0), // 0: authorization.Entity.Category - (DecisionResponse_Decision)(0), // 1: authorization.DecisionResponse.Decision - (*Token)(nil), // 2: authorization.Token - (*Entity)(nil), // 3: authorization.Entity - (*EntityCustom)(nil), // 4: authorization.EntityCustom - (*EntityChain)(nil), // 5: authorization.EntityChain - (*DecisionRequest)(nil), // 6: authorization.DecisionRequest - (*DecisionResponse)(nil), // 7: authorization.DecisionResponse - (*GetDecisionsRequest)(nil), // 8: authorization.GetDecisionsRequest - (*GetDecisionsResponse)(nil), // 9: authorization.GetDecisionsResponse - (*GetEntitlementsRequest)(nil), // 10: authorization.GetEntitlementsRequest - (*GetEntitlementsV2Request)(nil), // 11: authorization.GetEntitlementsV2Request - (*EntityEntitlements)(nil), // 12: authorization.EntityEntitlements - (*EntityEntitlementsV2)(nil), // 13: authorization.EntityEntitlementsV2 - (*ResourceAttribute)(nil), // 14: authorization.ResourceAttribute - (*GetEntitlementsResponse)(nil), // 15: authorization.GetEntitlementsResponse - (*GetEntitlementsV2Response)(nil), // 16: authorization.GetEntitlementsV2Response - (*TokenDecisionRequest)(nil), // 17: authorization.TokenDecisionRequest - (*GetDecisionsByTokenRequest)(nil), // 18: authorization.GetDecisionsByTokenRequest - (*GetDecisionsByTokenResponse)(nil), // 19: authorization.GetDecisionsByTokenResponse - (*EntityEntitlementsV2_ActionsList)(nil), // 20: authorization.EntityEntitlementsV2.ActionsList - nil, // 21: authorization.EntityEntitlementsV2.ActionsPerAttributeValueFqnEntry - (*anypb.Any)(nil), // 22: google.protobuf.Any - (*policy.Action)(nil), // 23: policy.Action + (Entity_Category)(0), // 0: authorization.Entity.Category + (DecisionResponse_Decision)(0), // 1: authorization.DecisionResponse.Decision + (*Token)(nil), // 2: authorization.Token + (*Entity)(nil), // 3: authorization.Entity + (*EntityCustom)(nil), // 4: authorization.EntityCustom + (*EntityChain)(nil), // 5: authorization.EntityChain + (*DecisionRequest)(nil), // 6: authorization.DecisionRequest + (*DecisionResponse)(nil), // 7: authorization.DecisionResponse + (*GetDecisionsRequest)(nil), // 8: authorization.GetDecisionsRequest + (*GetDecisionsResponse)(nil), // 9: authorization.GetDecisionsResponse + (*GetEntitlementsRequest)(nil), // 10: authorization.GetEntitlementsRequest + (*EntityEntitlements)(nil), // 11: authorization.EntityEntitlements + (*ResourceAttribute)(nil), // 12: authorization.ResourceAttribute + (*GetEntitlementsResponse)(nil), // 13: authorization.GetEntitlementsResponse + (*TokenDecisionRequest)(nil), // 14: authorization.TokenDecisionRequest + (*GetDecisionsByTokenRequest)(nil), // 15: authorization.GetDecisionsByTokenRequest + (*GetDecisionsByTokenResponse)(nil), // 16: authorization.GetDecisionsByTokenResponse + (*anypb.Any)(nil), // 17: google.protobuf.Any + (*policy.Action)(nil), // 18: policy.Action } var file_authorization_authorization_proto_depIdxs = []int32{ - 22, // 0: authorization.Entity.claims:type_name -> google.protobuf.Any + 17, // 0: authorization.Entity.claims:type_name -> google.protobuf.Any 4, // 1: authorization.Entity.custom:type_name -> authorization.EntityCustom 0, // 2: authorization.Entity.category:type_name -> authorization.Entity.Category - 22, // 3: authorization.EntityCustom.extension:type_name -> google.protobuf.Any + 17, // 3: authorization.EntityCustom.extension:type_name -> google.protobuf.Any 3, // 4: authorization.EntityChain.entities:type_name -> authorization.Entity - 23, // 5: authorization.DecisionRequest.actions:type_name -> policy.Action + 18, // 5: authorization.DecisionRequest.actions:type_name -> policy.Action 5, // 6: authorization.DecisionRequest.entity_chains:type_name -> authorization.EntityChain - 14, // 7: authorization.DecisionRequest.resource_attributes:type_name -> authorization.ResourceAttribute - 23, // 8: authorization.DecisionResponse.action:type_name -> policy.Action + 12, // 7: authorization.DecisionRequest.resource_attributes:type_name -> authorization.ResourceAttribute + 18, // 8: authorization.DecisionResponse.action:type_name -> policy.Action 1, // 9: authorization.DecisionResponse.decision:type_name -> authorization.DecisionResponse.Decision 6, // 10: authorization.GetDecisionsRequest.decision_requests:type_name -> authorization.DecisionRequest 7, // 11: authorization.GetDecisionsResponse.decision_responses:type_name -> authorization.DecisionResponse 3, // 12: authorization.GetEntitlementsRequest.entities:type_name -> authorization.Entity - 14, // 13: authorization.GetEntitlementsRequest.scope:type_name -> authorization.ResourceAttribute - 3, // 14: authorization.GetEntitlementsV2Request.entities:type_name -> authorization.Entity - 14, // 15: authorization.GetEntitlementsV2Request.scope:type_name -> authorization.ResourceAttribute - 21, // 16: authorization.EntityEntitlementsV2.actions_per_attribute_value_fqn:type_name -> authorization.EntityEntitlementsV2.ActionsPerAttributeValueFqnEntry - 12, // 17: authorization.GetEntitlementsResponse.entitlements:type_name -> authorization.EntityEntitlements - 13, // 18: authorization.GetEntitlementsV2Response.entitlements:type_name -> authorization.EntityEntitlementsV2 - 23, // 19: authorization.TokenDecisionRequest.actions:type_name -> policy.Action - 2, // 20: authorization.TokenDecisionRequest.tokens:type_name -> authorization.Token - 14, // 21: authorization.TokenDecisionRequest.resource_attributes:type_name -> authorization.ResourceAttribute - 17, // 22: authorization.GetDecisionsByTokenRequest.decision_requests:type_name -> authorization.TokenDecisionRequest - 7, // 23: authorization.GetDecisionsByTokenResponse.decision_responses:type_name -> authorization.DecisionResponse - 23, // 24: authorization.EntityEntitlementsV2.ActionsList.actions:type_name -> policy.Action - 20, // 25: authorization.EntityEntitlementsV2.ActionsPerAttributeValueFqnEntry.value:type_name -> authorization.EntityEntitlementsV2.ActionsList - 8, // 26: authorization.AuthorizationService.GetDecisions:input_type -> authorization.GetDecisionsRequest - 18, // 27: authorization.AuthorizationService.GetDecisionsByToken:input_type -> authorization.GetDecisionsByTokenRequest - 10, // 28: authorization.AuthorizationService.GetEntitlements:input_type -> authorization.GetEntitlementsRequest - 11, // 29: authorization.AuthorizationService.GetEntitlementsV2:input_type -> authorization.GetEntitlementsV2Request - 9, // 30: authorization.AuthorizationService.GetDecisions:output_type -> authorization.GetDecisionsResponse - 19, // 31: authorization.AuthorizationService.GetDecisionsByToken:output_type -> authorization.GetDecisionsByTokenResponse - 15, // 32: authorization.AuthorizationService.GetEntitlements:output_type -> authorization.GetEntitlementsResponse - 16, // 33: authorization.AuthorizationService.GetEntitlementsV2:output_type -> authorization.GetEntitlementsV2Response - 30, // [30:34] is the sub-list for method output_type - 26, // [26:30] is the sub-list for method input_type - 26, // [26:26] is the sub-list for extension type_name - 26, // [26:26] is the sub-list for extension extendee - 0, // [0:26] is the sub-list for field type_name + 12, // 13: authorization.GetEntitlementsRequest.scope:type_name -> authorization.ResourceAttribute + 11, // 14: authorization.GetEntitlementsResponse.entitlements:type_name -> authorization.EntityEntitlements + 18, // 15: authorization.TokenDecisionRequest.actions:type_name -> policy.Action + 2, // 16: authorization.TokenDecisionRequest.tokens:type_name -> authorization.Token + 12, // 17: authorization.TokenDecisionRequest.resource_attributes:type_name -> authorization.ResourceAttribute + 14, // 18: authorization.GetDecisionsByTokenRequest.decision_requests:type_name -> authorization.TokenDecisionRequest + 7, // 19: authorization.GetDecisionsByTokenResponse.decision_responses:type_name -> authorization.DecisionResponse + 8, // 20: authorization.AuthorizationService.GetDecisions:input_type -> authorization.GetDecisionsRequest + 15, // 21: authorization.AuthorizationService.GetDecisionsByToken:input_type -> authorization.GetDecisionsByTokenRequest + 10, // 22: authorization.AuthorizationService.GetEntitlements:input_type -> authorization.GetEntitlementsRequest + 9, // 23: authorization.AuthorizationService.GetDecisions:output_type -> authorization.GetDecisionsResponse + 16, // 24: authorization.AuthorizationService.GetDecisionsByToken:output_type -> authorization.GetDecisionsByTokenResponse + 13, // 25: authorization.AuthorizationService.GetEntitlements:output_type -> authorization.GetEntitlementsResponse + 23, // [23:26] is the sub-list for method output_type + 20, // [20:23] is the sub-list for method input_type + 20, // [20:20] is the sub-list for extension type_name + 20, // [20:20] is the sub-list for extension extendee + 0, // [0:20] is the sub-list for field type_name } func init() { file_authorization_authorization_proto_init() } @@ -1849,18 +1564,6 @@ func file_authorization_authorization_proto_init() { } } file_authorization_authorization_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetEntitlementsV2Request); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_authorization_authorization_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EntityEntitlements); i { case 0: return &v.state @@ -1872,19 +1575,7 @@ func file_authorization_authorization_proto_init() { return nil } } - file_authorization_authorization_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EntityEntitlementsV2); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_authorization_authorization_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_authorization_authorization_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ResourceAttribute); i { case 0: return &v.state @@ -1896,7 +1587,7 @@ func file_authorization_authorization_proto_init() { return nil } } - file_authorization_authorization_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_authorization_authorization_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetEntitlementsResponse); i { case 0: return &v.state @@ -1908,19 +1599,7 @@ func file_authorization_authorization_proto_init() { return nil } } - file_authorization_authorization_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetEntitlementsV2Response); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_authorization_authorization_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_authorization_authorization_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TokenDecisionRequest); i { case 0: return &v.state @@ -1932,7 +1611,7 @@ func file_authorization_authorization_proto_init() { return nil } } - file_authorization_authorization_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_authorization_authorization_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetDecisionsByTokenRequest); i { case 0: return &v.state @@ -1944,7 +1623,7 @@ func file_authorization_authorization_proto_init() { return nil } } - file_authorization_authorization_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_authorization_authorization_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetDecisionsByTokenResponse); i { case 0: return &v.state @@ -1956,18 +1635,6 @@ func file_authorization_authorization_proto_init() { return nil } } - file_authorization_authorization_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EntityEntitlementsV2_ActionsList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } } file_authorization_authorization_proto_msgTypes[1].OneofWrappers = []interface{}{ (*Entity_EmailAddress)(nil), @@ -1979,14 +1646,13 @@ func file_authorization_authorization_proto_init() { (*Entity_ClientId)(nil), } file_authorization_authorization_proto_msgTypes[8].OneofWrappers = []interface{}{} - file_authorization_authorization_proto_msgTypes[9].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_authorization_authorization_proto_rawDesc, NumEnums: 2, - NumMessages: 20, + NumMessages: 15, NumExtensions: 0, NumServices: 1, }, diff --git a/protocol/go/authorization/authorization_grpc.pb.go b/protocol/go/authorization/authorization_grpc.pb.go index 7096ce89e1..ec4e9c9dce 100644 --- a/protocol/go/authorization/authorization_grpc.pb.go +++ b/protocol/go/authorization/authorization_grpc.pb.go @@ -22,7 +22,6 @@ const ( AuthorizationService_GetDecisions_FullMethodName = "/authorization.AuthorizationService/GetDecisions" AuthorizationService_GetDecisionsByToken_FullMethodName = "/authorization.AuthorizationService/GetDecisionsByToken" AuthorizationService_GetEntitlements_FullMethodName = "/authorization.AuthorizationService/GetEntitlements" - AuthorizationService_GetEntitlementsV2_FullMethodName = "/authorization.AuthorizationService/GetEntitlementsV2" ) // AuthorizationServiceClient is the client API for AuthorizationService service. @@ -32,7 +31,6 @@ type AuthorizationServiceClient interface { GetDecisions(ctx context.Context, in *GetDecisionsRequest, opts ...grpc.CallOption) (*GetDecisionsResponse, error) GetDecisionsByToken(ctx context.Context, in *GetDecisionsByTokenRequest, opts ...grpc.CallOption) (*GetDecisionsByTokenResponse, error) GetEntitlements(ctx context.Context, in *GetEntitlementsRequest, opts ...grpc.CallOption) (*GetEntitlementsResponse, error) - GetEntitlementsV2(ctx context.Context, in *GetEntitlementsV2Request, opts ...grpc.CallOption) (*GetEntitlementsV2Response, error) } type authorizationServiceClient struct { @@ -70,15 +68,6 @@ func (c *authorizationServiceClient) GetEntitlements(ctx context.Context, in *Ge return out, nil } -func (c *authorizationServiceClient) GetEntitlementsV2(ctx context.Context, in *GetEntitlementsV2Request, opts ...grpc.CallOption) (*GetEntitlementsV2Response, error) { - out := new(GetEntitlementsV2Response) - err := c.cc.Invoke(ctx, AuthorizationService_GetEntitlementsV2_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - // AuthorizationServiceServer is the server API for AuthorizationService service. // All implementations must embed UnimplementedAuthorizationServiceServer // for forward compatibility @@ -86,7 +75,6 @@ type AuthorizationServiceServer interface { GetDecisions(context.Context, *GetDecisionsRequest) (*GetDecisionsResponse, error) GetDecisionsByToken(context.Context, *GetDecisionsByTokenRequest) (*GetDecisionsByTokenResponse, error) GetEntitlements(context.Context, *GetEntitlementsRequest) (*GetEntitlementsResponse, error) - GetEntitlementsV2(context.Context, *GetEntitlementsV2Request) (*GetEntitlementsV2Response, error) mustEmbedUnimplementedAuthorizationServiceServer() } @@ -103,9 +91,6 @@ func (UnimplementedAuthorizationServiceServer) GetDecisionsByToken(context.Conte func (UnimplementedAuthorizationServiceServer) GetEntitlements(context.Context, *GetEntitlementsRequest) (*GetEntitlementsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetEntitlements not implemented") } -func (UnimplementedAuthorizationServiceServer) GetEntitlementsV2(context.Context, *GetEntitlementsV2Request) (*GetEntitlementsV2Response, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetEntitlementsV2 not implemented") -} func (UnimplementedAuthorizationServiceServer) mustEmbedUnimplementedAuthorizationServiceServer() {} // UnsafeAuthorizationServiceServer may be embedded to opt out of forward compatibility for this service. @@ -173,24 +158,6 @@ func _AuthorizationService_GetEntitlements_Handler(srv interface{}, ctx context. return interceptor(ctx, in, info, handler) } -func _AuthorizationService_GetEntitlementsV2_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetEntitlementsV2Request) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizationServiceServer).GetEntitlementsV2(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizationService_GetEntitlementsV2_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizationServiceServer).GetEntitlementsV2(ctx, req.(*GetEntitlementsV2Request)) - } - return interceptor(ctx, in, info, handler) -} - // AuthorizationService_ServiceDesc is the grpc.ServiceDesc for AuthorizationService service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -210,10 +177,6 @@ var AuthorizationService_ServiceDesc = grpc.ServiceDesc{ MethodName: "GetEntitlements", Handler: _AuthorizationService_GetEntitlements_Handler, }, - { - MethodName: "GetEntitlementsV2", - Handler: _AuthorizationService_GetEntitlementsV2_Handler, - }, }, Streams: []grpc.StreamDesc{}, Metadata: "authorization/authorization.proto", diff --git a/protocol/go/authorization/authorizationconnect/authorization.connect.go b/protocol/go/authorization/authorizationconnect/authorization.connect.go index d318792cfb..dd5efadb4d 100644 --- a/protocol/go/authorization/authorizationconnect/authorization.connect.go +++ b/protocol/go/authorization/authorizationconnect/authorization.connect.go @@ -42,9 +42,6 @@ const ( // AuthorizationServiceGetEntitlementsProcedure is the fully-qualified name of the // AuthorizationService's GetEntitlements RPC. AuthorizationServiceGetEntitlementsProcedure = "/authorization.AuthorizationService/GetEntitlements" - // AuthorizationServiceGetEntitlementsV2Procedure is the fully-qualified name of the - // AuthorizationService's GetEntitlementsV2 RPC. - AuthorizationServiceGetEntitlementsV2Procedure = "/authorization.AuthorizationService/GetEntitlementsV2" ) // These variables are the protoreflect.Descriptor objects for the RPCs defined in this package. @@ -53,7 +50,6 @@ var ( authorizationServiceGetDecisionsMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetDecisions") authorizationServiceGetDecisionsByTokenMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetDecisionsByToken") authorizationServiceGetEntitlementsMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetEntitlements") - authorizationServiceGetEntitlementsV2MethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetEntitlementsV2") ) // AuthorizationServiceClient is a client for the authorization.AuthorizationService service. @@ -61,7 +57,6 @@ type AuthorizationServiceClient interface { GetDecisions(context.Context, *connect.Request[authorization.GetDecisionsRequest]) (*connect.Response[authorization.GetDecisionsResponse], error) GetDecisionsByToken(context.Context, *connect.Request[authorization.GetDecisionsByTokenRequest]) (*connect.Response[authorization.GetDecisionsByTokenResponse], error) GetEntitlements(context.Context, *connect.Request[authorization.GetEntitlementsRequest]) (*connect.Response[authorization.GetEntitlementsResponse], error) - GetEntitlementsV2(context.Context, *connect.Request[authorization.GetEntitlementsV2Request]) (*connect.Response[authorization.GetEntitlementsV2Response], error) } // NewAuthorizationServiceClient constructs a client for the authorization.AuthorizationService @@ -92,12 +87,6 @@ func NewAuthorizationServiceClient(httpClient connect.HTTPClient, baseURL string connect.WithSchema(authorizationServiceGetEntitlementsMethodDescriptor), connect.WithClientOptions(opts...), ), - getEntitlementsV2: connect.NewClient[authorization.GetEntitlementsV2Request, authorization.GetEntitlementsV2Response]( - httpClient, - baseURL+AuthorizationServiceGetEntitlementsV2Procedure, - connect.WithSchema(authorizationServiceGetEntitlementsV2MethodDescriptor), - connect.WithClientOptions(opts...), - ), } } @@ -106,7 +95,6 @@ type authorizationServiceClient struct { getDecisions *connect.Client[authorization.GetDecisionsRequest, authorization.GetDecisionsResponse] getDecisionsByToken *connect.Client[authorization.GetDecisionsByTokenRequest, authorization.GetDecisionsByTokenResponse] getEntitlements *connect.Client[authorization.GetEntitlementsRequest, authorization.GetEntitlementsResponse] - getEntitlementsV2 *connect.Client[authorization.GetEntitlementsV2Request, authorization.GetEntitlementsV2Response] } // GetDecisions calls authorization.AuthorizationService.GetDecisions. @@ -124,18 +112,12 @@ func (c *authorizationServiceClient) GetEntitlements(ctx context.Context, req *c return c.getEntitlements.CallUnary(ctx, req) } -// GetEntitlementsV2 calls authorization.AuthorizationService.GetEntitlementsV2. -func (c *authorizationServiceClient) GetEntitlementsV2(ctx context.Context, req *connect.Request[authorization.GetEntitlementsV2Request]) (*connect.Response[authorization.GetEntitlementsV2Response], error) { - return c.getEntitlementsV2.CallUnary(ctx, req) -} - // AuthorizationServiceHandler is an implementation of the authorization.AuthorizationService // service. type AuthorizationServiceHandler interface { GetDecisions(context.Context, *connect.Request[authorization.GetDecisionsRequest]) (*connect.Response[authorization.GetDecisionsResponse], error) GetDecisionsByToken(context.Context, *connect.Request[authorization.GetDecisionsByTokenRequest]) (*connect.Response[authorization.GetDecisionsByTokenResponse], error) GetEntitlements(context.Context, *connect.Request[authorization.GetEntitlementsRequest]) (*connect.Response[authorization.GetEntitlementsResponse], error) - GetEntitlementsV2(context.Context, *connect.Request[authorization.GetEntitlementsV2Request]) (*connect.Response[authorization.GetEntitlementsV2Response], error) } // NewAuthorizationServiceHandler builds an HTTP handler from the service implementation. It returns @@ -162,12 +144,6 @@ func NewAuthorizationServiceHandler(svc AuthorizationServiceHandler, opts ...con connect.WithSchema(authorizationServiceGetEntitlementsMethodDescriptor), connect.WithHandlerOptions(opts...), ) - authorizationServiceGetEntitlementsV2Handler := connect.NewUnaryHandler( - AuthorizationServiceGetEntitlementsV2Procedure, - svc.GetEntitlementsV2, - connect.WithSchema(authorizationServiceGetEntitlementsV2MethodDescriptor), - connect.WithHandlerOptions(opts...), - ) return "/authorization.AuthorizationService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { switch r.URL.Path { case AuthorizationServiceGetDecisionsProcedure: @@ -176,8 +152,6 @@ func NewAuthorizationServiceHandler(svc AuthorizationServiceHandler, opts ...con authorizationServiceGetDecisionsByTokenHandler.ServeHTTP(w, r) case AuthorizationServiceGetEntitlementsProcedure: authorizationServiceGetEntitlementsHandler.ServeHTTP(w, r) - case AuthorizationServiceGetEntitlementsV2Procedure: - authorizationServiceGetEntitlementsV2Handler.ServeHTTP(w, r) default: http.NotFound(w, r) } @@ -198,7 +172,3 @@ func (UnimplementedAuthorizationServiceHandler) GetDecisionsByToken(context.Cont func (UnimplementedAuthorizationServiceHandler) GetEntitlements(context.Context, *connect.Request[authorization.GetEntitlementsRequest]) (*connect.Response[authorization.GetEntitlementsResponse], error) { return nil, connect.NewError(connect.CodeUnimplemented, errors.New("authorization.AuthorizationService.GetEntitlements is not implemented")) } - -func (UnimplementedAuthorizationServiceHandler) GetEntitlementsV2(context.Context, *connect.Request[authorization.GetEntitlementsV2Request]) (*connect.Response[authorization.GetEntitlementsV2Response], error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("authorization.AuthorizationService.GetEntitlementsV2 is not implemented")) -} diff --git a/protocol/go/authorization/v2/authorization.pb.go b/protocol/go/authorization/v2/authorization.pb.go new file mode 100644 index 0000000000..f662e92b3f --- /dev/null +++ b/protocol/go/authorization/v2/authorization.pb.go @@ -0,0 +1,1722 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.33.0 +// protoc (unknown) +// source: authorization/v2/authorization.proto + +package authorizationv2 + +import ( + policy "github.com/opentdf/platform/protocol/go/policy" + _ "google.golang.org/genproto/googleapis/api/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + anypb "google.golang.org/protobuf/types/known/anypb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type Entity_Category int32 + +const ( + Entity_CATEGORY_UNSPECIFIED Entity_Category = 0 + Entity_CATEGORY_SUBJECT Entity_Category = 1 + Entity_CATEGORY_ENVIRONMENT Entity_Category = 2 +) + +// Enum value maps for Entity_Category. +var ( + Entity_Category_name = map[int32]string{ + 0: "CATEGORY_UNSPECIFIED", + 1: "CATEGORY_SUBJECT", + 2: "CATEGORY_ENVIRONMENT", + } + Entity_Category_value = map[string]int32{ + "CATEGORY_UNSPECIFIED": 0, + "CATEGORY_SUBJECT": 1, + "CATEGORY_ENVIRONMENT": 2, + } +) + +func (x Entity_Category) Enum() *Entity_Category { + p := new(Entity_Category) + *p = x + return p +} + +func (x Entity_Category) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Entity_Category) Descriptor() protoreflect.EnumDescriptor { + return file_authorization_v2_authorization_proto_enumTypes[0].Descriptor() +} + +func (Entity_Category) Type() protoreflect.EnumType { + return &file_authorization_v2_authorization_proto_enumTypes[0] +} + +func (x Entity_Category) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Entity_Category.Descriptor instead. +func (Entity_Category) EnumDescriptor() ([]byte, []int) { + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{1, 0} +} + +type DecisionResponse_Decision int32 + +const ( + DecisionResponse_DECISION_UNSPECIFIED DecisionResponse_Decision = 0 + DecisionResponse_DECISION_DENY DecisionResponse_Decision = 1 + DecisionResponse_DECISION_PERMIT DecisionResponse_Decision = 2 +) + +// Enum value maps for DecisionResponse_Decision. +var ( + DecisionResponse_Decision_name = map[int32]string{ + 0: "DECISION_UNSPECIFIED", + 1: "DECISION_DENY", + 2: "DECISION_PERMIT", + } + DecisionResponse_Decision_value = map[string]int32{ + "DECISION_UNSPECIFIED": 0, + "DECISION_DENY": 1, + "DECISION_PERMIT": 2, + } +) + +func (x DecisionResponse_Decision) Enum() *DecisionResponse_Decision { + p := new(DecisionResponse_Decision) + *p = x + return p +} + +func (x DecisionResponse_Decision) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (DecisionResponse_Decision) Descriptor() protoreflect.EnumDescriptor { + return file_authorization_v2_authorization_proto_enumTypes[1].Descriptor() +} + +func (DecisionResponse_Decision) Type() protoreflect.EnumType { + return &file_authorization_v2_authorization_proto_enumTypes[1] +} + +func (x DecisionResponse_Decision) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use DecisionResponse_Decision.Descriptor instead. +func (DecisionResponse_Decision) EnumDescriptor() ([]byte, []int) { + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{5, 0} +} + +type Token struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // ephemeral id for tracking between request and response + Jwt string `protobuf:"bytes,2,opt,name=jwt,proto3" json:"jwt,omitempty"` // the token +} + +func (x *Token) Reset() { + *x = Token{} + if protoimpl.UnsafeEnabled { + mi := &file_authorization_v2_authorization_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Token) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Token) ProtoMessage() {} + +func (x *Token) ProtoReflect() protoreflect.Message { + mi := &file_authorization_v2_authorization_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Token.ProtoReflect.Descriptor instead. +func (*Token) Descriptor() ([]byte, []int) { + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{0} +} + +func (x *Token) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *Token) GetJwt() string { + if x != nil { + return x.Jwt + } + return "" +} + +// PE (Person Entity) or NPE (Non-Person Entity) +type Entity struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // ephemeral id for tracking between request and response + // Standard entity types supported by the platform + // + // Types that are assignable to EntityType: + // + // *Entity_EmailAddress + // *Entity_UserName + // *Entity_RemoteClaimsUrl + // *Entity_Uuid + // *Entity_Claims + // *Entity_Custom + // *Entity_ClientId + EntityType isEntity_EntityType `protobuf_oneof:"entity_type"` + Category Entity_Category `protobuf:"varint,9,opt,name=category,proto3,enum=authorization.v2.Entity_Category" json:"category,omitempty"` +} + +func (x *Entity) Reset() { + *x = Entity{} + if protoimpl.UnsafeEnabled { + mi := &file_authorization_v2_authorization_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Entity) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Entity) ProtoMessage() {} + +func (x *Entity) ProtoReflect() protoreflect.Message { + mi := &file_authorization_v2_authorization_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Entity.ProtoReflect.Descriptor instead. +func (*Entity) Descriptor() ([]byte, []int) { + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{1} +} + +func (x *Entity) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (m *Entity) GetEntityType() isEntity_EntityType { + if m != nil { + return m.EntityType + } + return nil +} + +func (x *Entity) GetEmailAddress() string { + if x, ok := x.GetEntityType().(*Entity_EmailAddress); ok { + return x.EmailAddress + } + return "" +} + +func (x *Entity) GetUserName() string { + if x, ok := x.GetEntityType().(*Entity_UserName); ok { + return x.UserName + } + return "" +} + +func (x *Entity) GetRemoteClaimsUrl() string { + if x, ok := x.GetEntityType().(*Entity_RemoteClaimsUrl); ok { + return x.RemoteClaimsUrl + } + return "" +} + +func (x *Entity) GetUuid() string { + if x, ok := x.GetEntityType().(*Entity_Uuid); ok { + return x.Uuid + } + return "" +} + +func (x *Entity) GetClaims() *anypb.Any { + if x, ok := x.GetEntityType().(*Entity_Claims); ok { + return x.Claims + } + return nil +} + +func (x *Entity) GetCustom() *EntityCustom { + if x, ok := x.GetEntityType().(*Entity_Custom); ok { + return x.Custom + } + return nil +} + +func (x *Entity) GetClientId() string { + if x, ok := x.GetEntityType().(*Entity_ClientId); ok { + return x.ClientId + } + return "" +} + +func (x *Entity) GetCategory() Entity_Category { + if x != nil { + return x.Category + } + return Entity_CATEGORY_UNSPECIFIED +} + +type isEntity_EntityType interface { + isEntity_EntityType() +} + +type Entity_EmailAddress struct { + // one of the entity options must be set + EmailAddress string `protobuf:"bytes,2,opt,name=email_address,json=emailAddress,proto3,oneof"` +} + +type Entity_UserName struct { + UserName string `protobuf:"bytes,3,opt,name=user_name,json=userName,proto3,oneof"` +} + +type Entity_RemoteClaimsUrl struct { + RemoteClaimsUrl string `protobuf:"bytes,4,opt,name=remote_claims_url,json=remoteClaimsUrl,proto3,oneof"` +} + +type Entity_Uuid struct { + Uuid string `protobuf:"bytes,5,opt,name=uuid,proto3,oneof"` +} + +type Entity_Claims struct { + Claims *anypb.Any `protobuf:"bytes,6,opt,name=claims,proto3,oneof"` +} + +type Entity_Custom struct { + Custom *EntityCustom `protobuf:"bytes,7,opt,name=custom,proto3,oneof"` +} + +type Entity_ClientId struct { + ClientId string `protobuf:"bytes,8,opt,name=client_id,json=clientId,proto3,oneof"` +} + +func (*Entity_EmailAddress) isEntity_EntityType() {} + +func (*Entity_UserName) isEntity_EntityType() {} + +func (*Entity_RemoteClaimsUrl) isEntity_EntityType() {} + +func (*Entity_Uuid) isEntity_EntityType() {} + +func (*Entity_Claims) isEntity_EntityType() {} + +func (*Entity_Custom) isEntity_EntityType() {} + +func (*Entity_ClientId) isEntity_EntityType() {} + +// Entity type for custom entities beyond the standard types +type EntityCustom struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Extension *anypb.Any `protobuf:"bytes,1,opt,name=extension,proto3" json:"extension,omitempty"` +} + +func (x *EntityCustom) Reset() { + *x = EntityCustom{} + if protoimpl.UnsafeEnabled { + mi := &file_authorization_v2_authorization_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EntityCustom) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EntityCustom) ProtoMessage() {} + +func (x *EntityCustom) ProtoReflect() protoreflect.Message { + mi := &file_authorization_v2_authorization_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EntityCustom.ProtoReflect.Descriptor instead. +func (*EntityCustom) Descriptor() ([]byte, []int) { + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{2} +} + +func (x *EntityCustom) GetExtension() *anypb.Any { + if x != nil { + return x.Extension + } + return nil +} + +// A set of related PE and NPE +type EntityChain struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // ephemeral id for tracking between request and response + Entities []*Entity `protobuf:"bytes,2,rep,name=entities,proto3" json:"entities,omitempty"` +} + +func (x *EntityChain) Reset() { + *x = EntityChain{} + if protoimpl.UnsafeEnabled { + mi := &file_authorization_v2_authorization_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EntityChain) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EntityChain) ProtoMessage() {} + +func (x *EntityChain) ProtoReflect() protoreflect.Message { + mi := &file_authorization_v2_authorization_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EntityChain.ProtoReflect.Descriptor instead. +func (*EntityChain) Descriptor() ([]byte, []int) { + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{3} +} + +func (x *EntityChain) GetId() string { + if x != nil { + return x.Id + } + return "" +} + +func (x *EntityChain) GetEntities() []*Entity { + if x != nil { + return x.Entities + } + return nil +} + +// Example Request Get Decisions to answer the question - Do Bob (represented by entity chain ec1) +// and Alice (represented by entity chain ec2) have TRANSMIT authorization for +// 2 resources; resource1 (attr-set-1) defined by attributes foo:bar resource2 (attr-set-2) defined by attribute foo:bar, color:red ? +// +// { +// "actions": [ +// { +// "standard": "STANDARD_ACTION_TRANSMIT" +// } +// ], +// "entityChains": [ +// { +// "id": "ec1", +// "entities": [ +// { +// "emailAddress": "bob@example.org" +// } +// ] +// }, +// { +// "id": "ec2", +// "entities": [ +// { +// "userName": "alice@example.org" +// } +// ] +// } +// ], +// "resourceAttributes": [ +// { +// "resourceAttributeId": "attr-set-1", +// "attributeFqns": [ +// "https://www.example.org/attr/foo/value/value1" +// ] +// }, +// { +// "resourceAttributeId": "attr-set-2", +// "attributeFqns": [ +// "https://example.net/attr/attr1/value/value1", +// "https://example.net/attr/attr1/value/value2" +// ] +// } +// ] +// } +type DecisionRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Actions []*policy.Action `protobuf:"bytes,1,rep,name=actions,proto3" json:"actions,omitempty"` + EntityChains []*EntityChain `protobuf:"bytes,2,rep,name=entity_chains,json=entityChains,proto3" json:"entity_chains,omitempty"` + ResourceAttributes []*ResourceAttribute `protobuf:"bytes,3,rep,name=resource_attributes,json=resourceAttributes,proto3" json:"resource_attributes,omitempty"` +} + +func (x *DecisionRequest) Reset() { + *x = DecisionRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_authorization_v2_authorization_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DecisionRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DecisionRequest) ProtoMessage() {} + +func (x *DecisionRequest) ProtoReflect() protoreflect.Message { + mi := &file_authorization_v2_authorization_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DecisionRequest.ProtoReflect.Descriptor instead. +func (*DecisionRequest) Descriptor() ([]byte, []int) { + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{4} +} + +func (x *DecisionRequest) GetActions() []*policy.Action { + if x != nil { + return x.Actions + } + return nil +} + +func (x *DecisionRequest) GetEntityChains() []*EntityChain { + if x != nil { + return x.EntityChains + } + return nil +} + +func (x *DecisionRequest) GetResourceAttributes() []*ResourceAttribute { + if x != nil { + return x.ResourceAttributes + } + return nil +} + +// Example response for a Decision Request - Do Bob (represented by entity chain ec1) +// and Alice (represented by entity chain ec2) have TRANSMIT authorization for +// 2 resources; resource1 (attr-set-1) defined by attributes foo:bar resource2 (attr-set-2) defined by attribute foo:bar, color:red ? +// +// Results: +// - bob has permitted authorization to transmit for a resource defined by attr-set-1 attributes and has a watermark obligation +// - bob has denied authorization to transmit a for a resource defined by attr-set-2 attributes +// - alice has permitted authorization to transmit for a resource defined by attr-set-1 attributes +// - alice has denied authorization to transmit a for a resource defined by attr-set-2 attributes +// +// { +// "entityChainId": "ec1", +// "resourceAttributesId": "attr-set-1", +// "decision": "DECISION_PERMIT", +// "obligations": [ +// "http://www.example.org/obligation/watermark" +// ] +// }, +// { +// "entityChainId": "ec1", +// "resourceAttributesId": "attr-set-2", +// "decision": "DECISION_PERMIT" +// }, +// { +// "entityChainId": "ec2", +// "resourceAttributesId": "attr-set-1", +// "decision": "DECISION_PERMIT" +// }, +// { +// "entityChainId": "ec2", +// "resourceAttributesId": "attr-set-2", +// "decision": "DECISION_DENY" +// } +type DecisionResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + EntityChainId string `protobuf:"bytes,1,opt,name=entity_chain_id,json=entityChainId,proto3" json:"entity_chain_id,omitempty"` // ephemeral entity chain id from the request + ResourceAttributesId string `protobuf:"bytes,2,opt,name=resource_attributes_id,json=resourceAttributesId,proto3" json:"resource_attributes_id,omitempty"` // ephemeral resource attributes id from the request + Action *policy.Action `protobuf:"bytes,3,opt,name=action,proto3" json:"action,omitempty"` // Action of the decision response + Decision DecisionResponse_Decision `protobuf:"varint,4,opt,name=decision,proto3,enum=authorization.v2.DecisionResponse_Decision" json:"decision,omitempty"` // The decision response + Obligations []string `protobuf:"bytes,5,rep,name=obligations,proto3" json:"obligations,omitempty"` //optional list of obligations represented in URI format +} + +func (x *DecisionResponse) Reset() { + *x = DecisionResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_authorization_v2_authorization_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DecisionResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DecisionResponse) ProtoMessage() {} + +func (x *DecisionResponse) ProtoReflect() protoreflect.Message { + mi := &file_authorization_v2_authorization_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DecisionResponse.ProtoReflect.Descriptor instead. +func (*DecisionResponse) Descriptor() ([]byte, []int) { + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{5} +} + +func (x *DecisionResponse) GetEntityChainId() string { + if x != nil { + return x.EntityChainId + } + return "" +} + +func (x *DecisionResponse) GetResourceAttributesId() string { + if x != nil { + return x.ResourceAttributesId + } + return "" +} + +func (x *DecisionResponse) GetAction() *policy.Action { + if x != nil { + return x.Action + } + return nil +} + +func (x *DecisionResponse) GetDecision() DecisionResponse_Decision { + if x != nil { + return x.Decision + } + return DecisionResponse_DECISION_UNSPECIFIED +} + +func (x *DecisionResponse) GetObligations() []string { + if x != nil { + return x.Obligations + } + return nil +} + +type GetDecisionsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DecisionRequests []*DecisionRequest `protobuf:"bytes,1,rep,name=decision_requests,json=decisionRequests,proto3" json:"decision_requests,omitempty"` +} + +func (x *GetDecisionsRequest) Reset() { + *x = GetDecisionsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_authorization_v2_authorization_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetDecisionsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetDecisionsRequest) ProtoMessage() {} + +func (x *GetDecisionsRequest) ProtoReflect() protoreflect.Message { + mi := &file_authorization_v2_authorization_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetDecisionsRequest.ProtoReflect.Descriptor instead. +func (*GetDecisionsRequest) Descriptor() ([]byte, []int) { + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{6} +} + +func (x *GetDecisionsRequest) GetDecisionRequests() []*DecisionRequest { + if x != nil { + return x.DecisionRequests + } + return nil +} + +type GetDecisionsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DecisionResponses []*DecisionResponse `protobuf:"bytes,1,rep,name=decision_responses,json=decisionResponses,proto3" json:"decision_responses,omitempty"` +} + +func (x *GetDecisionsResponse) Reset() { + *x = GetDecisionsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_authorization_v2_authorization_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetDecisionsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetDecisionsResponse) ProtoMessage() {} + +func (x *GetDecisionsResponse) ProtoReflect() protoreflect.Message { + mi := &file_authorization_v2_authorization_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetDecisionsResponse.ProtoReflect.Descriptor instead. +func (*GetDecisionsResponse) Descriptor() ([]byte, []int) { + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{7} +} + +func (x *GetDecisionsResponse) GetDecisionResponses() []*DecisionResponse { + if x != nil { + return x.DecisionResponses + } + return nil +} + +type GetEntitlementsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // list of requested entities + Entities []*Entity `protobuf:"bytes,1,rep,name=entities,proto3" json:"entities,omitempty"` + // optional attribute fqn as a scope + Scope *ResourceAttribute `protobuf:"bytes,2,opt,name=scope,proto3,oneof" json:"scope,omitempty"` + // optional parameter to return a full list of entitlements - returns lower hierarchy attributes + WithComprehensiveHierarchy *bool `protobuf:"varint,3,opt,name=with_comprehensive_hierarchy,json=withComprehensiveHierarchy,proto3,oneof" json:"with_comprehensive_hierarchy,omitempty"` +} + +func (x *GetEntitlementsRequest) Reset() { + *x = GetEntitlementsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_authorization_v2_authorization_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetEntitlementsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetEntitlementsRequest) ProtoMessage() {} + +func (x *GetEntitlementsRequest) ProtoReflect() protoreflect.Message { + mi := &file_authorization_v2_authorization_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetEntitlementsRequest.ProtoReflect.Descriptor instead. +func (*GetEntitlementsRequest) Descriptor() ([]byte, []int) { + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{8} +} + +func (x *GetEntitlementsRequest) GetEntities() []*Entity { + if x != nil { + return x.Entities + } + return nil +} + +func (x *GetEntitlementsRequest) GetScope() *ResourceAttribute { + if x != nil { + return x.Scope + } + return nil +} + +func (x *GetEntitlementsRequest) GetWithComprehensiveHierarchy() bool { + if x != nil && x.WithComprehensiveHierarchy != nil { + return *x.WithComprehensiveHierarchy + } + return false +} + +// Entitlements for a given entity, mapping each attribute value FQN to any entitled actions[] +type EntityEntitlements struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + EntityId string `protobuf:"bytes,1,opt,name=entity_id,json=entityId,proto3" json:"entity_id,omitempty"` + ActionsPerAttributeValueFqn map[string]*EntityEntitlements_ActionsList `protobuf:"bytes,2,rep,name=actions_per_attribute_value_fqn,json=actionsPerAttributeValueFqn,proto3" json:"actions_per_attribute_value_fqn,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *EntityEntitlements) Reset() { + *x = EntityEntitlements{} + if protoimpl.UnsafeEnabled { + mi := &file_authorization_v2_authorization_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EntityEntitlements) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EntityEntitlements) ProtoMessage() {} + +func (x *EntityEntitlements) ProtoReflect() protoreflect.Message { + mi := &file_authorization_v2_authorization_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EntityEntitlements.ProtoReflect.Descriptor instead. +func (*EntityEntitlements) Descriptor() ([]byte, []int) { + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{9} +} + +func (x *EntityEntitlements) GetEntityId() string { + if x != nil { + return x.EntityId + } + return "" +} + +func (x *EntityEntitlements) GetActionsPerAttributeValueFqn() map[string]*EntityEntitlements_ActionsList { + if x != nil { + return x.ActionsPerAttributeValueFqn + } + return nil +} + +// A logical bucket of attributes belonging to a "Resource" +type ResourceAttribute struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ResourceAttributesId string `protobuf:"bytes,1,opt,name=resource_attributes_id,json=resourceAttributesId,proto3" json:"resource_attributes_id,omitempty"` + AttributeValueFqns []string `protobuf:"bytes,2,rep,name=attribute_value_fqns,json=attributeValueFqns,proto3" json:"attribute_value_fqns,omitempty"` +} + +func (x *ResourceAttribute) Reset() { + *x = ResourceAttribute{} + if protoimpl.UnsafeEnabled { + mi := &file_authorization_v2_authorization_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ResourceAttribute) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResourceAttribute) ProtoMessage() {} + +func (x *ResourceAttribute) ProtoReflect() protoreflect.Message { + mi := &file_authorization_v2_authorization_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ResourceAttribute.ProtoReflect.Descriptor instead. +func (*ResourceAttribute) Descriptor() ([]byte, []int) { + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{10} +} + +func (x *ResourceAttribute) GetResourceAttributesId() string { + if x != nil { + return x.ResourceAttributesId + } + return "" +} + +func (x *ResourceAttribute) GetAttributeValueFqns() []string { + if x != nil { + return x.AttributeValueFqns + } + return nil +} + +type GetEntitlementsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Entitlements []*EntityEntitlements `protobuf:"bytes,1,rep,name=entitlements,proto3" json:"entitlements,omitempty"` +} + +func (x *GetEntitlementsResponse) Reset() { + *x = GetEntitlementsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_authorization_v2_authorization_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetEntitlementsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetEntitlementsResponse) ProtoMessage() {} + +func (x *GetEntitlementsResponse) ProtoReflect() protoreflect.Message { + mi := &file_authorization_v2_authorization_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetEntitlementsResponse.ProtoReflect.Descriptor instead. +func (*GetEntitlementsResponse) Descriptor() ([]byte, []int) { + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{11} +} + +func (x *GetEntitlementsResponse) GetEntitlements() []*EntityEntitlements { + if x != nil { + return x.Entitlements + } + return nil +} + +type TokenDecisionRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Actions []*policy.Action `protobuf:"bytes,1,rep,name=actions,proto3" json:"actions,omitempty"` + Tokens []*Token `protobuf:"bytes,2,rep,name=tokens,proto3" json:"tokens,omitempty"` + ResourceAttributes []*ResourceAttribute `protobuf:"bytes,3,rep,name=resource_attributes,json=resourceAttributes,proto3" json:"resource_attributes,omitempty"` +} + +func (x *TokenDecisionRequest) Reset() { + *x = TokenDecisionRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_authorization_v2_authorization_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TokenDecisionRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TokenDecisionRequest) ProtoMessage() {} + +func (x *TokenDecisionRequest) ProtoReflect() protoreflect.Message { + mi := &file_authorization_v2_authorization_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TokenDecisionRequest.ProtoReflect.Descriptor instead. +func (*TokenDecisionRequest) Descriptor() ([]byte, []int) { + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{12} +} + +func (x *TokenDecisionRequest) GetActions() []*policy.Action { + if x != nil { + return x.Actions + } + return nil +} + +func (x *TokenDecisionRequest) GetTokens() []*Token { + if x != nil { + return x.Tokens + } + return nil +} + +func (x *TokenDecisionRequest) GetResourceAttributes() []*ResourceAttribute { + if x != nil { + return x.ResourceAttributes + } + return nil +} + +type GetDecisionsByTokenRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DecisionRequests []*TokenDecisionRequest `protobuf:"bytes,1,rep,name=decision_requests,json=decisionRequests,proto3" json:"decision_requests,omitempty"` +} + +func (x *GetDecisionsByTokenRequest) Reset() { + *x = GetDecisionsByTokenRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_authorization_v2_authorization_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetDecisionsByTokenRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetDecisionsByTokenRequest) ProtoMessage() {} + +func (x *GetDecisionsByTokenRequest) ProtoReflect() protoreflect.Message { + mi := &file_authorization_v2_authorization_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetDecisionsByTokenRequest.ProtoReflect.Descriptor instead. +func (*GetDecisionsByTokenRequest) Descriptor() ([]byte, []int) { + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{13} +} + +func (x *GetDecisionsByTokenRequest) GetDecisionRequests() []*TokenDecisionRequest { + if x != nil { + return x.DecisionRequests + } + return nil +} + +type GetDecisionsByTokenResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DecisionResponses []*DecisionResponse `protobuf:"bytes,1,rep,name=decision_responses,json=decisionResponses,proto3" json:"decision_responses,omitempty"` +} + +func (x *GetDecisionsByTokenResponse) Reset() { + *x = GetDecisionsByTokenResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_authorization_v2_authorization_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetDecisionsByTokenResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetDecisionsByTokenResponse) ProtoMessage() {} + +func (x *GetDecisionsByTokenResponse) ProtoReflect() protoreflect.Message { + mi := &file_authorization_v2_authorization_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetDecisionsByTokenResponse.ProtoReflect.Descriptor instead. +func (*GetDecisionsByTokenResponse) Descriptor() ([]byte, []int) { + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{14} +} + +func (x *GetDecisionsByTokenResponse) GetDecisionResponses() []*DecisionResponse { + if x != nil { + return x.DecisionResponses + } + return nil +} + +type EntityEntitlements_ActionsList struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Actions []*policy.Action `protobuf:"bytes,1,rep,name=actions,proto3" json:"actions,omitempty"` +} + +func (x *EntityEntitlements_ActionsList) Reset() { + *x = EntityEntitlements_ActionsList{} + if protoimpl.UnsafeEnabled { + mi := &file_authorization_v2_authorization_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EntityEntitlements_ActionsList) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EntityEntitlements_ActionsList) ProtoMessage() {} + +func (x *EntityEntitlements_ActionsList) ProtoReflect() protoreflect.Message { + mi := &file_authorization_v2_authorization_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EntityEntitlements_ActionsList.ProtoReflect.Descriptor instead. +func (*EntityEntitlements_ActionsList) Descriptor() ([]byte, []int) { + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{9, 0} +} + +func (x *EntityEntitlements_ActionsList) GetActions() []*policy.Action { + if x != nil { + return x.Actions + } + return nil +} + +var File_authorization_v2_authorization_proto protoreflect.FileDescriptor + +var file_authorization_v2_authorization_proto_rawDesc = []byte{ + 0x0a, 0x24, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, + 0x76, 0x32, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x14, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x29, 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x10, 0x0a, 0x03, 0x6a, 0x77, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6a, + 0x77, 0x74, 0x22, 0xcf, 0x03, 0x0a, 0x06, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x25, 0x0a, + 0x0d, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0c, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x12, 0x1d, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6c, + 0x61, 0x69, 0x6d, 0x73, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, + 0x52, 0x0f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x55, 0x72, + 0x6c, 0x12, 0x14, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, + 0x00, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x2e, 0x0a, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, + 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x48, 0x00, 0x52, + 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x12, 0x38, 0x0a, 0x06, 0x63, 0x75, 0x73, 0x74, 0x6f, + 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x00, 0x52, 0x06, 0x63, 0x75, 0x73, 0x74, 0x6f, + 0x6d, 0x12, 0x1d, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, + 0x12, 0x3d, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x43, 0x61, 0x74, + 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x22, + 0x54, 0x0a, 0x08, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x18, 0x0a, 0x14, 0x43, + 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, + 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, + 0x59, 0x5f, 0x53, 0x55, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x43, + 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x45, 0x4e, 0x56, 0x49, 0x52, 0x4f, 0x4e, 0x4d, + 0x45, 0x4e, 0x54, 0x10, 0x02, 0x42, 0x0d, 0x0a, 0x0b, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, + 0x74, 0x79, 0x70, 0x65, 0x22, 0x42, 0x0a, 0x0c, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x75, + 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x32, 0x0a, 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x09, 0x65, + 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x53, 0x0a, 0x0b, 0x45, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x34, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0xd5, 0x01, + 0x0a, 0x0f, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x42, 0x0a, 0x0d, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, + 0x6e, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x12, + 0x54, 0x0a, 0x13, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x74, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x65, 0x52, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0xd1, 0x02, 0x0a, 0x10, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, + 0x49, 0x64, 0x12, 0x34, 0x0a, 0x16, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, + 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x14, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x47, 0x0a, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x62, 0x6c, + 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, + 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x4c, 0x0a, 0x08, 0x44, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x14, 0x44, 0x45, 0x43, 0x49, 0x53, + 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, + 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, + 0x4e, 0x59, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, + 0x5f, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x22, 0x65, 0x0a, 0x13, 0x47, 0x65, 0x74, + 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x4e, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x10, + 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, + 0x22, 0x69, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22, 0x80, 0x02, 0x0a, 0x16, + 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, + 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x3e, 0x0a, 0x05, + 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, + 0x48, 0x00, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x88, 0x01, 0x01, 0x12, 0x45, 0x0a, 0x1c, + 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, + 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x08, 0x48, 0x01, 0x52, 0x1a, 0x77, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, + 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, + 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x42, 0x1f, 0x0a, + 0x1d, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, + 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x22, 0xfb, + 0x02, 0x0a, 0x12, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x49, 0x64, 0x12, 0x8b, 0x01, 0x0a, 0x1f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x70, + 0x65, 0x72, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x1b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, + 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, + 0x1a, 0x37, 0x0a, 0x0b, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, + 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x80, 0x01, 0x0a, 0x20, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x46, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x30, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x7b, 0x0a, 0x11, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x65, 0x12, 0x34, 0x0a, 0x16, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x14, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x73, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x61, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x73, 0x22, 0x63, 0x0a, 0x17, 0x47, 0x65, 0x74, + 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xc7, + 0x01, 0x0a, 0x14, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x2f, 0x0a, 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x06, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x73, 0x12, 0x54, 0x0a, 0x13, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, + 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x23, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x52, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x71, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x44, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x53, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, 0x70, 0x0a, 0x1b, 0x47, + 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x12, 0x64, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x32, 0x93, 0x03, + 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x7b, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, + 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x3a, 0x01, 0x2a, + 0x22, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x93, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2c, 0x2e, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, + 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, + 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, + 0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x2f, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x68, 0x0a, 0x0f, 0x47, 0x65, 0x74, + 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x28, 0x2e, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, + 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x42, 0xd5, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x42, 0x12, 0x41, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x50, 0x01, 0x5a, 0x48, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, + 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, 0x6f, 0x2f, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x3b, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x32, 0xa2, 0x02, 0x03, 0x41, + 0x58, 0x58, 0xaa, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x1c, 0x41, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, +} + +var ( + file_authorization_v2_authorization_proto_rawDescOnce sync.Once + file_authorization_v2_authorization_proto_rawDescData = file_authorization_v2_authorization_proto_rawDesc +) + +func file_authorization_v2_authorization_proto_rawDescGZIP() []byte { + file_authorization_v2_authorization_proto_rawDescOnce.Do(func() { + file_authorization_v2_authorization_proto_rawDescData = protoimpl.X.CompressGZIP(file_authorization_v2_authorization_proto_rawDescData) + }) + return file_authorization_v2_authorization_proto_rawDescData +} + +var file_authorization_v2_authorization_proto_enumTypes = make([]protoimpl.EnumInfo, 2) +var file_authorization_v2_authorization_proto_msgTypes = make([]protoimpl.MessageInfo, 17) +var file_authorization_v2_authorization_proto_goTypes = []interface{}{ + (Entity_Category)(0), // 0: authorization.v2.Entity.Category + (DecisionResponse_Decision)(0), // 1: authorization.v2.DecisionResponse.Decision + (*Token)(nil), // 2: authorization.v2.Token + (*Entity)(nil), // 3: authorization.v2.Entity + (*EntityCustom)(nil), // 4: authorization.v2.EntityCustom + (*EntityChain)(nil), // 5: authorization.v2.EntityChain + (*DecisionRequest)(nil), // 6: authorization.v2.DecisionRequest + (*DecisionResponse)(nil), // 7: authorization.v2.DecisionResponse + (*GetDecisionsRequest)(nil), // 8: authorization.v2.GetDecisionsRequest + (*GetDecisionsResponse)(nil), // 9: authorization.v2.GetDecisionsResponse + (*GetEntitlementsRequest)(nil), // 10: authorization.v2.GetEntitlementsRequest + (*EntityEntitlements)(nil), // 11: authorization.v2.EntityEntitlements + (*ResourceAttribute)(nil), // 12: authorization.v2.ResourceAttribute + (*GetEntitlementsResponse)(nil), // 13: authorization.v2.GetEntitlementsResponse + (*TokenDecisionRequest)(nil), // 14: authorization.v2.TokenDecisionRequest + (*GetDecisionsByTokenRequest)(nil), // 15: authorization.v2.GetDecisionsByTokenRequest + (*GetDecisionsByTokenResponse)(nil), // 16: authorization.v2.GetDecisionsByTokenResponse + (*EntityEntitlements_ActionsList)(nil), // 17: authorization.v2.EntityEntitlements.ActionsList + nil, // 18: authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry + (*anypb.Any)(nil), // 19: google.protobuf.Any + (*policy.Action)(nil), // 20: policy.Action +} +var file_authorization_v2_authorization_proto_depIdxs = []int32{ + 19, // 0: authorization.v2.Entity.claims:type_name -> google.protobuf.Any + 4, // 1: authorization.v2.Entity.custom:type_name -> authorization.v2.EntityCustom + 0, // 2: authorization.v2.Entity.category:type_name -> authorization.v2.Entity.Category + 19, // 3: authorization.v2.EntityCustom.extension:type_name -> google.protobuf.Any + 3, // 4: authorization.v2.EntityChain.entities:type_name -> authorization.v2.Entity + 20, // 5: authorization.v2.DecisionRequest.actions:type_name -> policy.Action + 5, // 6: authorization.v2.DecisionRequest.entity_chains:type_name -> authorization.v2.EntityChain + 12, // 7: authorization.v2.DecisionRequest.resource_attributes:type_name -> authorization.v2.ResourceAttribute + 20, // 8: authorization.v2.DecisionResponse.action:type_name -> policy.Action + 1, // 9: authorization.v2.DecisionResponse.decision:type_name -> authorization.v2.DecisionResponse.Decision + 6, // 10: authorization.v2.GetDecisionsRequest.decision_requests:type_name -> authorization.v2.DecisionRequest + 7, // 11: authorization.v2.GetDecisionsResponse.decision_responses:type_name -> authorization.v2.DecisionResponse + 3, // 12: authorization.v2.GetEntitlementsRequest.entities:type_name -> authorization.v2.Entity + 12, // 13: authorization.v2.GetEntitlementsRequest.scope:type_name -> authorization.v2.ResourceAttribute + 18, // 14: authorization.v2.EntityEntitlements.actions_per_attribute_value_fqn:type_name -> authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry + 11, // 15: authorization.v2.GetEntitlementsResponse.entitlements:type_name -> authorization.v2.EntityEntitlements + 20, // 16: authorization.v2.TokenDecisionRequest.actions:type_name -> policy.Action + 2, // 17: authorization.v2.TokenDecisionRequest.tokens:type_name -> authorization.v2.Token + 12, // 18: authorization.v2.TokenDecisionRequest.resource_attributes:type_name -> authorization.v2.ResourceAttribute + 14, // 19: authorization.v2.GetDecisionsByTokenRequest.decision_requests:type_name -> authorization.v2.TokenDecisionRequest + 7, // 20: authorization.v2.GetDecisionsByTokenResponse.decision_responses:type_name -> authorization.v2.DecisionResponse + 20, // 21: authorization.v2.EntityEntitlements.ActionsList.actions:type_name -> policy.Action + 17, // 22: authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry.value:type_name -> authorization.v2.EntityEntitlements.ActionsList + 8, // 23: authorization.v2.AuthorizationService.GetDecisions:input_type -> authorization.v2.GetDecisionsRequest + 15, // 24: authorization.v2.AuthorizationService.GetDecisionsByToken:input_type -> authorization.v2.GetDecisionsByTokenRequest + 10, // 25: authorization.v2.AuthorizationService.GetEntitlements:input_type -> authorization.v2.GetEntitlementsRequest + 9, // 26: authorization.v2.AuthorizationService.GetDecisions:output_type -> authorization.v2.GetDecisionsResponse + 16, // 27: authorization.v2.AuthorizationService.GetDecisionsByToken:output_type -> authorization.v2.GetDecisionsByTokenResponse + 13, // 28: authorization.v2.AuthorizationService.GetEntitlements:output_type -> authorization.v2.GetEntitlementsResponse + 26, // [26:29] is the sub-list for method output_type + 23, // [23:26] is the sub-list for method input_type + 23, // [23:23] is the sub-list for extension type_name + 23, // [23:23] is the sub-list for extension extendee + 0, // [0:23] is the sub-list for field type_name +} + +func init() { file_authorization_v2_authorization_proto_init() } +func file_authorization_v2_authorization_proto_init() { + if File_authorization_v2_authorization_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_authorization_v2_authorization_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Token); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_authorization_v2_authorization_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Entity); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_authorization_v2_authorization_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EntityCustom); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_authorization_v2_authorization_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EntityChain); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_authorization_v2_authorization_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DecisionRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_authorization_v2_authorization_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DecisionResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_authorization_v2_authorization_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetDecisionsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_authorization_v2_authorization_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetDecisionsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_authorization_v2_authorization_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetEntitlementsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_authorization_v2_authorization_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EntityEntitlements); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_authorization_v2_authorization_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ResourceAttribute); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_authorization_v2_authorization_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetEntitlementsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_authorization_v2_authorization_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TokenDecisionRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_authorization_v2_authorization_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetDecisionsByTokenRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_authorization_v2_authorization_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetDecisionsByTokenResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_authorization_v2_authorization_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EntityEntitlements_ActionsList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_authorization_v2_authorization_proto_msgTypes[1].OneofWrappers = []interface{}{ + (*Entity_EmailAddress)(nil), + (*Entity_UserName)(nil), + (*Entity_RemoteClaimsUrl)(nil), + (*Entity_Uuid)(nil), + (*Entity_Claims)(nil), + (*Entity_Custom)(nil), + (*Entity_ClientId)(nil), + } + file_authorization_v2_authorization_proto_msgTypes[8].OneofWrappers = []interface{}{} + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_authorization_v2_authorization_proto_rawDesc, + NumEnums: 2, + NumMessages: 17, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_authorization_v2_authorization_proto_goTypes, + DependencyIndexes: file_authorization_v2_authorization_proto_depIdxs, + EnumInfos: file_authorization_v2_authorization_proto_enumTypes, + MessageInfos: file_authorization_v2_authorization_proto_msgTypes, + }.Build() + File_authorization_v2_authorization_proto = out.File + file_authorization_v2_authorization_proto_rawDesc = nil + file_authorization_v2_authorization_proto_goTypes = nil + file_authorization_v2_authorization_proto_depIdxs = nil +} diff --git a/protocol/go/authorization/v2/authorization.pb.gw.go b/protocol/go/authorization/v2/authorization.pb.gw.go new file mode 100644 index 0000000000..52c346aced --- /dev/null +++ b/protocol/go/authorization/v2/authorization.pb.gw.go @@ -0,0 +1,250 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: authorization/v2/authorization.proto + +/* +Package authorizationv2 is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package authorizationv2 + +import ( + "context" + "io" + "net/http" + + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = metadata.Join + +func request_AuthorizationService_GetDecisions_0(ctx context.Context, marshaler runtime.Marshaler, client AuthorizationServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetDecisionsRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetDecisions(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_AuthorizationService_GetDecisions_0(ctx context.Context, marshaler runtime.Marshaler, server AuthorizationServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetDecisionsRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.GetDecisions(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_AuthorizationService_GetDecisionsByToken_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_AuthorizationService_GetDecisionsByToken_0(ctx context.Context, marshaler runtime.Marshaler, client AuthorizationServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetDecisionsByTokenRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AuthorizationService_GetDecisionsByToken_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetDecisionsByToken(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_AuthorizationService_GetDecisionsByToken_0(ctx context.Context, marshaler runtime.Marshaler, server AuthorizationServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetDecisionsByTokenRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AuthorizationService_GetDecisionsByToken_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.GetDecisionsByToken(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterAuthorizationServiceHandlerServer registers the http handlers for service AuthorizationService to "mux". +// UnaryRPC :call AuthorizationServiceServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterAuthorizationServiceHandlerFromEndpoint instead. +func RegisterAuthorizationServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server AuthorizationServiceServer) error { + + mux.Handle("POST", pattern_AuthorizationService_GetDecisions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/authorization.v2.AuthorizationService/GetDecisions", runtime.WithHTTPPathPattern("/v1/authorization")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_AuthorizationService_GetDecisions_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_AuthorizationService_GetDecisions_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_AuthorizationService_GetDecisionsByToken_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/authorization.v2.AuthorizationService/GetDecisionsByToken", runtime.WithHTTPPathPattern("/v1/token/authorization")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_AuthorizationService_GetDecisionsByToken_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_AuthorizationService_GetDecisionsByToken_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterAuthorizationServiceHandlerFromEndpoint is same as RegisterAuthorizationServiceHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterAuthorizationServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.DialContext(ctx, endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterAuthorizationServiceHandler(ctx, mux, conn) +} + +// RegisterAuthorizationServiceHandler registers the http handlers for service AuthorizationService to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterAuthorizationServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterAuthorizationServiceHandlerClient(ctx, mux, NewAuthorizationServiceClient(conn)) +} + +// RegisterAuthorizationServiceHandlerClient registers the http handlers for service AuthorizationService +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "AuthorizationServiceClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "AuthorizationServiceClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "AuthorizationServiceClient" to call the correct interceptors. +func RegisterAuthorizationServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client AuthorizationServiceClient) error { + + mux.Handle("POST", pattern_AuthorizationService_GetDecisions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/authorization.v2.AuthorizationService/GetDecisions", runtime.WithHTTPPathPattern("/v1/authorization")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AuthorizationService_GetDecisions_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_AuthorizationService_GetDecisions_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_AuthorizationService_GetDecisionsByToken_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/authorization.v2.AuthorizationService/GetDecisionsByToken", runtime.WithHTTPPathPattern("/v1/token/authorization")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_AuthorizationService_GetDecisionsByToken_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_AuthorizationService_GetDecisionsByToken_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_AuthorizationService_GetDecisions_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "authorization"}, "")) + + pattern_AuthorizationService_GetDecisionsByToken_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "token", "authorization"}, "")) +) + +var ( + forward_AuthorizationService_GetDecisions_0 = runtime.ForwardResponseMessage + + forward_AuthorizationService_GetDecisionsByToken_0 = runtime.ForwardResponseMessage +) diff --git a/protocol/go/authorization/v2/authorization_grpc.pb.go b/protocol/go/authorization/v2/authorization_grpc.pb.go new file mode 100644 index 0000000000..63311eff85 --- /dev/null +++ b/protocol/go/authorization/v2/authorization_grpc.pb.go @@ -0,0 +1,183 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc (unknown) +// source: authorization/v2/authorization.proto + +package authorizationv2 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + AuthorizationService_GetDecisions_FullMethodName = "/authorization.v2.AuthorizationService/GetDecisions" + AuthorizationService_GetDecisionsByToken_FullMethodName = "/authorization.v2.AuthorizationService/GetDecisionsByToken" + AuthorizationService_GetEntitlements_FullMethodName = "/authorization.v2.AuthorizationService/GetEntitlements" +) + +// AuthorizationServiceClient is the client API for AuthorizationService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type AuthorizationServiceClient interface { + GetDecisions(ctx context.Context, in *GetDecisionsRequest, opts ...grpc.CallOption) (*GetDecisionsResponse, error) + GetDecisionsByToken(ctx context.Context, in *GetDecisionsByTokenRequest, opts ...grpc.CallOption) (*GetDecisionsByTokenResponse, error) + GetEntitlements(ctx context.Context, in *GetEntitlementsRequest, opts ...grpc.CallOption) (*GetEntitlementsResponse, error) +} + +type authorizationServiceClient struct { + cc grpc.ClientConnInterface +} + +func NewAuthorizationServiceClient(cc grpc.ClientConnInterface) AuthorizationServiceClient { + return &authorizationServiceClient{cc} +} + +func (c *authorizationServiceClient) GetDecisions(ctx context.Context, in *GetDecisionsRequest, opts ...grpc.CallOption) (*GetDecisionsResponse, error) { + out := new(GetDecisionsResponse) + err := c.cc.Invoke(ctx, AuthorizationService_GetDecisions_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *authorizationServiceClient) GetDecisionsByToken(ctx context.Context, in *GetDecisionsByTokenRequest, opts ...grpc.CallOption) (*GetDecisionsByTokenResponse, error) { + out := new(GetDecisionsByTokenResponse) + err := c.cc.Invoke(ctx, AuthorizationService_GetDecisionsByToken_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *authorizationServiceClient) GetEntitlements(ctx context.Context, in *GetEntitlementsRequest, opts ...grpc.CallOption) (*GetEntitlementsResponse, error) { + out := new(GetEntitlementsResponse) + err := c.cc.Invoke(ctx, AuthorizationService_GetEntitlements_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// AuthorizationServiceServer is the server API for AuthorizationService service. +// All implementations must embed UnimplementedAuthorizationServiceServer +// for forward compatibility +type AuthorizationServiceServer interface { + GetDecisions(context.Context, *GetDecisionsRequest) (*GetDecisionsResponse, error) + GetDecisionsByToken(context.Context, *GetDecisionsByTokenRequest) (*GetDecisionsByTokenResponse, error) + GetEntitlements(context.Context, *GetEntitlementsRequest) (*GetEntitlementsResponse, error) + mustEmbedUnimplementedAuthorizationServiceServer() +} + +// UnimplementedAuthorizationServiceServer must be embedded to have forward compatible implementations. +type UnimplementedAuthorizationServiceServer struct { +} + +func (UnimplementedAuthorizationServiceServer) GetDecisions(context.Context, *GetDecisionsRequest) (*GetDecisionsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetDecisions not implemented") +} +func (UnimplementedAuthorizationServiceServer) GetDecisionsByToken(context.Context, *GetDecisionsByTokenRequest) (*GetDecisionsByTokenResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetDecisionsByToken not implemented") +} +func (UnimplementedAuthorizationServiceServer) GetEntitlements(context.Context, *GetEntitlementsRequest) (*GetEntitlementsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetEntitlements not implemented") +} +func (UnimplementedAuthorizationServiceServer) mustEmbedUnimplementedAuthorizationServiceServer() {} + +// UnsafeAuthorizationServiceServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to AuthorizationServiceServer will +// result in compilation errors. +type UnsafeAuthorizationServiceServer interface { + mustEmbedUnimplementedAuthorizationServiceServer() +} + +func RegisterAuthorizationServiceServer(s grpc.ServiceRegistrar, srv AuthorizationServiceServer) { + s.RegisterService(&AuthorizationService_ServiceDesc, srv) +} + +func _AuthorizationService_GetDecisions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetDecisionsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AuthorizationServiceServer).GetDecisions(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: AuthorizationService_GetDecisions_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AuthorizationServiceServer).GetDecisions(ctx, req.(*GetDecisionsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _AuthorizationService_GetDecisionsByToken_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetDecisionsByTokenRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AuthorizationServiceServer).GetDecisionsByToken(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: AuthorizationService_GetDecisionsByToken_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AuthorizationServiceServer).GetDecisionsByToken(ctx, req.(*GetDecisionsByTokenRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _AuthorizationService_GetEntitlements_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetEntitlementsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AuthorizationServiceServer).GetEntitlements(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: AuthorizationService_GetEntitlements_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AuthorizationServiceServer).GetEntitlements(ctx, req.(*GetEntitlementsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// AuthorizationService_ServiceDesc is the grpc.ServiceDesc for AuthorizationService service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var AuthorizationService_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "authorization.v2.AuthorizationService", + HandlerType: (*AuthorizationServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "GetDecisions", + Handler: _AuthorizationService_GetDecisions_Handler, + }, + { + MethodName: "GetDecisionsByToken", + Handler: _AuthorizationService_GetDecisionsByToken_Handler, + }, + { + MethodName: "GetEntitlements", + Handler: _AuthorizationService_GetEntitlements_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "authorization/v2/authorization.proto", +} diff --git a/protocol/go/authorization/v2/authorizationv2connect/authorization.connect.go b/protocol/go/authorization/v2/authorizationv2connect/authorization.connect.go new file mode 100644 index 0000000000..bbaeaeda32 --- /dev/null +++ b/protocol/go/authorization/v2/authorizationv2connect/authorization.connect.go @@ -0,0 +1,174 @@ +// Code generated by protoc-gen-connect-go. DO NOT EDIT. +// +// Source: authorization/v2/authorization.proto + +package authorizationv2connect + +import ( + connect "connectrpc.com/connect" + context "context" + errors "errors" + v2 "github.com/opentdf/platform/protocol/go/authorization/v2" + http "net/http" + strings "strings" +) + +// This is a compile-time assertion to ensure that this generated file and the connect package are +// compatible. If you get a compiler error that this constant is not defined, this code was +// generated with a version of connect newer than the one compiled into your binary. You can fix the +// problem by either regenerating this code with an older version of connect or updating the connect +// version compiled into your binary. +const _ = connect.IsAtLeastVersion1_13_0 + +const ( + // AuthorizationServiceName is the fully-qualified name of the AuthorizationService service. + AuthorizationServiceName = "authorization.v2.AuthorizationService" +) + +// These constants are the fully-qualified names of the RPCs defined in this package. They're +// exposed at runtime as Spec.Procedure and as the final two segments of the HTTP route. +// +// Note that these are different from the fully-qualified method names used by +// google.golang.org/protobuf/reflect/protoreflect. To convert from these constants to +// reflection-formatted method names, remove the leading slash and convert the remaining slash to a +// period. +const ( + // AuthorizationServiceGetDecisionsProcedure is the fully-qualified name of the + // AuthorizationService's GetDecisions RPC. + AuthorizationServiceGetDecisionsProcedure = "/authorization.v2.AuthorizationService/GetDecisions" + // AuthorizationServiceGetDecisionsByTokenProcedure is the fully-qualified name of the + // AuthorizationService's GetDecisionsByToken RPC. + AuthorizationServiceGetDecisionsByTokenProcedure = "/authorization.v2.AuthorizationService/GetDecisionsByToken" + // AuthorizationServiceGetEntitlementsProcedure is the fully-qualified name of the + // AuthorizationService's GetEntitlements RPC. + AuthorizationServiceGetEntitlementsProcedure = "/authorization.v2.AuthorizationService/GetEntitlements" +) + +// These variables are the protoreflect.Descriptor objects for the RPCs defined in this package. +var ( + authorizationServiceServiceDescriptor = v2.File_authorization_v2_authorization_proto.Services().ByName("AuthorizationService") + authorizationServiceGetDecisionsMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetDecisions") + authorizationServiceGetDecisionsByTokenMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetDecisionsByToken") + authorizationServiceGetEntitlementsMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetEntitlements") +) + +// AuthorizationServiceClient is a client for the authorization.v2.AuthorizationService service. +type AuthorizationServiceClient interface { + GetDecisions(context.Context, *connect.Request[v2.GetDecisionsRequest]) (*connect.Response[v2.GetDecisionsResponse], error) + GetDecisionsByToken(context.Context, *connect.Request[v2.GetDecisionsByTokenRequest]) (*connect.Response[v2.GetDecisionsByTokenResponse], error) + GetEntitlements(context.Context, *connect.Request[v2.GetEntitlementsRequest]) (*connect.Response[v2.GetEntitlementsResponse], error) +} + +// NewAuthorizationServiceClient constructs a client for the authorization.v2.AuthorizationService +// service. By default, it uses the Connect protocol with the binary Protobuf Codec, asks for +// gzipped responses, and sends uncompressed requests. To use the gRPC or gRPC-Web protocols, supply +// the connect.WithGRPC() or connect.WithGRPCWeb() options. +// +// The URL supplied here should be the base URL for the Connect or gRPC server (for example, +// http://api.acme.com or https://acme.com/grpc). +func NewAuthorizationServiceClient(httpClient connect.HTTPClient, baseURL string, opts ...connect.ClientOption) AuthorizationServiceClient { + baseURL = strings.TrimRight(baseURL, "/") + return &authorizationServiceClient{ + getDecisions: connect.NewClient[v2.GetDecisionsRequest, v2.GetDecisionsResponse]( + httpClient, + baseURL+AuthorizationServiceGetDecisionsProcedure, + connect.WithSchema(authorizationServiceGetDecisionsMethodDescriptor), + connect.WithClientOptions(opts...), + ), + getDecisionsByToken: connect.NewClient[v2.GetDecisionsByTokenRequest, v2.GetDecisionsByTokenResponse]( + httpClient, + baseURL+AuthorizationServiceGetDecisionsByTokenProcedure, + connect.WithSchema(authorizationServiceGetDecisionsByTokenMethodDescriptor), + connect.WithClientOptions(opts...), + ), + getEntitlements: connect.NewClient[v2.GetEntitlementsRequest, v2.GetEntitlementsResponse]( + httpClient, + baseURL+AuthorizationServiceGetEntitlementsProcedure, + connect.WithSchema(authorizationServiceGetEntitlementsMethodDescriptor), + connect.WithClientOptions(opts...), + ), + } +} + +// authorizationServiceClient implements AuthorizationServiceClient. +type authorizationServiceClient struct { + getDecisions *connect.Client[v2.GetDecisionsRequest, v2.GetDecisionsResponse] + getDecisionsByToken *connect.Client[v2.GetDecisionsByTokenRequest, v2.GetDecisionsByTokenResponse] + getEntitlements *connect.Client[v2.GetEntitlementsRequest, v2.GetEntitlementsResponse] +} + +// GetDecisions calls authorization.v2.AuthorizationService.GetDecisions. +func (c *authorizationServiceClient) GetDecisions(ctx context.Context, req *connect.Request[v2.GetDecisionsRequest]) (*connect.Response[v2.GetDecisionsResponse], error) { + return c.getDecisions.CallUnary(ctx, req) +} + +// GetDecisionsByToken calls authorization.v2.AuthorizationService.GetDecisionsByToken. +func (c *authorizationServiceClient) GetDecisionsByToken(ctx context.Context, req *connect.Request[v2.GetDecisionsByTokenRequest]) (*connect.Response[v2.GetDecisionsByTokenResponse], error) { + return c.getDecisionsByToken.CallUnary(ctx, req) +} + +// GetEntitlements calls authorization.v2.AuthorizationService.GetEntitlements. +func (c *authorizationServiceClient) GetEntitlements(ctx context.Context, req *connect.Request[v2.GetEntitlementsRequest]) (*connect.Response[v2.GetEntitlementsResponse], error) { + return c.getEntitlements.CallUnary(ctx, req) +} + +// AuthorizationServiceHandler is an implementation of the authorization.v2.AuthorizationService +// service. +type AuthorizationServiceHandler interface { + GetDecisions(context.Context, *connect.Request[v2.GetDecisionsRequest]) (*connect.Response[v2.GetDecisionsResponse], error) + GetDecisionsByToken(context.Context, *connect.Request[v2.GetDecisionsByTokenRequest]) (*connect.Response[v2.GetDecisionsByTokenResponse], error) + GetEntitlements(context.Context, *connect.Request[v2.GetEntitlementsRequest]) (*connect.Response[v2.GetEntitlementsResponse], error) +} + +// NewAuthorizationServiceHandler builds an HTTP handler from the service implementation. It returns +// the path on which to mount the handler and the handler itself. +// +// By default, handlers support the Connect, gRPC, and gRPC-Web protocols with the binary Protobuf +// and JSON codecs. They also support gzip compression. +func NewAuthorizationServiceHandler(svc AuthorizationServiceHandler, opts ...connect.HandlerOption) (string, http.Handler) { + authorizationServiceGetDecisionsHandler := connect.NewUnaryHandler( + AuthorizationServiceGetDecisionsProcedure, + svc.GetDecisions, + connect.WithSchema(authorizationServiceGetDecisionsMethodDescriptor), + connect.WithHandlerOptions(opts...), + ) + authorizationServiceGetDecisionsByTokenHandler := connect.NewUnaryHandler( + AuthorizationServiceGetDecisionsByTokenProcedure, + svc.GetDecisionsByToken, + connect.WithSchema(authorizationServiceGetDecisionsByTokenMethodDescriptor), + connect.WithHandlerOptions(opts...), + ) + authorizationServiceGetEntitlementsHandler := connect.NewUnaryHandler( + AuthorizationServiceGetEntitlementsProcedure, + svc.GetEntitlements, + connect.WithSchema(authorizationServiceGetEntitlementsMethodDescriptor), + connect.WithHandlerOptions(opts...), + ) + return "/authorization.v2.AuthorizationService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + switch r.URL.Path { + case AuthorizationServiceGetDecisionsProcedure: + authorizationServiceGetDecisionsHandler.ServeHTTP(w, r) + case AuthorizationServiceGetDecisionsByTokenProcedure: + authorizationServiceGetDecisionsByTokenHandler.ServeHTTP(w, r) + case AuthorizationServiceGetEntitlementsProcedure: + authorizationServiceGetEntitlementsHandler.ServeHTTP(w, r) + default: + http.NotFound(w, r) + } + }) +} + +// UnimplementedAuthorizationServiceHandler returns CodeUnimplemented from all methods. +type UnimplementedAuthorizationServiceHandler struct{} + +func (UnimplementedAuthorizationServiceHandler) GetDecisions(context.Context, *connect.Request[v2.GetDecisionsRequest]) (*connect.Response[v2.GetDecisionsResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("authorization.v2.AuthorizationService.GetDecisions is not implemented")) +} + +func (UnimplementedAuthorizationServiceHandler) GetDecisionsByToken(context.Context, *connect.Request[v2.GetDecisionsByTokenRequest]) (*connect.Response[v2.GetDecisionsByTokenResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("authorization.v2.AuthorizationService.GetDecisionsByToken is not implemented")) +} + +func (UnimplementedAuthorizationServiceHandler) GetEntitlements(context.Context, *connect.Request[v2.GetEntitlementsRequest]) (*connect.Response[v2.GetEntitlementsResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("authorization.v2.AuthorizationService.GetEntitlements is not implemented")) +} diff --git a/service/authorization/authorization.proto b/service/authorization/authorization.proto index 23788acdaf..39801a3aff 100644 --- a/service/authorization/authorization.proto +++ b/service/authorization/authorization.proto @@ -156,7 +156,6 @@ message GetDecisionsResponse { repeated DecisionResponse decision_responses = 1; } -// Deprecated: use GetEntitlementsV2Request instead message GetEntitlementsRequest { // list of requested entities repeated Entity entities = 1; @@ -166,46 +165,21 @@ message GetEntitlementsRequest { optional bool with_comprehensive_hierarchy = 3; } -message GetEntitlementsV2Request { - // list of requested entities - repeated Entity entities = 1; - // optional attribute fqn as a scope - optional ResourceAttribute scope = 2; - // optional parameter to return a full list of entitlements - returns lower hierarchy attributes - optional bool with_comprehensive_hierarchy = 3; -} - -// Deprecated: use EntityEntitlementsV2 instead message EntityEntitlements { string entity_id = 1; repeated string attribute_value_fqns = 2; } -// Entitlements for a given entity, mapping each attribute value FQN to any entitled actions[] -message EntityEntitlementsV2 { - message ActionsList { - repeated policy.Action actions = 1; - } - - string entity_id = 1; - map actions_per_attribute_value_fqn = 2; -} - //A logical bucket of attributes belonging to a "Resource" message ResourceAttribute { string resource_attributes_id = 1; repeated string attribute_value_fqns = 2; } -// Deprecated: use GetEntitlementsV2Request instead message GetEntitlementsResponse { repeated EntityEntitlements entitlements = 1; } -message GetEntitlementsV2Response { - repeated EntityEntitlementsV2 entitlements = 1; -} - /* Example Request Get Decisions by Token to answer the question - Do Bob and client1 (represented by token tok1) and Alice and client2 (represented by token tok2) have TRANSMIT authorization for @@ -273,5 +247,4 @@ service AuthorizationService { body: "*" }; } - rpc GetEntitlementsV2(GetEntitlementsV2Request) returns (GetEntitlementsV2Response) {} } diff --git a/service/authorization/v2/authorization.proto b/service/authorization/v2/authorization.proto new file mode 100644 index 0000000000..99ba5262c2 --- /dev/null +++ b/service/authorization/v2/authorization.proto @@ -0,0 +1,213 @@ +syntax = "proto3"; + +package authorization.v2; + +import "google/api/annotations.proto"; +import "google/protobuf/any.proto"; +import "policy/objects.proto"; + +message Token { + string id = 1; // ephemeral id for tracking between request and response + string jwt = 2; // the token +} + +// PE (Person Entity) or NPE (Non-Person Entity) +message Entity { + string id = 1; // ephemeral id for tracking between request and response + // Standard entity types supported by the platform + oneof entity_type { + // one of the entity options must be set + string email_address = 2; + string user_name = 3; + string remote_claims_url = 4; + string uuid = 5; + google.protobuf.Any claims = 6; + EntityCustom custom = 7; + string client_id = 8; + } + enum Category { + CATEGORY_UNSPECIFIED = 0; + CATEGORY_SUBJECT = 1; + CATEGORY_ENVIRONMENT = 2; + } + Category category = 9; +} + +// Entity type for custom entities beyond the standard types +message EntityCustom { + google.protobuf.Any extension = 1; +} + +// A set of related PE and NPE +message EntityChain { + string id = 1; // ephemeral id for tracking between request and response + repeated Entity entities = 2; +} + +/* + Example Request Get Decisions to answer the question - Do Bob (represented by entity chain ec1) + and Alice (represented by entity chain ec2) have TRANSMIT authorization for + 2 resources; resource1 (attr-set-1) defined by attributes foo:bar resource2 (attr-set-2) defined by attribute foo:bar, color:red ? + + { + "actions": [ + { + "standard": "STANDARD_ACTION_TRANSMIT" + } + ], + "entityChains": [ + { + "id": "ec1", + "entities": [ + { + "emailAddress": "bob@example.org" + } + ] + }, + { + "id": "ec2", + "entities": [ + { + "userName": "alice@example.org" + } + ] + } + ], + "resourceAttributes": [ + { + "resourceAttributeId": "attr-set-1", + "attributeFqns": [ + "https://www.example.org/attr/foo/value/value1" + ] + }, + { + "resourceAttributeId": "attr-set-2", + "attributeFqns": [ + "https://example.net/attr/attr1/value/value1", + "https://example.net/attr/attr1/value/value2" + ] + } + ] + } + +*/ +message DecisionRequest { + repeated policy.Action actions = 1; + repeated EntityChain entity_chains = 2; + repeated ResourceAttribute resource_attributes = 3; +} + +/* + + Example response for a Decision Request - Do Bob (represented by entity chain ec1) + and Alice (represented by entity chain ec2) have TRANSMIT authorization for + 2 resources; resource1 (attr-set-1) defined by attributes foo:bar resource2 (attr-set-2) defined by attribute foo:bar, color:red ? + + Results: + - bob has permitted authorization to transmit for a resource defined by attr-set-1 attributes and has a watermark obligation + - bob has denied authorization to transmit a for a resource defined by attr-set-2 attributes + - alice has permitted authorization to transmit for a resource defined by attr-set-1 attributes + - alice has denied authorization to transmit a for a resource defined by attr-set-2 attributes + + { + "entityChainId": "ec1", + "resourceAttributesId": "attr-set-1", + "decision": "DECISION_PERMIT", + "obligations": [ + "http://www.example.org/obligation/watermark" + ] + }, + { + "entityChainId": "ec1", + "resourceAttributesId": "attr-set-2", + "decision": "DECISION_PERMIT" + }, + { + "entityChainId": "ec2", + "resourceAttributesId": "attr-set-1", + "decision": "DECISION_PERMIT" + }, + { + "entityChainId": "ec2", + "resourceAttributesId": "attr-set-2", + "decision": "DECISION_DENY" + } + + +*/ +message DecisionResponse { + enum Decision { + DECISION_UNSPECIFIED = 0; + DECISION_DENY = 1; + DECISION_PERMIT = 2; + } + string entity_chain_id = 1; // ephemeral entity chain id from the request + string resource_attributes_id = 2; // ephemeral resource attributes id from the request + policy.Action action = 3; // Action of the decision response + Decision decision = 4; // The decision response + repeated string obligations = 5; //optional list of obligations represented in URI format +} + +message GetDecisionsRequest { + repeated DecisionRequest decision_requests = 1; +} + +message GetDecisionsResponse { + repeated DecisionResponse decision_responses = 1; +} + +message GetEntitlementsRequest { + // list of requested entities + repeated Entity entities = 1; + // optional attribute fqn as a scope + optional ResourceAttribute scope = 2; + // optional parameter to return a full list of entitlements - returns lower hierarchy attributes + optional bool with_comprehensive_hierarchy = 3; +} + +// Entitlements for a given entity, mapping each attribute value FQN to any entitled actions[] +message EntityEntitlements { + message ActionsList { + repeated policy.Action actions = 1; + } + + string entity_id = 1; + map actions_per_attribute_value_fqn = 2; +} + +//A logical bucket of attributes belonging to a "Resource" +message ResourceAttribute { + string resource_attributes_id = 1; + repeated string attribute_value_fqns = 2; +} + +message GetEntitlementsResponse { + repeated EntityEntitlements entitlements = 1; +} + +message TokenDecisionRequest { + repeated policy.Action actions = 1; + repeated Token tokens = 2; + repeated ResourceAttribute resource_attributes = 3; +} + +message GetDecisionsByTokenRequest { + repeated TokenDecisionRequest decision_requests = 1; +} + +message GetDecisionsByTokenResponse { + repeated DecisionResponse decision_responses = 1; +} + +service AuthorizationService { + rpc GetDecisions(GetDecisionsRequest) returns (GetDecisionsResponse) { + option (google.api.http) = { + post: "/v1/authorization" + body: "*" + }; + } + rpc GetDecisionsByToken(GetDecisionsByTokenRequest) returns (GetDecisionsByTokenResponse) { + option (google.api.http) = {post: "/v1/token/authorization"}; + } + rpc GetEntitlements(GetEntitlementsRequest) returns (GetEntitlementsResponse) {} +} From 65fd6914e5a2317fb24bdb2615650850019d8999 Mon Sep 17 00:00:00 2001 From: jakedoublev Date: Tue, 29 Apr 2025 07:38:57 -0700 Subject: [PATCH 04/49] put back auth service change accidentally committed --- service/authorization/authorization.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/service/authorization/authorization.go b/service/authorization/authorization.go index 35c879ac8d..f00dbe1972 100644 --- a/service/authorization/authorization.go +++ b/service/authorization/authorization.go @@ -361,7 +361,7 @@ func (as *AuthorizationService) getDecisions(ctx context.Context, dr *authorizat // Entitlements for environment entites in chain envEntityAttrValues := make(map[string][]string) // Entitlementsfor sbuject entities in chain - subjectEntityAttrValues := make(access.EntityIDsToEntitlements) + subjectEntityAttrValues := make(map[string][]string) // handle empty entity / attr list decision := authorization.DecisionResponse_DECISION_DENY From 288592d8adf3792c28134f272dd470a454868855 Mon Sep 17 00:00:00 2001 From: jakedoublev Date: Tue, 29 Apr 2025 08:50:07 -0700 Subject: [PATCH 05/49] latest changes --- docs/grpc/index.html | 88 +- .../v2/authorization.swagger.json | 68 +- .../go/authorization/v2/authorization.pb.go | 753 ++++++++++-------- service/authorization/v2/authorization.proto | 118 +-- 4 files changed, 584 insertions(+), 443 deletions(-) diff --git a/docs/grpc/index.html b/docs/grpc/index.html index 2928bd2031..2aa986cb90 100644 --- a/docs/grpc/index.html +++ b/docs/grpc/index.html @@ -464,7 +464,15 @@

    Table of Contents

  • - MResourceAttribute + MResource +
  • + +
  • + MResource.AttributeValues +
  • + +
  • + MResource.RegisteredResources
  • @@ -3670,7 +3678,7 @@

    authorization/v2/authorization.pro

    DecisionRequest

    -

    Example Request Get Decisions to answer the question - Do Bob (represented by entity chain ec1)

    and Alice (represented by entity chain ec2) have TRANSMIT authorization for

    2 resources; resource1 (attr-set-1) defined by attributes foo:bar resource2 (attr-set-2) defined by attribute foo:bar, color:red ?

    {

    "actions": [

    {

    "standard": "STANDARD_ACTION_TRANSMIT"

    }

    ],

    "entityChains": [

    {

    "id": "ec1",

    "entities": [

    {

    "emailAddress": "bob@example.org"

    }

    ]

    },

    {

    "id": "ec2",

    "entities": [

    {

    "userName": "alice@example.org"

    }

    ]

    }

    ],

    "resourceAttributes": [

    {

    "resourceAttributeId": "attr-set-1",

    "attributeFqns": [

    "https://www.example.org/attr/foo/value/value1"

    ]

    },

    {

    "resourceAttributeId": "attr-set-2",

    "attributeFqns": [

    "https://example.net/attr/attr1/value/value1",

    "https://example.net/attr/attr1/value/value2"

    ]

    }

    ]

    }

    +

    Can the entity (PE or NPE) represented by each entity chain take the provided actions on the set of resources

    @@ -3695,7 +3703,7 @@

    DecisionRequest

    - + @@ -3708,7 +3716,7 @@

    DecisionRequest

    DecisionResponse

    -

    Example response for a Decision Request - Do Bob (represented by entity chain ec1)

    and Alice (represented by entity chain ec2) have TRANSMIT authorization for

    2 resources; resource1 (attr-set-1) defined by attributes foo:bar resource2 (attr-set-2) defined by attribute foo:bar, color:red ?

    Results:

    - bob has permitted authorization to transmit for a resource defined by attr-set-1 attributes and has a watermark obligation

    - bob has denied authorization to transmit a for a resource defined by attr-set-2 attributes

    - alice has permitted authorization to transmit for a resource defined by attr-set-1 attributes

    - alice has denied authorization to transmit a for a resource defined by attr-set-2 attributes

    {

    "entityChainId": "ec1",

    "resourceAttributesId": "attr-set-1",

    "decision": "DECISION_PERMIT",

    "obligations": [

    "http://www.example.org/obligation/watermark"

    ]

    },

    {

    "entityChainId": "ec1",

    "resourceAttributesId": "attr-set-2",

    "decision": "DECISION_PERMIT"

    },

    {

    "entityChainId": "ec2",

    "resourceAttributesId": "attr-set-1",

    "decision": "DECISION_PERMIT"

    },

    {

    "entityChainId": "ec2",

    "resourceAttributesId": "attr-set-2",

    "decision": "DECISION_DENY"

    }

    +

    resource_attributesResourceAttributeResource repeated

    @@ -3825,6 +3833,13 @@

    Entity

    + + + + + + + @@ -4095,7 +4110,7 @@

    GetEntitlementsRequest

    - + @@ -4138,7 +4153,7 @@

    GetEntitlementsResponse

    -

    ResourceAttribute

    +

    Resource

    A logical bucket of attributes belonging to a "Resource"

    @@ -4149,14 +4164,45 @@

    ResourceAttribute

    - + - + + + + + + + + + + + + + + +

    registered_resource_identifierstring

    FQN or URN (when supported)

    category Entity.Category
    scopeResourceAttributeResource optional

    optional attribute fqn as a scope

    resource_attributes_idephemeral_id string

    attribute_value_fqnsattribute_valuesResource.AttributeValues

    registered_resourcesResource.RegisteredResources

    + + + + + +

    Resource.AttributeValues

    +

    + + + + + + + + + + @@ -4169,6 +4215,30 @@

    ResourceAttribute

    +

    Resource.RegisteredResources

    +

    + + +
    FieldTypeLabelDescription
    fqn string repeated

    + + + + + + + + + + + + + +
    FieldTypeLabelDescription
    identifierstringrepeated

    FQN or URN (when supported)

    + + + + +

    Token

    @@ -4226,7 +4296,7 @@

    TokenDecisionRequest

    resource_attributes - ResourceAttribute + Resource repeated

    diff --git a/docs/openapi/authorization/v2/authorization.swagger.json b/docs/openapi/authorization/v2/authorization.swagger.json index fe3e774efe..fec7633939 100644 --- a/docs/openapi/authorization/v2/authorization.swagger.json +++ b/docs/openapi/authorization/v2/authorization.swagger.json @@ -94,6 +94,29 @@ } } }, + "ResourceAttributeValues": { + "type": "object", + "properties": { + "fqn": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "ResourceRegisteredResources": { + "type": "object", + "properties": { + "identifier": { + "type": "array", + "items": { + "type": "string" + }, + "title": "FQN or URN (when supported)" + } + } + }, "authorizationv2DecisionRequest": { "type": "object", "properties": { @@ -115,12 +138,11 @@ "type": "array", "items": { "type": "object", - "$ref": "#/definitions/authorizationv2ResourceAttribute" + "$ref": "#/definitions/v2Resource" } } }, - "description": "{\n\"actions\": [\n{\n\"standard\": \"STANDARD_ACTION_TRANSMIT\"\n}\n],\n\"entityChains\": [\n{\n\"id\": \"ec1\",\n\"entities\": [\n{\n\"emailAddress\": \"bob@example.org\"\n}\n]\n},\n{\n\"id\": \"ec2\",\n\"entities\": [\n{\n\"userName\": \"alice@example.org\"\n}\n]\n}\n],\n\"resourceAttributes\": [\n{\n\"resourceAttributeId\": \"attr-set-1\",\n\"attributeFqns\": [\n\"https://www.example.org/attr/foo/value/value1\"\n]\n},\n{\n\"resourceAttributeId\": \"attr-set-2\",\n\"attributeFqns\": [\n\"https://example.net/attr/attr1/value/value1\",\n\"https://example.net/attr/attr1/value/value2\"\n]\n}\n]\n}", - "title": "Example Request Get Decisions to answer the question - Do Bob (represented by entity chain ec1)\nand Alice (represented by entity chain ec2) have TRANSMIT authorization for\n2 resources; resource1 (attr-set-1) defined by attributes foo:bar resource2 (attr-set-2) defined by attribute foo:bar, color:red ?" + "title": "Can the entity (PE or NPE) represented by each entity chain take the provided actions on the set of resources" }, "authorizationv2DecisionResponse": { "type": "object", @@ -148,9 +170,7 @@ }, "title": "optional list of obligations represented in URI format" } - }, - "description": "Results:\n- bob has permitted authorization to transmit for a resource defined by attr-set-1 attributes and has a watermark obligation\n- bob has denied authorization to transmit a for a resource defined by attr-set-2 attributes\n- alice has permitted authorization to transmit for a resource defined by attr-set-1 attributes\n- alice has denied authorization to transmit a for a resource defined by attr-set-2 attributes\n\n{\n\"entityChainId\": \"ec1\",\n\"resourceAttributesId\": \"attr-set-1\",\n\"decision\": \"DECISION_PERMIT\",\n\"obligations\": [\n\"http://www.example.org/obligation/watermark\"\n]\n},\n{\n\"entityChainId\": \"ec1\",\n\"resourceAttributesId\": \"attr-set-2\",\n\"decision\": \"DECISION_PERMIT\"\n},\n{\n\"entityChainId\": \"ec2\",\n\"resourceAttributesId\": \"attr-set-1\",\n\"decision\": \"DECISION_PERMIT\"\n},\n{\n\"entityChainId\": \"ec2\",\n\"resourceAttributesId\": \"attr-set-2\",\n\"decision\": \"DECISION_DENY\"\n}", - "title": "Example response for a Decision Request - Do Bob (represented by entity chain ec1)\nand Alice (represented by entity chain ec2) have TRANSMIT authorization for\n2 resources; resource1 (attr-set-1) defined by attributes foo:bar resource2 (attr-set-2) defined by attribute foo:bar, color:red ?" + } }, "authorizationv2DecisionResponseDecision": { "type": "string", @@ -190,6 +210,10 @@ "clientId": { "type": "string" }, + "registeredResourceIdentifier": { + "type": "string", + "title": "FQN or URN (when supported)" + }, "category": { "$ref": "#/definitions/authorizationv2EntityCategory" } @@ -294,21 +318,6 @@ } } }, - "authorizationv2ResourceAttribute": { - "type": "object", - "properties": { - "resourceAttributesId": { - "type": "string" - }, - "attributeValueFqns": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "title": "A logical bucket of attributes belonging to a \"Resource\"" - }, "authorizationv2Token": { "type": "object", "properties": { @@ -343,7 +352,7 @@ "type": "array", "items": { "type": "object", - "$ref": "#/definitions/authorizationv2ResourceAttribute" + "$ref": "#/definitions/v2Resource" } } } @@ -424,6 +433,21 @@ } } } + }, + "v2Resource": { + "type": "object", + "properties": { + "ephemeralId": { + "type": "string" + }, + "attributeValues": { + "$ref": "#/definitions/ResourceAttributeValues" + }, + "registeredResources": { + "$ref": "#/definitions/ResourceRegisteredResources" + } + }, + "title": "A logical bucket of attributes belonging to a \"Resource\"" } } } diff --git a/protocol/go/authorization/v2/authorization.pb.go b/protocol/go/authorization/v2/authorization.pb.go index f662e92b3f..01bf2403bd 100644 --- a/protocol/go/authorization/v2/authorization.pb.go +++ b/protocol/go/authorization/v2/authorization.pb.go @@ -194,6 +194,7 @@ type Entity struct { // *Entity_Claims // *Entity_Custom // *Entity_ClientId + // *Entity_RegisteredResourceIdentifier EntityType isEntity_EntityType `protobuf_oneof:"entity_type"` Category Entity_Category `protobuf:"varint,9,opt,name=category,proto3,enum=authorization.v2.Entity_Category" json:"category,omitempty"` } @@ -293,6 +294,13 @@ func (x *Entity) GetClientId() string { return "" } +func (x *Entity) GetRegisteredResourceIdentifier() string { + if x, ok := x.GetEntityType().(*Entity_RegisteredResourceIdentifier); ok { + return x.RegisteredResourceIdentifier + } + return "" +} + func (x *Entity) GetCategory() Entity_Category { if x != nil { return x.Category @@ -333,6 +341,11 @@ type Entity_ClientId struct { ClientId string `protobuf:"bytes,8,opt,name=client_id,json=clientId,proto3,oneof"` } +type Entity_RegisteredResourceIdentifier struct { + // FQN or URN (when supported) + RegisteredResourceIdentifier string `protobuf:"bytes,10,opt,name=registered_resource_identifier,json=registeredResourceIdentifier,proto3,oneof"` +} + func (*Entity_EmailAddress) isEntity_EntityType() {} func (*Entity_UserName) isEntity_EntityType() {} @@ -347,6 +360,8 @@ func (*Entity_Custom) isEntity_EntityType() {} func (*Entity_ClientId) isEntity_EntityType() {} +func (*Entity_RegisteredResourceIdentifier) isEntity_EntityType() {} + // Entity type for custom entities beyond the standard types type EntityCustom struct { state protoimpl.MessageState @@ -451,58 +466,15 @@ func (x *EntityChain) GetEntities() []*Entity { return nil } -// Example Request Get Decisions to answer the question - Do Bob (represented by entity chain ec1) -// and Alice (represented by entity chain ec2) have TRANSMIT authorization for -// 2 resources; resource1 (attr-set-1) defined by attributes foo:bar resource2 (attr-set-2) defined by attribute foo:bar, color:red ? -// -// { -// "actions": [ -// { -// "standard": "STANDARD_ACTION_TRANSMIT" -// } -// ], -// "entityChains": [ -// { -// "id": "ec1", -// "entities": [ -// { -// "emailAddress": "bob@example.org" -// } -// ] -// }, -// { -// "id": "ec2", -// "entities": [ -// { -// "userName": "alice@example.org" -// } -// ] -// } -// ], -// "resourceAttributes": [ -// { -// "resourceAttributeId": "attr-set-1", -// "attributeFqns": [ -// "https://www.example.org/attr/foo/value/value1" -// ] -// }, -// { -// "resourceAttributeId": "attr-set-2", -// "attributeFqns": [ -// "https://example.net/attr/attr1/value/value1", -// "https://example.net/attr/attr1/value/value2" -// ] -// } -// ] -// } +// Can the entity (PE or NPE) represented by each entity chain take the provided actions on the set of resources type DecisionRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Actions []*policy.Action `protobuf:"bytes,1,rep,name=actions,proto3" json:"actions,omitempty"` - EntityChains []*EntityChain `protobuf:"bytes,2,rep,name=entity_chains,json=entityChains,proto3" json:"entity_chains,omitempty"` - ResourceAttributes []*ResourceAttribute `protobuf:"bytes,3,rep,name=resource_attributes,json=resourceAttributes,proto3" json:"resource_attributes,omitempty"` + Actions []*policy.Action `protobuf:"bytes,1,rep,name=actions,proto3" json:"actions,omitempty"` + EntityChains []*EntityChain `protobuf:"bytes,2,rep,name=entity_chains,json=entityChains,proto3" json:"entity_chains,omitempty"` + ResourceAttributes []*Resource `protobuf:"bytes,3,rep,name=resource_attributes,json=resourceAttributes,proto3" json:"resource_attributes,omitempty"` } func (x *DecisionRequest) Reset() { @@ -551,46 +523,13 @@ func (x *DecisionRequest) GetEntityChains() []*EntityChain { return nil } -func (x *DecisionRequest) GetResourceAttributes() []*ResourceAttribute { +func (x *DecisionRequest) GetResourceAttributes() []*Resource { if x != nil { return x.ResourceAttributes } return nil } -// Example response for a Decision Request - Do Bob (represented by entity chain ec1) -// and Alice (represented by entity chain ec2) have TRANSMIT authorization for -// 2 resources; resource1 (attr-set-1) defined by attributes foo:bar resource2 (attr-set-2) defined by attribute foo:bar, color:red ? -// -// Results: -// - bob has permitted authorization to transmit for a resource defined by attr-set-1 attributes and has a watermark obligation -// - bob has denied authorization to transmit a for a resource defined by attr-set-2 attributes -// - alice has permitted authorization to transmit for a resource defined by attr-set-1 attributes -// - alice has denied authorization to transmit a for a resource defined by attr-set-2 attributes -// -// { -// "entityChainId": "ec1", -// "resourceAttributesId": "attr-set-1", -// "decision": "DECISION_PERMIT", -// "obligations": [ -// "http://www.example.org/obligation/watermark" -// ] -// }, -// { -// "entityChainId": "ec1", -// "resourceAttributesId": "attr-set-2", -// "decision": "DECISION_PERMIT" -// }, -// { -// "entityChainId": "ec2", -// "resourceAttributesId": "attr-set-1", -// "decision": "DECISION_PERMIT" -// }, -// { -// "entityChainId": "ec2", -// "resourceAttributesId": "attr-set-2", -// "decision": "DECISION_DENY" -// } type DecisionResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -772,7 +711,7 @@ type GetEntitlementsRequest struct { // list of requested entities Entities []*Entity `protobuf:"bytes,1,rep,name=entities,proto3" json:"entities,omitempty"` // optional attribute fqn as a scope - Scope *ResourceAttribute `protobuf:"bytes,2,opt,name=scope,proto3,oneof" json:"scope,omitempty"` + Scope *Resource `protobuf:"bytes,2,opt,name=scope,proto3,oneof" json:"scope,omitempty"` // optional parameter to return a full list of entitlements - returns lower hierarchy attributes WithComprehensiveHierarchy *bool `protobuf:"varint,3,opt,name=with_comprehensive_hierarchy,json=withComprehensiveHierarchy,proto3,oneof" json:"with_comprehensive_hierarchy,omitempty"` } @@ -816,7 +755,7 @@ func (x *GetEntitlementsRequest) GetEntities() []*Entity { return nil } -func (x *GetEntitlementsRequest) GetScope() *ResourceAttribute { +func (x *GetEntitlementsRequest) GetScope() *Resource { if x != nil { return x.Scope } @@ -887,17 +826,21 @@ func (x *EntityEntitlements) GetActionsPerAttributeValueFqn() map[string]*Entity } // A logical bucket of attributes belonging to a "Resource" -type ResourceAttribute struct { +type Resource struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ResourceAttributesId string `protobuf:"bytes,1,opt,name=resource_attributes_id,json=resourceAttributesId,proto3" json:"resource_attributes_id,omitempty"` - AttributeValueFqns []string `protobuf:"bytes,2,rep,name=attribute_value_fqns,json=attributeValueFqns,proto3" json:"attribute_value_fqns,omitempty"` + EphemeralId string `protobuf:"bytes,1,opt,name=ephemeral_id,json=ephemeralId,proto3" json:"ephemeral_id,omitempty"` + // Types that are assignable to Resource: + // + // *Resource_AttributeValues_ + // *Resource_RegisteredResources_ + Resource isResource_Resource `protobuf_oneof:"resource"` } -func (x *ResourceAttribute) Reset() { - *x = ResourceAttribute{} +func (x *Resource) Reset() { + *x = Resource{} if protoimpl.UnsafeEnabled { mi := &file_authorization_v2_authorization_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -905,13 +848,13 @@ func (x *ResourceAttribute) Reset() { } } -func (x *ResourceAttribute) String() string { +func (x *Resource) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResourceAttribute) ProtoMessage() {} +func (*Resource) ProtoMessage() {} -func (x *ResourceAttribute) ProtoReflect() protoreflect.Message { +func (x *Resource) ProtoReflect() protoreflect.Message { mi := &file_authorization_v2_authorization_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -923,25 +866,55 @@ func (x *ResourceAttribute) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ResourceAttribute.ProtoReflect.Descriptor instead. -func (*ResourceAttribute) Descriptor() ([]byte, []int) { +// Deprecated: Use Resource.ProtoReflect.Descriptor instead. +func (*Resource) Descriptor() ([]byte, []int) { return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{10} } -func (x *ResourceAttribute) GetResourceAttributesId() string { +func (x *Resource) GetEphemeralId() string { if x != nil { - return x.ResourceAttributesId + return x.EphemeralId } return "" } -func (x *ResourceAttribute) GetAttributeValueFqns() []string { - if x != nil { - return x.AttributeValueFqns +func (m *Resource) GetResource() isResource_Resource { + if m != nil { + return m.Resource + } + return nil +} + +func (x *Resource) GetAttributeValues() *Resource_AttributeValues { + if x, ok := x.GetResource().(*Resource_AttributeValues_); ok { + return x.AttributeValues } return nil } +func (x *Resource) GetRegisteredResources() *Resource_RegisteredResources { + if x, ok := x.GetResource().(*Resource_RegisteredResources_); ok { + return x.RegisteredResources + } + return nil +} + +type isResource_Resource interface { + isResource_Resource() +} + +type Resource_AttributeValues_ struct { + AttributeValues *Resource_AttributeValues `protobuf:"bytes,2,opt,name=attribute_values,json=attributeValues,proto3,oneof"` +} + +type Resource_RegisteredResources_ struct { + RegisteredResources *Resource_RegisteredResources `protobuf:"bytes,3,opt,name=registered_resources,json=registeredResources,proto3,oneof"` +} + +func (*Resource_AttributeValues_) isResource_Resource() {} + +func (*Resource_RegisteredResources_) isResource_Resource() {} + type GetEntitlementsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -994,9 +967,9 @@ type TokenDecisionRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Actions []*policy.Action `protobuf:"bytes,1,rep,name=actions,proto3" json:"actions,omitempty"` - Tokens []*Token `protobuf:"bytes,2,rep,name=tokens,proto3" json:"tokens,omitempty"` - ResourceAttributes []*ResourceAttribute `protobuf:"bytes,3,rep,name=resource_attributes,json=resourceAttributes,proto3" json:"resource_attributes,omitempty"` + Actions []*policy.Action `protobuf:"bytes,1,rep,name=actions,proto3" json:"actions,omitempty"` + Tokens []*Token `protobuf:"bytes,2,rep,name=tokens,proto3" json:"tokens,omitempty"` + ResourceAttributes []*Resource `protobuf:"bytes,3,rep,name=resource_attributes,json=resourceAttributes,proto3" json:"resource_attributes,omitempty"` } func (x *TokenDecisionRequest) Reset() { @@ -1045,7 +1018,7 @@ func (x *TokenDecisionRequest) GetTokens() []*Token { return nil } -func (x *TokenDecisionRequest) GetResourceAttributes() []*ResourceAttribute { +func (x *TokenDecisionRequest) GetResourceAttributes() []*Resource { if x != nil { return x.ResourceAttributes } @@ -1193,6 +1166,101 @@ func (x *EntityEntitlements_ActionsList) GetActions() []*policy.Action { return nil } +type Resource_AttributeValues struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Fqn []string `protobuf:"bytes,1,rep,name=fqn,proto3" json:"fqn,omitempty"` +} + +func (x *Resource_AttributeValues) Reset() { + *x = Resource_AttributeValues{} + if protoimpl.UnsafeEnabled { + mi := &file_authorization_v2_authorization_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Resource_AttributeValues) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Resource_AttributeValues) ProtoMessage() {} + +func (x *Resource_AttributeValues) ProtoReflect() protoreflect.Message { + mi := &file_authorization_v2_authorization_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Resource_AttributeValues.ProtoReflect.Descriptor instead. +func (*Resource_AttributeValues) Descriptor() ([]byte, []int) { + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{10, 0} +} + +func (x *Resource_AttributeValues) GetFqn() []string { + if x != nil { + return x.Fqn + } + return nil +} + +type Resource_RegisteredResources struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // FQN or URN (when supported) + Identifier []string `protobuf:"bytes,1,rep,name=identifier,proto3" json:"identifier,omitempty"` +} + +func (x *Resource_RegisteredResources) Reset() { + *x = Resource_RegisteredResources{} + if protoimpl.UnsafeEnabled { + mi := &file_authorization_v2_authorization_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Resource_RegisteredResources) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Resource_RegisteredResources) ProtoMessage() {} + +func (x *Resource_RegisteredResources) ProtoReflect() protoreflect.Message { + mi := &file_authorization_v2_authorization_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Resource_RegisteredResources.ProtoReflect.Descriptor instead. +func (*Resource_RegisteredResources) Descriptor() ([]byte, []int) { + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{10, 1} +} + +func (x *Resource_RegisteredResources) GetIdentifier() []string { + if x != nil { + return x.Identifier + } + return nil +} + var File_authorization_v2_authorization_proto protoreflect.FileDescriptor var file_authorization_v2_authorization_proto_rawDesc = []byte{ @@ -1207,7 +1275,7 @@ var file_authorization_v2_authorization_proto_rawDesc = []byte{ 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x29, 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6a, 0x77, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6a, - 0x77, 0x74, 0x22, 0xcf, 0x03, 0x0a, 0x06, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x0e, 0x0a, + 0x77, 0x74, 0x22, 0x97, 0x04, 0x0a, 0x06, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x25, 0x0a, 0x0d, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0c, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, 0x64, @@ -1226,195 +1294,211 @@ var file_authorization_v2_authorization_proto_rawDesc = []byte{ 0x79, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x00, 0x52, 0x06, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x1d, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, - 0x12, 0x3d, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x43, 0x61, 0x74, - 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x22, - 0x54, 0x0a, 0x08, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x18, 0x0a, 0x14, 0x43, - 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, - 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, - 0x59, 0x5f, 0x53, 0x55, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x43, - 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x45, 0x4e, 0x56, 0x49, 0x52, 0x4f, 0x4e, 0x4d, - 0x45, 0x4e, 0x54, 0x10, 0x02, 0x42, 0x0d, 0x0a, 0x0b, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x22, 0x42, 0x0a, 0x0c, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x75, - 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x32, 0x0a, 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x09, 0x65, - 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x53, 0x0a, 0x0b, 0x45, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x34, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x12, 0x46, 0x0a, 0x1e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, + 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x1c, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x3d, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, + 0x67, 0x6f, 0x72, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x2e, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x08, 0x63, + 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x22, 0x54, 0x0a, 0x08, 0x43, 0x61, 0x74, 0x65, 0x67, + 0x6f, 0x72, 0x79, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, + 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, + 0x10, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x53, 0x55, 0x42, 0x4a, 0x45, 0x43, + 0x54, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, + 0x45, 0x4e, 0x56, 0x49, 0x52, 0x4f, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x42, 0x0d, 0x0a, + 0x0b, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x42, 0x0a, 0x0c, + 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x32, 0x0a, 0x09, + 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x22, 0x53, 0x0a, 0x0b, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x34, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0xcc, 0x01, 0x0a, 0x0f, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x42, 0x0a, 0x0d, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x12, 0x4b, 0x0a, 0x13, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x52, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x65, 0x73, 0x22, 0xd1, 0x02, 0x0a, 0x10, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, + 0x64, 0x12, 0x34, 0x0a, 0x16, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x14, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x73, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x47, 0x0a, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x2b, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, + 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x62, 0x6c, 0x69, + 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x6f, + 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x4c, 0x0a, 0x08, 0x44, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x14, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, + 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, + 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4e, + 0x59, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, + 0x50, 0x45, 0x52, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x22, 0x65, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x4e, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x10, 0x64, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, + 0x69, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22, 0xf7, 0x01, 0x0a, 0x16, 0x47, + 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x35, 0x0a, 0x05, 0x73, + 0x63, 0x6f, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x88, + 0x01, 0x01, 0x12, 0x45, 0x0a, 0x1c, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, + 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, + 0x68, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x1a, 0x77, 0x69, 0x74, 0x68, + 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x48, 0x69, 0x65, + 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x73, 0x63, + 0x6f, 0x70, 0x65, 0x42, 0x1f, 0x0a, 0x1d, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, + 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, + 0x72, 0x63, 0x68, 0x79, 0x22, 0xfb, 0x02, 0x0a, 0x12, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, + 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x12, 0x8b, 0x01, 0x0a, 0x1f, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, + 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x46, 0x71, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x1b, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x1a, 0x37, 0x0a, 0x0b, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, + 0x80, 0x01, 0x0a, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x46, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, + 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x22, 0xd3, 0x02, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, + 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, + 0x49, 0x64, 0x12, 0x57, 0x0a, 0x10, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x48, 0x00, 0x52, 0x0f, 0x61, 0x74, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x63, 0x0a, 0x14, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x48, 0x00, 0x52, 0x13, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x1a, 0x23, 0x0a, 0x0f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x71, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x03, 0x66, 0x71, 0x6e, 0x1a, 0x35, 0x0a, 0x13, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, + 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, + 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x0a, 0x0a, 0x08, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x63, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x45, + 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0xd5, 0x01, - 0x0a, 0x0f, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x42, 0x0a, 0x0d, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, - 0x6e, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x12, - 0x54, 0x0a, 0x13, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x74, 0x74, 0x72, - 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x61, + 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, + 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xbe, 0x01, + 0x0a, 0x14, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x2f, 0x0a, 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x17, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, + 0x73, 0x12, 0x4b, 0x0a, 0x13, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x12, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x71, + 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x53, 0x0a, 0x11, + 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, + 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x73, 0x22, 0x70, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x51, 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x52, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0xd1, 0x02, 0x0a, 0x10, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, - 0x49, 0x64, 0x12, 0x34, 0x0a, 0x16, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, - 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x14, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, - 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x47, 0x0a, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x62, 0x6c, - 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, - 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x4c, 0x0a, 0x08, 0x44, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x14, 0x44, 0x45, 0x43, 0x49, 0x53, - 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, - 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, - 0x4e, 0x59, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, - 0x5f, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x22, 0x65, 0x0a, 0x13, 0x47, 0x65, 0x74, - 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x4e, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x10, - 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, - 0x22, 0x69, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22, 0x80, 0x02, 0x0a, 0x16, - 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, - 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x3e, 0x0a, 0x05, - 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, - 0x48, 0x00, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x88, 0x01, 0x01, 0x12, 0x45, 0x0a, 0x1c, - 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, - 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x08, 0x48, 0x01, 0x52, 0x1a, 0x77, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, - 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, - 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x42, 0x1f, 0x0a, - 0x1d, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, - 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x22, 0xfb, - 0x02, 0x0a, 0x12, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x49, 0x64, 0x12, 0x8b, 0x01, 0x0a, 0x1f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x70, - 0x65, 0x72, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x61, + 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x73, 0x32, 0x93, 0x03, 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x7b, 0x0a, 0x0c, + 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x1b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, - 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, - 0x1a, 0x37, 0x0a, 0x0b, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, - 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x80, 0x01, 0x0a, 0x20, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x46, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x30, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x7b, 0x0a, 0x11, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x12, 0x34, 0x0a, 0x16, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x74, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x14, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x73, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x61, 0x74, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x73, 0x22, 0x63, 0x0a, 0x17, 0x47, 0x65, 0x74, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xc7, - 0x01, 0x0a, 0x14, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x2f, 0x0a, 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x06, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x73, 0x12, 0x54, 0x0a, 0x13, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, - 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x23, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x52, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x71, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x44, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x53, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, 0x70, 0x0a, 0x1b, 0x47, - 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x12, 0x64, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x32, 0x93, 0x03, - 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x7b, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x3a, 0x01, 0x2a, - 0x22, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x93, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2c, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, - 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, - 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, - 0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x2f, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x68, 0x0a, 0x0f, 0x47, 0x65, 0x74, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x28, 0x2e, 0x61, + 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x16, 0x3a, 0x01, 0x2a, 0x22, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x93, 0x01, 0x0a, 0x13, 0x47, 0x65, + 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x12, 0x2c, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, + 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x68, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x12, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, - 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x42, 0xd5, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x42, 0x12, 0x41, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x50, 0x01, 0x5a, 0x48, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, - 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, 0x6f, 0x2f, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x3b, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x32, 0xa2, 0x02, 0x03, 0x41, - 0x58, 0x58, 0xaa, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x1c, 0x41, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xd5, 0x01, 0x0a, 0x14, 0x63, 0x6f, + 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x42, 0x12, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x48, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, + 0x6f, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, + 0x76, 0x32, 0x3b, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x76, 0x32, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x10, 0x41, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0xe2, 0x02, + 0x1c, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, + 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, + 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, + 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1430,7 +1514,7 @@ func file_authorization_v2_authorization_proto_rawDescGZIP() []byte { } var file_authorization_v2_authorization_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_authorization_v2_authorization_proto_msgTypes = make([]protoimpl.MessageInfo, 17) +var file_authorization_v2_authorization_proto_msgTypes = make([]protoimpl.MessageInfo, 19) var file_authorization_v2_authorization_proto_goTypes = []interface{}{ (Entity_Category)(0), // 0: authorization.v2.Entity.Category (DecisionResponse_Decision)(0), // 1: authorization.v2.DecisionResponse.Decision @@ -1444,51 +1528,55 @@ var file_authorization_v2_authorization_proto_goTypes = []interface{}{ (*GetDecisionsResponse)(nil), // 9: authorization.v2.GetDecisionsResponse (*GetEntitlementsRequest)(nil), // 10: authorization.v2.GetEntitlementsRequest (*EntityEntitlements)(nil), // 11: authorization.v2.EntityEntitlements - (*ResourceAttribute)(nil), // 12: authorization.v2.ResourceAttribute + (*Resource)(nil), // 12: authorization.v2.Resource (*GetEntitlementsResponse)(nil), // 13: authorization.v2.GetEntitlementsResponse (*TokenDecisionRequest)(nil), // 14: authorization.v2.TokenDecisionRequest (*GetDecisionsByTokenRequest)(nil), // 15: authorization.v2.GetDecisionsByTokenRequest (*GetDecisionsByTokenResponse)(nil), // 16: authorization.v2.GetDecisionsByTokenResponse (*EntityEntitlements_ActionsList)(nil), // 17: authorization.v2.EntityEntitlements.ActionsList nil, // 18: authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry - (*anypb.Any)(nil), // 19: google.protobuf.Any - (*policy.Action)(nil), // 20: policy.Action + (*Resource_AttributeValues)(nil), // 19: authorization.v2.Resource.AttributeValues + (*Resource_RegisteredResources)(nil), // 20: authorization.v2.Resource.RegisteredResources + (*anypb.Any)(nil), // 21: google.protobuf.Any + (*policy.Action)(nil), // 22: policy.Action } var file_authorization_v2_authorization_proto_depIdxs = []int32{ - 19, // 0: authorization.v2.Entity.claims:type_name -> google.protobuf.Any + 21, // 0: authorization.v2.Entity.claims:type_name -> google.protobuf.Any 4, // 1: authorization.v2.Entity.custom:type_name -> authorization.v2.EntityCustom 0, // 2: authorization.v2.Entity.category:type_name -> authorization.v2.Entity.Category - 19, // 3: authorization.v2.EntityCustom.extension:type_name -> google.protobuf.Any + 21, // 3: authorization.v2.EntityCustom.extension:type_name -> google.protobuf.Any 3, // 4: authorization.v2.EntityChain.entities:type_name -> authorization.v2.Entity - 20, // 5: authorization.v2.DecisionRequest.actions:type_name -> policy.Action + 22, // 5: authorization.v2.DecisionRequest.actions:type_name -> policy.Action 5, // 6: authorization.v2.DecisionRequest.entity_chains:type_name -> authorization.v2.EntityChain - 12, // 7: authorization.v2.DecisionRequest.resource_attributes:type_name -> authorization.v2.ResourceAttribute - 20, // 8: authorization.v2.DecisionResponse.action:type_name -> policy.Action + 12, // 7: authorization.v2.DecisionRequest.resource_attributes:type_name -> authorization.v2.Resource + 22, // 8: authorization.v2.DecisionResponse.action:type_name -> policy.Action 1, // 9: authorization.v2.DecisionResponse.decision:type_name -> authorization.v2.DecisionResponse.Decision 6, // 10: authorization.v2.GetDecisionsRequest.decision_requests:type_name -> authorization.v2.DecisionRequest 7, // 11: authorization.v2.GetDecisionsResponse.decision_responses:type_name -> authorization.v2.DecisionResponse 3, // 12: authorization.v2.GetEntitlementsRequest.entities:type_name -> authorization.v2.Entity - 12, // 13: authorization.v2.GetEntitlementsRequest.scope:type_name -> authorization.v2.ResourceAttribute + 12, // 13: authorization.v2.GetEntitlementsRequest.scope:type_name -> authorization.v2.Resource 18, // 14: authorization.v2.EntityEntitlements.actions_per_attribute_value_fqn:type_name -> authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry - 11, // 15: authorization.v2.GetEntitlementsResponse.entitlements:type_name -> authorization.v2.EntityEntitlements - 20, // 16: authorization.v2.TokenDecisionRequest.actions:type_name -> policy.Action - 2, // 17: authorization.v2.TokenDecisionRequest.tokens:type_name -> authorization.v2.Token - 12, // 18: authorization.v2.TokenDecisionRequest.resource_attributes:type_name -> authorization.v2.ResourceAttribute - 14, // 19: authorization.v2.GetDecisionsByTokenRequest.decision_requests:type_name -> authorization.v2.TokenDecisionRequest - 7, // 20: authorization.v2.GetDecisionsByTokenResponse.decision_responses:type_name -> authorization.v2.DecisionResponse - 20, // 21: authorization.v2.EntityEntitlements.ActionsList.actions:type_name -> policy.Action - 17, // 22: authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry.value:type_name -> authorization.v2.EntityEntitlements.ActionsList - 8, // 23: authorization.v2.AuthorizationService.GetDecisions:input_type -> authorization.v2.GetDecisionsRequest - 15, // 24: authorization.v2.AuthorizationService.GetDecisionsByToken:input_type -> authorization.v2.GetDecisionsByTokenRequest - 10, // 25: authorization.v2.AuthorizationService.GetEntitlements:input_type -> authorization.v2.GetEntitlementsRequest - 9, // 26: authorization.v2.AuthorizationService.GetDecisions:output_type -> authorization.v2.GetDecisionsResponse - 16, // 27: authorization.v2.AuthorizationService.GetDecisionsByToken:output_type -> authorization.v2.GetDecisionsByTokenResponse - 13, // 28: authorization.v2.AuthorizationService.GetEntitlements:output_type -> authorization.v2.GetEntitlementsResponse - 26, // [26:29] is the sub-list for method output_type - 23, // [23:26] is the sub-list for method input_type - 23, // [23:23] is the sub-list for extension type_name - 23, // [23:23] is the sub-list for extension extendee - 0, // [0:23] is the sub-list for field type_name + 19, // 15: authorization.v2.Resource.attribute_values:type_name -> authorization.v2.Resource.AttributeValues + 20, // 16: authorization.v2.Resource.registered_resources:type_name -> authorization.v2.Resource.RegisteredResources + 11, // 17: authorization.v2.GetEntitlementsResponse.entitlements:type_name -> authorization.v2.EntityEntitlements + 22, // 18: authorization.v2.TokenDecisionRequest.actions:type_name -> policy.Action + 2, // 19: authorization.v2.TokenDecisionRequest.tokens:type_name -> authorization.v2.Token + 12, // 20: authorization.v2.TokenDecisionRequest.resource_attributes:type_name -> authorization.v2.Resource + 14, // 21: authorization.v2.GetDecisionsByTokenRequest.decision_requests:type_name -> authorization.v2.TokenDecisionRequest + 7, // 22: authorization.v2.GetDecisionsByTokenResponse.decision_responses:type_name -> authorization.v2.DecisionResponse + 22, // 23: authorization.v2.EntityEntitlements.ActionsList.actions:type_name -> policy.Action + 17, // 24: authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry.value:type_name -> authorization.v2.EntityEntitlements.ActionsList + 8, // 25: authorization.v2.AuthorizationService.GetDecisions:input_type -> authorization.v2.GetDecisionsRequest + 15, // 26: authorization.v2.AuthorizationService.GetDecisionsByToken:input_type -> authorization.v2.GetDecisionsByTokenRequest + 10, // 27: authorization.v2.AuthorizationService.GetEntitlements:input_type -> authorization.v2.GetEntitlementsRequest + 9, // 28: authorization.v2.AuthorizationService.GetDecisions:output_type -> authorization.v2.GetDecisionsResponse + 16, // 29: authorization.v2.AuthorizationService.GetDecisionsByToken:output_type -> authorization.v2.GetDecisionsByTokenResponse + 13, // 30: authorization.v2.AuthorizationService.GetEntitlements:output_type -> authorization.v2.GetEntitlementsResponse + 28, // [28:31] is the sub-list for method output_type + 25, // [25:28] is the sub-list for method input_type + 25, // [25:25] is the sub-list for extension type_name + 25, // [25:25] is the sub-list for extension extendee + 0, // [0:25] is the sub-list for field type_name } func init() { file_authorization_v2_authorization_proto_init() } @@ -1618,7 +1706,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ResourceAttribute); i { + switch v := v.(*Resource); i { case 0: return &v.state case 1: @@ -1689,6 +1777,30 @@ func file_authorization_v2_authorization_proto_init() { return nil } } + file_authorization_v2_authorization_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Resource_AttributeValues); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_authorization_v2_authorization_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Resource_RegisteredResources); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } file_authorization_v2_authorization_proto_msgTypes[1].OneofWrappers = []interface{}{ (*Entity_EmailAddress)(nil), @@ -1698,15 +1810,20 @@ func file_authorization_v2_authorization_proto_init() { (*Entity_Claims)(nil), (*Entity_Custom)(nil), (*Entity_ClientId)(nil), + (*Entity_RegisteredResourceIdentifier)(nil), } file_authorization_v2_authorization_proto_msgTypes[8].OneofWrappers = []interface{}{} + file_authorization_v2_authorization_proto_msgTypes[10].OneofWrappers = []interface{}{ + (*Resource_AttributeValues_)(nil), + (*Resource_RegisteredResources_)(nil), + } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_authorization_v2_authorization_proto_rawDesc, NumEnums: 2, - NumMessages: 17, + NumMessages: 19, NumExtensions: 0, NumServices: 1, }, diff --git a/service/authorization/v2/authorization.proto b/service/authorization/v2/authorization.proto index 99ba5262c2..15aac79d4d 100644 --- a/service/authorization/v2/authorization.proto +++ b/service/authorization/v2/authorization.proto @@ -24,6 +24,8 @@ message Entity { google.protobuf.Any claims = 6; EntityCustom custom = 7; string client_id = 8; + // FQN or URN (when supported) + string registered_resource_identifier = 10; } enum Category { CATEGORY_UNSPECIFIED = 0; @@ -44,97 +46,13 @@ message EntityChain { repeated Entity entities = 2; } -/* - Example Request Get Decisions to answer the question - Do Bob (represented by entity chain ec1) - and Alice (represented by entity chain ec2) have TRANSMIT authorization for - 2 resources; resource1 (attr-set-1) defined by attributes foo:bar resource2 (attr-set-2) defined by attribute foo:bar, color:red ? - - { - "actions": [ - { - "standard": "STANDARD_ACTION_TRANSMIT" - } - ], - "entityChains": [ - { - "id": "ec1", - "entities": [ - { - "emailAddress": "bob@example.org" - } - ] - }, - { - "id": "ec2", - "entities": [ - { - "userName": "alice@example.org" - } - ] - } - ], - "resourceAttributes": [ - { - "resourceAttributeId": "attr-set-1", - "attributeFqns": [ - "https://www.example.org/attr/foo/value/value1" - ] - }, - { - "resourceAttributeId": "attr-set-2", - "attributeFqns": [ - "https://example.net/attr/attr1/value/value1", - "https://example.net/attr/attr1/value/value2" - ] - } - ] - } - -*/ +// Can the entity (PE or NPE) represented by each entity chain take the provided actions on the set of resources message DecisionRequest { repeated policy.Action actions = 1; repeated EntityChain entity_chains = 2; - repeated ResourceAttribute resource_attributes = 3; -} - -/* - - Example response for a Decision Request - Do Bob (represented by entity chain ec1) - and Alice (represented by entity chain ec2) have TRANSMIT authorization for - 2 resources; resource1 (attr-set-1) defined by attributes foo:bar resource2 (attr-set-2) defined by attribute foo:bar, color:red ? - - Results: - - bob has permitted authorization to transmit for a resource defined by attr-set-1 attributes and has a watermark obligation - - bob has denied authorization to transmit a for a resource defined by attr-set-2 attributes - - alice has permitted authorization to transmit for a resource defined by attr-set-1 attributes - - alice has denied authorization to transmit a for a resource defined by attr-set-2 attributes - - { - "entityChainId": "ec1", - "resourceAttributesId": "attr-set-1", - "decision": "DECISION_PERMIT", - "obligations": [ - "http://www.example.org/obligation/watermark" - ] - }, - { - "entityChainId": "ec1", - "resourceAttributesId": "attr-set-2", - "decision": "DECISION_PERMIT" - }, - { - "entityChainId": "ec2", - "resourceAttributesId": "attr-set-1", - "decision": "DECISION_PERMIT" - }, - { - "entityChainId": "ec2", - "resourceAttributesId": "attr-set-2", - "decision": "DECISION_DENY" - } - - -*/ + repeated Resource resource_attributes = 3; +} + message DecisionResponse { enum Decision { DECISION_UNSPECIFIED = 0; @@ -160,7 +78,7 @@ message GetEntitlementsRequest { // list of requested entities repeated Entity entities = 1; // optional attribute fqn as a scope - optional ResourceAttribute scope = 2; + optional Resource scope = 2; // optional parameter to return a full list of entitlements - returns lower hierarchy attributes optional bool with_comprehensive_hierarchy = 3; } @@ -175,10 +93,22 @@ message EntityEntitlements { map actions_per_attribute_value_fqn = 2; } -//A logical bucket of attributes belonging to a "Resource" -message ResourceAttribute { - string resource_attributes_id = 1; - repeated string attribute_value_fqns = 2; +// A logical bucket of attributes belonging to a "Resource" +message Resource { + string ephemeral_id = 1; + + message AttributeValues { + repeated string fqn = 1; + } + message RegisteredResources { + // FQN or URN (when supported) + repeated string identifier = 1; + } + + oneof resource { + AttributeValues attribute_values = 2; + RegisteredResources registered_resources = 3; + } } message GetEntitlementsResponse { @@ -188,7 +118,7 @@ message GetEntitlementsResponse { message TokenDecisionRequest { repeated policy.Action actions = 1; repeated Token tokens = 2; - repeated ResourceAttribute resource_attributes = 3; + repeated Resource resource_attributes = 3; } message GetDecisionsByTokenRequest { From 999a8761bd1d7bf1a54a1fd6e017696f35eae1f5 Mon Sep 17 00:00:00 2001 From: jakedoublev Date: Tue, 29 Apr 2025 11:04:37 -0700 Subject: [PATCH 06/49] draft v2 protos --- docs/grpc/index.html | 318 +++-- .../v2/authorization.swagger.json | 245 ++-- .../go/authorization/v2/authorization.pb.go | 1161 ++++++++++------- .../authorization/v2/authorization.pb.gw.go | 250 ---- .../authorization/v2/authorization_grpc.pb.go | 136 +- .../authorization.connect.go | 150 ++- service/authorization/v2/authorization.proto | 101 +- 7 files changed, 1222 insertions(+), 1139 deletions(-) delete mode 100644 protocol/go/authorization/v2/authorization.pb.gw.go diff --git a/docs/grpc/index.html b/docs/grpc/index.html index 2aa986cb90..15f1784927 100644 --- a/docs/grpc/index.html +++ b/docs/grpc/index.html @@ -407,6 +407,22 @@

    Table of Contents

    authorization/v2/authorization.proto
      +
    • + MBulkGetDecisionsByTokenRequest +
    • + +
    • + MBulkGetDecisionsByTokenResponse +
    • + +
    • + MBulkGetDecisionsRequest +
    • + +
    • + MBulkGetDecisionsResponse +
    • +
    • MDecisionRequest
    • @@ -440,19 +456,19 @@

      Table of Contents

    • - MGetDecisionsByTokenRequest + MGetDecisionByTokenRequest
    • - MGetDecisionsByTokenResponse + MGetDecisionByTokenResponse
    • - MGetDecisionsRequest + MGetDecisionRequest
    • - MGetDecisionsResponse + MGetDecisionResponse
    • @@ -471,10 +487,6 @@

      Table of Contents

      MResource.AttributeValues
    • -
    • - MResource.RegisteredResources -
    • -
    • MToken
    • @@ -3677,8 +3689,8 @@

      authorization/v2/authorization.pro

      -

      DecisionRequest

      -

      Can the entity (PE or NPE) represented by each entity chain take the provided actions on the set of resources

      +

      BulkGetDecisionsByTokenRequest

      +

      More performant bulk request for multiple decisions

      @@ -3688,22 +3700,80 @@

      DecisionRequest

      - - + + + +
      actionspolicy.Actiondecision_requestsTokenDecisionRequest repeated

      + + + + + +

      BulkGetDecisionsByTokenResponse

      +

      + + + + + + + + - - + + + +
      FieldTypeLabelDescription
      entity_chainsEntityChaindecision_responsesDecisionResponse repeated

      + + + + + +

      BulkGetDecisionsRequest

      +

      More performant bulk request for multiple decisions

      + + + + + + + + - - + + + + + + + +
      FieldTypeLabelDescription
      resource_attributesResourcedecision_requestsDecisionRequestrepeated

      + + + + + +

      BulkGetDecisionsResponse

      +

      + + + + + + + + + + + @@ -3715,6 +3785,44 @@

      DecisionRequest

      +

      DecisionRequest

      +

      Can the entity (PE or NPE) represented by each entity chain take the provided action on the set of resources

      + + +
      FieldTypeLabelDescription
      decision_responsesDecisionResponse repeated

      + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      FieldTypeLabelDescription
      entityEntityChain

      actionpolicy.Action

      resourceResource

      + + + + +

      DecisionResponse

      @@ -3726,38 +3834,34 @@

      DecisionResponse

      - entity_chain_id + ephemeral_entity_chain_id string -

      ephemeral entity chain id from the request

      +

      ephemeral id for tracking between request and response

      - resource_attributes_id + ephemeral_resource_id string -

      ephemeral resource attributes id from the request

      +

      ephemeral id for tracking between request and response

      action policy.Action -

      Action of the decision response

      +

      action that was requested

      decision DecisionResponse.Decision -

      The decision response

      - - - - obligations - string - repeated -

      optional list of obligations represented in URI format

      +

      the decision response + +optional list of obligations represented in URI format +repeated string obligations = 5;

      @@ -3778,7 +3882,7 @@

      Entity

      - id + ephemeral_id string

      ephemeral id for tracking between request and response

      @@ -3834,10 +3938,10 @@

      Entity

      - registered_resource_identifier + registered_resource_fqn string -

      FQN or URN (when supported)

      +

      @@ -3865,7 +3969,7 @@

      EntityChain

      - id + ephemeral_id string

      ephemeral id for tracking between request and response

      @@ -3995,7 +4099,7 @@

      En -

      GetDecisionsByTokenRequest

      +

      GetDecisionByTokenRequest

      @@ -4006,9 +4110,9 @@

      GetDecisionsByTokenRequest< - decision_requests + decision_request TokenDecisionRequest - repeated +

      @@ -4019,7 +4123,7 @@

      GetDecisionsByTokenRequest< -

      GetDecisionsByTokenResponse

      +

      GetDecisionByTokenResponse

      @@ -4030,9 +4134,9 @@

      GetDecisionsByTokenRespons - decision_responses + decision_response DecisionResponse - repeated +

      @@ -4043,7 +4147,7 @@

      GetDecisionsByTokenRespons -

      GetDecisionsRequest

      +

      GetDecisionRequest

      @@ -4054,9 +4158,9 @@

      GetDecisionsRequest

      - decision_requests + decision_request DecisionRequest - repeated +

      @@ -4067,7 +4171,7 @@

      GetDecisionsRequest

      -

      GetDecisionsResponse

      +

      GetDecisionResponse

      @@ -4078,9 +4182,9 @@

      GetDecisionsResponse

      - decision_responses + decision_response DecisionResponse - repeated +

      @@ -4112,7 +4216,7 @@

      GetEntitlementsRequest

      scope Resource optional -

      optional attribute fqn as a scope

      +

      optional resource as a scope

      @@ -4154,7 +4258,7 @@

      GetEntitlementsResponse

      Resource

      -

      A logical bucket of attributes belonging to a "Resource"

      +

      Either a registered resource or a set of attribute values

      @@ -4167,7 +4271,7 @@

      Resource

      - + @@ -4178,8 +4282,8 @@

      Resource

      - - + + @@ -4202,7 +4306,7 @@

      Resource.AttributeValues

      - + @@ -4215,30 +4319,6 @@

      Resource.AttributeValues

      -

      Resource.RegisteredResources

      -

      - - -
      ephemeral_id string

      ephemeral id for tracking between request and response

      registered_resourcesResource.RegisteredResourcesregistered_resource_fqnstring

      fqnfqns string repeated

      - - - - - - - - - - - - - -
      FieldTypeLabelDescription
      identifierstringrepeated

      FQN or URN (when supported)

      - - - - -

      Token

      @@ -4250,7 +4330,7 @@

      Token

      - id + ephemeral_id string

      ephemeral id for tracking between request and response

      @@ -4260,7 +4340,7 @@

      Token

      jwt string -

      the token

      +

      access token

      @@ -4271,7 +4351,7 @@

      Token

      TokenDecisionRequest

      -

      +

      Can the entity (PE or NPE) represented by this token take the provided action on the set of resources

      @@ -4281,23 +4361,23 @@

      TokenDecisionRequest

      - - - + + + - - - + + + - + - + @@ -4333,7 +4413,7 @@

      DecisionResponse.Decision

      - + @@ -4381,67 +4461,43 @@

      AuthorizationService

      - - - + + + - - - + + + - - - + + + - -
      actionspolicy.ActionrepeatedtokenToken

      tokensTokenrepeatedactionpolicy.Action

      resource_attributesresource Resourcerepeated

      DECISION_PERMIT 2

      DECISION_OBLIGATED = 3;

      GetDecisionsGetDecisionsRequestGetDecisionsResponseGetDecisionGetDecisionRequestGetDecisionResponse

      GetDecisionsByTokenGetDecisionsByTokenRequestGetDecisionsByTokenResponseBulkGetDecisionsBulkGetDecisionsRequestBulkGetDecisionsResponse

      GetEntitlementsGetEntitlementsRequestGetEntitlementsResponseBulkGetDecisionsByTokenBulkGetDecisionsByTokenRequestBulkGetDecisionsByTokenResponse

      - - - - -

      Methods with HTTP bindings

      - - - - - - - - - - - - - - - - - + + + + - - - - - - - + + + + - - -
      Method NameMethodPatternBody
      GetDecisionsPOST/v1/authorization*GetDecisionByTokenGetDecisionByTokenRequestGetDecisionByTokenResponse

      GetDecisionsByTokenPOST/v1/token/authorizationGetEntitlementsGetEntitlementsRequestGetEntitlementsResponse

      - + + + diff --git a/docs/openapi/authorization/v2/authorization.swagger.json b/docs/openapi/authorization/v2/authorization.swagger.json index fec7633939..843cde8ff2 100644 --- a/docs/openapi/authorization/v2/authorization.swagger.json +++ b/docs/openapi/authorization/v2/authorization.swagger.json @@ -15,62 +15,7 @@ "produces": [ "application/json" ], - "paths": { - "/v1/authorization": { - "post": { - "operationId": "AuthorizationService_GetDecisions", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/authorizationv2GetDecisionsResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/authorizationv2GetDecisionsRequest" - } - } - ], - "tags": [ - "AuthorizationService" - ] - } - }, - "/v1/token/authorization": { - "post": { - "operationId": "AuthorizationService_GetDecisionsByToken", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/authorizationv2GetDecisionsByTokenResponse" - } - }, - "default": { - "description": "An unexpected error response.", - "schema": { - "$ref": "#/definitions/rpcStatus" - } - } - }, - "tags": [ - "AuthorizationService" - ] - } - } - }, + "paths": {}, "definitions": { "ActionStandardAction": { "type": "string", @@ -97,7 +42,7 @@ "ResourceAttributeValues": { "type": "object", "properties": { - "fqn": { + "fqns": { "type": "array", "items": { "type": "string" @@ -105,70 +50,40 @@ } } }, - "ResourceRegisteredResources": { - "type": "object", - "properties": { - "identifier": { - "type": "array", - "items": { - "type": "string" - }, - "title": "FQN or URN (when supported)" - } - } - }, "authorizationv2DecisionRequest": { "type": "object", "properties": { - "actions": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/policyAction" - } + "entity": { + "$ref": "#/definitions/authorizationv2EntityChain" }, - "entityChains": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/authorizationv2EntityChain" - } + "action": { + "$ref": "#/definitions/policyAction" }, - "resourceAttributes": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v2Resource" - } + "resource": { + "$ref": "#/definitions/v2Resource" } }, - "title": "Can the entity (PE or NPE) represented by each entity chain take the provided actions on the set of resources" + "title": "Can the entity (PE or NPE) represented by each entity chain take the provided action on the set of resources" }, "authorizationv2DecisionResponse": { "type": "object", "properties": { - "entityChainId": { + "ephemeralEntityChainId": { "type": "string", - "title": "ephemeral entity chain id from the request" + "title": "ephemeral id for tracking between request and response" }, - "resourceAttributesId": { + "ephemeralResourceId": { "type": "string", - "title": "ephemeral resource attributes id from the request" + "title": "ephemeral id for tracking between request and response" }, "action": { "$ref": "#/definitions/policyAction", - "title": "Action of the decision response" + "title": "action that was requested" }, "decision": { "$ref": "#/definitions/authorizationv2DecisionResponseDecision", - "title": "The decision response" - }, - "obligations": { - "type": "array", - "items": { - "type": "string" - }, - "title": "optional list of obligations represented in URI format" + "description": "optional list of obligations represented in URI format\n repeated string obligations = 5;", + "title": "the decision response" } } }, @@ -179,12 +94,13 @@ "DECISION_DENY", "DECISION_PERMIT" ], - "default": "DECISION_UNSPECIFIED" + "default": "DECISION_UNSPECIFIED", + "title": "- DECISION_PERMIT: DECISION_OBLIGATED = 3;" }, "authorizationv2Entity": { "type": "object", "properties": { - "id": { + "ephemeralId": { "type": "string", "title": "ephemeral id for tracking between request and response" }, @@ -210,9 +126,8 @@ "clientId": { "type": "string" }, - "registeredResourceIdentifier": { - "type": "string", - "title": "FQN or URN (when supported)" + "registeredResourceFqn": { + "type": "string" }, "category": { "$ref": "#/definitions/authorizationv2EntityCategory" @@ -232,7 +147,7 @@ "authorizationv2EntityChain": { "type": "object", "properties": { - "id": { + "ephemeralId": { "type": "string", "title": "ephemeral id for tracking between request and response" }, @@ -270,42 +185,6 @@ }, "title": "Entitlements for a given entity, mapping each attribute value FQN to any entitled actions[]" }, - "authorizationv2GetDecisionsByTokenResponse": { - "type": "object", - "properties": { - "decisionResponses": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/authorizationv2DecisionResponse" - } - } - } - }, - "authorizationv2GetDecisionsRequest": { - "type": "object", - "properties": { - "decisionRequests": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/authorizationv2DecisionRequest" - } - } - } - }, - "authorizationv2GetDecisionsResponse": { - "type": "object", - "properties": { - "decisionResponses": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/authorizationv2DecisionResponse" - } - } - } - }, "authorizationv2GetEntitlementsResponse": { "type": "object", "properties": { @@ -321,41 +200,30 @@ "authorizationv2Token": { "type": "object", "properties": { - "id": { + "ephemeralId": { "type": "string", "title": "ephemeral id for tracking between request and response" }, "jwt": { "type": "string", - "title": "the token" + "title": "access token" } } }, "authorizationv2TokenDecisionRequest": { "type": "object", "properties": { - "actions": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/policyAction" - } + "token": { + "$ref": "#/definitions/authorizationv2Token" }, - "tokens": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/authorizationv2Token" - } + "action": { + "$ref": "#/definitions/policyAction" }, - "resourceAttributes": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v2Resource" - } + "resource": { + "$ref": "#/definitions/v2Resource" } - } + }, + "title": "Can the entity (PE or NPE) represented by this token take the provided action on the set of resources" }, "commonMetadata": { "type": "object", @@ -434,20 +302,61 @@ } } }, + "v2BulkGetDecisionsByTokenResponse": { + "type": "object", + "properties": { + "decisionResponses": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/authorizationv2DecisionResponse" + } + } + } + }, + "v2BulkGetDecisionsResponse": { + "type": "object", + "properties": { + "decisionResponses": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/authorizationv2DecisionResponse" + } + } + } + }, + "v2GetDecisionByTokenResponse": { + "type": "object", + "properties": { + "decisionResponse": { + "$ref": "#/definitions/authorizationv2DecisionResponse" + } + } + }, + "v2GetDecisionResponse": { + "type": "object", + "properties": { + "decisionResponse": { + "$ref": "#/definitions/authorizationv2DecisionResponse" + } + } + }, "v2Resource": { "type": "object", "properties": { "ephemeralId": { - "type": "string" + "type": "string", + "title": "ephemeral id for tracking between request and response" }, "attributeValues": { "$ref": "#/definitions/ResourceAttributeValues" }, - "registeredResources": { - "$ref": "#/definitions/ResourceRegisteredResources" + "registeredResourceFqn": { + "type": "string" } }, - "title": "A logical bucket of attributes belonging to a \"Resource\"" + "title": "Either a registered resource or a set of attribute values" } } } diff --git a/protocol/go/authorization/v2/authorization.pb.go b/protocol/go/authorization/v2/authorization.pb.go index 01bf2403bd..573686e76d 100644 --- a/protocol/go/authorization/v2/authorization.pb.go +++ b/protocol/go/authorization/v2/authorization.pb.go @@ -8,7 +8,6 @@ package authorizationv2 import ( policy "github.com/opentdf/platform/protocol/go/policy" - _ "google.golang.org/genproto/googleapis/api/annotations" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" anypb "google.golang.org/protobuf/types/known/anypb" @@ -77,7 +76,7 @@ type DecisionResponse_Decision int32 const ( DecisionResponse_DECISION_UNSPECIFIED DecisionResponse_Decision = 0 DecisionResponse_DECISION_DENY DecisionResponse_Decision = 1 - DecisionResponse_DECISION_PERMIT DecisionResponse_Decision = 2 + DecisionResponse_DECISION_PERMIT DecisionResponse_Decision = 2 // DECISION_OBLIGATED = 3; ) // Enum value maps for DecisionResponse_Decision. @@ -126,8 +125,10 @@ type Token struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // ephemeral id for tracking between request and response - Jwt string `protobuf:"bytes,2,opt,name=jwt,proto3" json:"jwt,omitempty"` // the token + // ephemeral id for tracking between request and response + EphemeralId string `protobuf:"bytes,1,opt,name=ephemeral_id,json=ephemeralId,proto3" json:"ephemeral_id,omitempty"` + // access token + Jwt string `protobuf:"bytes,2,opt,name=jwt,proto3" json:"jwt,omitempty"` } func (x *Token) Reset() { @@ -162,9 +163,9 @@ func (*Token) Descriptor() ([]byte, []int) { return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{0} } -func (x *Token) GetId() string { +func (x *Token) GetEphemeralId() string { if x != nil { - return x.Id + return x.EphemeralId } return "" } @@ -182,7 +183,8 @@ type Entity struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // ephemeral id for tracking between request and response + // ephemeral id for tracking between request and response + EphemeralId string `protobuf:"bytes,1,opt,name=ephemeral_id,json=ephemeralId,proto3" json:"ephemeral_id,omitempty"` // Standard entity types supported by the platform // // Types that are assignable to EntityType: @@ -194,7 +196,7 @@ type Entity struct { // *Entity_Claims // *Entity_Custom // *Entity_ClientId - // *Entity_RegisteredResourceIdentifier + // *Entity_RegisteredResourceFqn EntityType isEntity_EntityType `protobuf_oneof:"entity_type"` Category Entity_Category `protobuf:"varint,9,opt,name=category,proto3,enum=authorization.v2.Entity_Category" json:"category,omitempty"` } @@ -231,9 +233,9 @@ func (*Entity) Descriptor() ([]byte, []int) { return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{1} } -func (x *Entity) GetId() string { +func (x *Entity) GetEphemeralId() string { if x != nil { - return x.Id + return x.EphemeralId } return "" } @@ -294,9 +296,9 @@ func (x *Entity) GetClientId() string { return "" } -func (x *Entity) GetRegisteredResourceIdentifier() string { - if x, ok := x.GetEntityType().(*Entity_RegisteredResourceIdentifier); ok { - return x.RegisteredResourceIdentifier +func (x *Entity) GetRegisteredResourceFqn() string { + if x, ok := x.GetEntityType().(*Entity_RegisteredResourceFqn); ok { + return x.RegisteredResourceFqn } return "" } @@ -341,9 +343,8 @@ type Entity_ClientId struct { ClientId string `protobuf:"bytes,8,opt,name=client_id,json=clientId,proto3,oneof"` } -type Entity_RegisteredResourceIdentifier struct { - // FQN or URN (when supported) - RegisteredResourceIdentifier string `protobuf:"bytes,10,opt,name=registered_resource_identifier,json=registeredResourceIdentifier,proto3,oneof"` +type Entity_RegisteredResourceFqn struct { + RegisteredResourceFqn string `protobuf:"bytes,10,opt,name=registered_resource_fqn,json=registeredResourceFqn,proto3,oneof"` } func (*Entity_EmailAddress) isEntity_EntityType() {} @@ -360,7 +361,7 @@ func (*Entity_Custom) isEntity_EntityType() {} func (*Entity_ClientId) isEntity_EntityType() {} -func (*Entity_RegisteredResourceIdentifier) isEntity_EntityType() {} +func (*Entity_RegisteredResourceFqn) isEntity_EntityType() {} // Entity type for custom entities beyond the standard types type EntityCustom struct { @@ -416,8 +417,9 @@ type EntityChain struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // ephemeral id for tracking between request and response - Entities []*Entity `protobuf:"bytes,2,rep,name=entities,proto3" json:"entities,omitempty"` + // ephemeral id for tracking between request and response + EphemeralId string `protobuf:"bytes,1,opt,name=ephemeral_id,json=ephemeralId,proto3" json:"ephemeral_id,omitempty"` + Entities []*Entity `protobuf:"bytes,2,rep,name=entities,proto3" json:"entities,omitempty"` } func (x *EntityChain) Reset() { @@ -452,9 +454,9 @@ func (*EntityChain) Descriptor() ([]byte, []int) { return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{3} } -func (x *EntityChain) GetId() string { +func (x *EntityChain) GetEphemeralId() string { if x != nil { - return x.Id + return x.EphemeralId } return "" } @@ -466,15 +468,15 @@ func (x *EntityChain) GetEntities() []*Entity { return nil } -// Can the entity (PE or NPE) represented by each entity chain take the provided actions on the set of resources +// Can the entity (PE or NPE) represented by each entity chain take the provided action on the set of resources type DecisionRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Actions []*policy.Action `protobuf:"bytes,1,rep,name=actions,proto3" json:"actions,omitempty"` - EntityChains []*EntityChain `protobuf:"bytes,2,rep,name=entity_chains,json=entityChains,proto3" json:"entity_chains,omitempty"` - ResourceAttributes []*Resource `protobuf:"bytes,3,rep,name=resource_attributes,json=resourceAttributes,proto3" json:"resource_attributes,omitempty"` + Entity *EntityChain `protobuf:"bytes,1,opt,name=entity,proto3" json:"entity,omitempty"` + Action *policy.Action `protobuf:"bytes,2,opt,name=action,proto3" json:"action,omitempty"` + Resource *Resource `protobuf:"bytes,3,opt,name=resource,proto3" json:"resource,omitempty"` } func (x *DecisionRequest) Reset() { @@ -509,23 +511,23 @@ func (*DecisionRequest) Descriptor() ([]byte, []int) { return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{4} } -func (x *DecisionRequest) GetActions() []*policy.Action { +func (x *DecisionRequest) GetEntity() *EntityChain { if x != nil { - return x.Actions + return x.Entity } return nil } -func (x *DecisionRequest) GetEntityChains() []*EntityChain { +func (x *DecisionRequest) GetAction() *policy.Action { if x != nil { - return x.EntityChains + return x.Action } return nil } -func (x *DecisionRequest) GetResourceAttributes() []*Resource { +func (x *DecisionRequest) GetResource() *Resource { if x != nil { - return x.ResourceAttributes + return x.Resource } return nil } @@ -535,11 +537,14 @@ type DecisionResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EntityChainId string `protobuf:"bytes,1,opt,name=entity_chain_id,json=entityChainId,proto3" json:"entity_chain_id,omitempty"` // ephemeral entity chain id from the request - ResourceAttributesId string `protobuf:"bytes,2,opt,name=resource_attributes_id,json=resourceAttributesId,proto3" json:"resource_attributes_id,omitempty"` // ephemeral resource attributes id from the request - Action *policy.Action `protobuf:"bytes,3,opt,name=action,proto3" json:"action,omitempty"` // Action of the decision response - Decision DecisionResponse_Decision `protobuf:"varint,4,opt,name=decision,proto3,enum=authorization.v2.DecisionResponse_Decision" json:"decision,omitempty"` // The decision response - Obligations []string `protobuf:"bytes,5,rep,name=obligations,proto3" json:"obligations,omitempty"` //optional list of obligations represented in URI format + // ephemeral id for tracking between request and response + EphemeralEntityChainId string `protobuf:"bytes,1,opt,name=ephemeral_entity_chain_id,json=ephemeralEntityChainId,proto3" json:"ephemeral_entity_chain_id,omitempty"` + // ephemeral id for tracking between request and response + EphemeralResourceId string `protobuf:"bytes,2,opt,name=ephemeral_resource_id,json=ephemeralResourceId,proto3" json:"ephemeral_resource_id,omitempty"` + // action that was requested + Action *policy.Action `protobuf:"bytes,3,opt,name=action,proto3" json:"action,omitempty"` + // the decision response + Decision DecisionResponse_Decision `protobuf:"varint,4,opt,name=decision,proto3,enum=authorization.v2.DecisionResponse_Decision" json:"decision,omitempty"` } func (x *DecisionResponse) Reset() { @@ -574,16 +579,16 @@ func (*DecisionResponse) Descriptor() ([]byte, []int) { return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{5} } -func (x *DecisionResponse) GetEntityChainId() string { +func (x *DecisionResponse) GetEphemeralEntityChainId() string { if x != nil { - return x.EntityChainId + return x.EphemeralEntityChainId } return "" } -func (x *DecisionResponse) GetResourceAttributesId() string { +func (x *DecisionResponse) GetEphemeralResourceId() string { if x != nil { - return x.ResourceAttributesId + return x.EphemeralResourceId } return "" } @@ -602,14 +607,102 @@ func (x *DecisionResponse) GetDecision() DecisionResponse_Decision { return DecisionResponse_DECISION_UNSPECIFIED } -func (x *DecisionResponse) GetObligations() []string { +type GetDecisionRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DecisionRequest *DecisionRequest `protobuf:"bytes,1,opt,name=decision_request,json=decisionRequest,proto3" json:"decision_request,omitempty"` +} + +func (x *GetDecisionRequest) Reset() { + *x = GetDecisionRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_authorization_v2_authorization_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetDecisionRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetDecisionRequest) ProtoMessage() {} + +func (x *GetDecisionRequest) ProtoReflect() protoreflect.Message { + mi := &file_authorization_v2_authorization_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetDecisionRequest.ProtoReflect.Descriptor instead. +func (*GetDecisionRequest) Descriptor() ([]byte, []int) { + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{6} +} + +func (x *GetDecisionRequest) GetDecisionRequest() *DecisionRequest { if x != nil { - return x.Obligations + return x.DecisionRequest } return nil } -type GetDecisionsRequest struct { +type GetDecisionResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DecisionResponse *DecisionResponse `protobuf:"bytes,1,opt,name=decision_response,json=decisionResponse,proto3" json:"decision_response,omitempty"` +} + +func (x *GetDecisionResponse) Reset() { + *x = GetDecisionResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_authorization_v2_authorization_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetDecisionResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetDecisionResponse) ProtoMessage() {} + +func (x *GetDecisionResponse) ProtoReflect() protoreflect.Message { + mi := &file_authorization_v2_authorization_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetDecisionResponse.ProtoReflect.Descriptor instead. +func (*GetDecisionResponse) Descriptor() ([]byte, []int) { + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{7} +} + +func (x *GetDecisionResponse) GetDecisionResponse() *DecisionResponse { + if x != nil { + return x.DecisionResponse + } + return nil +} + +// More performant bulk request for multiple decisions +type BulkGetDecisionsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -617,23 +710,23 @@ type GetDecisionsRequest struct { DecisionRequests []*DecisionRequest `protobuf:"bytes,1,rep,name=decision_requests,json=decisionRequests,proto3" json:"decision_requests,omitempty"` } -func (x *GetDecisionsRequest) Reset() { - *x = GetDecisionsRequest{} +func (x *BulkGetDecisionsRequest) Reset() { + *x = BulkGetDecisionsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[6] + mi := &file_authorization_v2_authorization_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *GetDecisionsRequest) String() string { +func (x *BulkGetDecisionsRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetDecisionsRequest) ProtoMessage() {} +func (*BulkGetDecisionsRequest) ProtoMessage() {} -func (x *GetDecisionsRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[6] +func (x *BulkGetDecisionsRequest) ProtoReflect() protoreflect.Message { + mi := &file_authorization_v2_authorization_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -644,19 +737,19 @@ func (x *GetDecisionsRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetDecisionsRequest.ProtoReflect.Descriptor instead. -func (*GetDecisionsRequest) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{6} +// Deprecated: Use BulkGetDecisionsRequest.ProtoReflect.Descriptor instead. +func (*BulkGetDecisionsRequest) Descriptor() ([]byte, []int) { + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{8} } -func (x *GetDecisionsRequest) GetDecisionRequests() []*DecisionRequest { +func (x *BulkGetDecisionsRequest) GetDecisionRequests() []*DecisionRequest { if x != nil { return x.DecisionRequests } return nil } -type GetDecisionsResponse struct { +type BulkGetDecisionsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -664,23 +757,23 @@ type GetDecisionsResponse struct { DecisionResponses []*DecisionResponse `protobuf:"bytes,1,rep,name=decision_responses,json=decisionResponses,proto3" json:"decision_responses,omitempty"` } -func (x *GetDecisionsResponse) Reset() { - *x = GetDecisionsResponse{} +func (x *BulkGetDecisionsResponse) Reset() { + *x = BulkGetDecisionsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[7] + mi := &file_authorization_v2_authorization_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *GetDecisionsResponse) String() string { +func (x *BulkGetDecisionsResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetDecisionsResponse) ProtoMessage() {} +func (*BulkGetDecisionsResponse) ProtoMessage() {} -func (x *GetDecisionsResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[7] +func (x *BulkGetDecisionsResponse) ProtoReflect() protoreflect.Message { + mi := &file_authorization_v2_authorization_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -691,12 +784,12 @@ func (x *GetDecisionsResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetDecisionsResponse.ProtoReflect.Descriptor instead. -func (*GetDecisionsResponse) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{7} +// Deprecated: Use BulkGetDecisionsResponse.ProtoReflect.Descriptor instead. +func (*BulkGetDecisionsResponse) Descriptor() ([]byte, []int) { + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{9} } -func (x *GetDecisionsResponse) GetDecisionResponses() []*DecisionResponse { +func (x *BulkGetDecisionsResponse) GetDecisionResponses() []*DecisionResponse { if x != nil { return x.DecisionResponses } @@ -710,7 +803,7 @@ type GetEntitlementsRequest struct { // list of requested entities Entities []*Entity `protobuf:"bytes,1,rep,name=entities,proto3" json:"entities,omitempty"` - // optional attribute fqn as a scope + // optional resource as a scope Scope *Resource `protobuf:"bytes,2,opt,name=scope,proto3,oneof" json:"scope,omitempty"` // optional parameter to return a full list of entitlements - returns lower hierarchy attributes WithComprehensiveHierarchy *bool `protobuf:"varint,3,opt,name=with_comprehensive_hierarchy,json=withComprehensiveHierarchy,proto3,oneof" json:"with_comprehensive_hierarchy,omitempty"` @@ -719,7 +812,7 @@ type GetEntitlementsRequest struct { func (x *GetEntitlementsRequest) Reset() { *x = GetEntitlementsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[8] + mi := &file_authorization_v2_authorization_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -732,7 +825,7 @@ func (x *GetEntitlementsRequest) String() string { func (*GetEntitlementsRequest) ProtoMessage() {} func (x *GetEntitlementsRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[8] + mi := &file_authorization_v2_authorization_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -745,7 +838,7 @@ func (x *GetEntitlementsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetEntitlementsRequest.ProtoReflect.Descriptor instead. func (*GetEntitlementsRequest) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{8} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{10} } func (x *GetEntitlementsRequest) GetEntities() []*Entity { @@ -782,7 +875,7 @@ type EntityEntitlements struct { func (x *EntityEntitlements) Reset() { *x = EntityEntitlements{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[9] + mi := &file_authorization_v2_authorization_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -795,7 +888,7 @@ func (x *EntityEntitlements) String() string { func (*EntityEntitlements) ProtoMessage() {} func (x *EntityEntitlements) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[9] + mi := &file_authorization_v2_authorization_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -808,7 +901,7 @@ func (x *EntityEntitlements) ProtoReflect() protoreflect.Message { // Deprecated: Use EntityEntitlements.ProtoReflect.Descriptor instead. func (*EntityEntitlements) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{9} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{11} } func (x *EntityEntitlements) GetEntityId() string { @@ -825,24 +918,25 @@ func (x *EntityEntitlements) GetActionsPerAttributeValueFqn() map[string]*Entity return nil } -// A logical bucket of attributes belonging to a "Resource" +// Either a registered resource or a set of attribute values type Resource struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // ephemeral id for tracking between request and response EphemeralId string `protobuf:"bytes,1,opt,name=ephemeral_id,json=ephemeralId,proto3" json:"ephemeral_id,omitempty"` // Types that are assignable to Resource: // // *Resource_AttributeValues_ - // *Resource_RegisteredResources_ + // *Resource_RegisteredResourceFqn Resource isResource_Resource `protobuf_oneof:"resource"` } func (x *Resource) Reset() { *x = Resource{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[10] + mi := &file_authorization_v2_authorization_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -855,7 +949,7 @@ func (x *Resource) String() string { func (*Resource) ProtoMessage() {} func (x *Resource) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[10] + mi := &file_authorization_v2_authorization_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -868,7 +962,7 @@ func (x *Resource) ProtoReflect() protoreflect.Message { // Deprecated: Use Resource.ProtoReflect.Descriptor instead. func (*Resource) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{10} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{12} } func (x *Resource) GetEphemeralId() string { @@ -892,11 +986,11 @@ func (x *Resource) GetAttributeValues() *Resource_AttributeValues { return nil } -func (x *Resource) GetRegisteredResources() *Resource_RegisteredResources { - if x, ok := x.GetResource().(*Resource_RegisteredResources_); ok { - return x.RegisteredResources +func (x *Resource) GetRegisteredResourceFqn() string { + if x, ok := x.GetResource().(*Resource_RegisteredResourceFqn); ok { + return x.RegisteredResourceFqn } - return nil + return "" } type isResource_Resource interface { @@ -907,13 +1001,13 @@ type Resource_AttributeValues_ struct { AttributeValues *Resource_AttributeValues `protobuf:"bytes,2,opt,name=attribute_values,json=attributeValues,proto3,oneof"` } -type Resource_RegisteredResources_ struct { - RegisteredResources *Resource_RegisteredResources `protobuf:"bytes,3,opt,name=registered_resources,json=registeredResources,proto3,oneof"` +type Resource_RegisteredResourceFqn struct { + RegisteredResourceFqn string `protobuf:"bytes,3,opt,name=registered_resource_fqn,json=registeredResourceFqn,proto3,oneof"` } func (*Resource_AttributeValues_) isResource_Resource() {} -func (*Resource_RegisteredResources_) isResource_Resource() {} +func (*Resource_RegisteredResourceFqn) isResource_Resource() {} type GetEntitlementsResponse struct { state protoimpl.MessageState @@ -926,7 +1020,7 @@ type GetEntitlementsResponse struct { func (x *GetEntitlementsResponse) Reset() { *x = GetEntitlementsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[11] + mi := &file_authorization_v2_authorization_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -939,7 +1033,7 @@ func (x *GetEntitlementsResponse) String() string { func (*GetEntitlementsResponse) ProtoMessage() {} func (x *GetEntitlementsResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[11] + mi := &file_authorization_v2_authorization_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -952,7 +1046,7 @@ func (x *GetEntitlementsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetEntitlementsResponse.ProtoReflect.Descriptor instead. func (*GetEntitlementsResponse) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{11} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{13} } func (x *GetEntitlementsResponse) GetEntitlements() []*EntityEntitlements { @@ -962,20 +1056,21 @@ func (x *GetEntitlementsResponse) GetEntitlements() []*EntityEntitlements { return nil } +// Can the entity (PE or NPE) represented by this token take the provided action on the set of resources type TokenDecisionRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Actions []*policy.Action `protobuf:"bytes,1,rep,name=actions,proto3" json:"actions,omitempty"` - Tokens []*Token `protobuf:"bytes,2,rep,name=tokens,proto3" json:"tokens,omitempty"` - ResourceAttributes []*Resource `protobuf:"bytes,3,rep,name=resource_attributes,json=resourceAttributes,proto3" json:"resource_attributes,omitempty"` + Token *Token `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` + Action *policy.Action `protobuf:"bytes,2,opt,name=action,proto3" json:"action,omitempty"` + Resource *Resource `protobuf:"bytes,3,opt,name=resource,proto3" json:"resource,omitempty"` } func (x *TokenDecisionRequest) Reset() { *x = TokenDecisionRequest{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[12] + mi := &file_authorization_v2_authorization_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -988,7 +1083,7 @@ func (x *TokenDecisionRequest) String() string { func (*TokenDecisionRequest) ProtoMessage() {} func (x *TokenDecisionRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[12] + mi := &file_authorization_v2_authorization_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1001,55 +1096,55 @@ func (x *TokenDecisionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TokenDecisionRequest.ProtoReflect.Descriptor instead. func (*TokenDecisionRequest) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{12} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{14} } -func (x *TokenDecisionRequest) GetActions() []*policy.Action { +func (x *TokenDecisionRequest) GetToken() *Token { if x != nil { - return x.Actions + return x.Token } return nil } -func (x *TokenDecisionRequest) GetTokens() []*Token { +func (x *TokenDecisionRequest) GetAction() *policy.Action { if x != nil { - return x.Tokens + return x.Action } return nil } -func (x *TokenDecisionRequest) GetResourceAttributes() []*Resource { +func (x *TokenDecisionRequest) GetResource() *Resource { if x != nil { - return x.ResourceAttributes + return x.Resource } return nil } -type GetDecisionsByTokenRequest struct { +type GetDecisionByTokenRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - DecisionRequests []*TokenDecisionRequest `protobuf:"bytes,1,rep,name=decision_requests,json=decisionRequests,proto3" json:"decision_requests,omitempty"` + DecisionRequest *TokenDecisionRequest `protobuf:"bytes,1,opt,name=decision_request,json=decisionRequest,proto3" json:"decision_request,omitempty"` } -func (x *GetDecisionsByTokenRequest) Reset() { - *x = GetDecisionsByTokenRequest{} +func (x *GetDecisionByTokenRequest) Reset() { + *x = GetDecisionByTokenRequest{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[13] + mi := &file_authorization_v2_authorization_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *GetDecisionsByTokenRequest) String() string { +func (x *GetDecisionByTokenRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetDecisionsByTokenRequest) ProtoMessage() {} +func (*GetDecisionByTokenRequest) ProtoMessage() {} -func (x *GetDecisionsByTokenRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[13] +func (x *GetDecisionByTokenRequest) ProtoReflect() protoreflect.Message { + mi := &file_authorization_v2_authorization_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1060,43 +1155,43 @@ func (x *GetDecisionsByTokenRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetDecisionsByTokenRequest.ProtoReflect.Descriptor instead. -func (*GetDecisionsByTokenRequest) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{13} +// Deprecated: Use GetDecisionByTokenRequest.ProtoReflect.Descriptor instead. +func (*GetDecisionByTokenRequest) Descriptor() ([]byte, []int) { + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{15} } -func (x *GetDecisionsByTokenRequest) GetDecisionRequests() []*TokenDecisionRequest { +func (x *GetDecisionByTokenRequest) GetDecisionRequest() *TokenDecisionRequest { if x != nil { - return x.DecisionRequests + return x.DecisionRequest } return nil } -type GetDecisionsByTokenResponse struct { +type GetDecisionByTokenResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - DecisionResponses []*DecisionResponse `protobuf:"bytes,1,rep,name=decision_responses,json=decisionResponses,proto3" json:"decision_responses,omitempty"` + DecisionResponse *DecisionResponse `protobuf:"bytes,1,opt,name=decision_response,json=decisionResponse,proto3" json:"decision_response,omitempty"` } -func (x *GetDecisionsByTokenResponse) Reset() { - *x = GetDecisionsByTokenResponse{} +func (x *GetDecisionByTokenResponse) Reset() { + *x = GetDecisionByTokenResponse{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[14] + mi := &file_authorization_v2_authorization_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *GetDecisionsByTokenResponse) String() string { +func (x *GetDecisionByTokenResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetDecisionsByTokenResponse) ProtoMessage() {} +func (*GetDecisionByTokenResponse) ProtoMessage() {} -func (x *GetDecisionsByTokenResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[14] +func (x *GetDecisionByTokenResponse) ProtoReflect() protoreflect.Message { + mi := &file_authorization_v2_authorization_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1107,43 +1202,44 @@ func (x *GetDecisionsByTokenResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetDecisionsByTokenResponse.ProtoReflect.Descriptor instead. -func (*GetDecisionsByTokenResponse) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{14} +// Deprecated: Use GetDecisionByTokenResponse.ProtoReflect.Descriptor instead. +func (*GetDecisionByTokenResponse) Descriptor() ([]byte, []int) { + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{16} } -func (x *GetDecisionsByTokenResponse) GetDecisionResponses() []*DecisionResponse { +func (x *GetDecisionByTokenResponse) GetDecisionResponse() *DecisionResponse { if x != nil { - return x.DecisionResponses + return x.DecisionResponse } return nil } -type EntityEntitlements_ActionsList struct { +// More performant bulk request for multiple decisions +type BulkGetDecisionsByTokenRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Actions []*policy.Action `protobuf:"bytes,1,rep,name=actions,proto3" json:"actions,omitempty"` + DecisionRequests []*TokenDecisionRequest `protobuf:"bytes,1,rep,name=decision_requests,json=decisionRequests,proto3" json:"decision_requests,omitempty"` } -func (x *EntityEntitlements_ActionsList) Reset() { - *x = EntityEntitlements_ActionsList{} +func (x *BulkGetDecisionsByTokenRequest) Reset() { + *x = BulkGetDecisionsByTokenRequest{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[15] + mi := &file_authorization_v2_authorization_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *EntityEntitlements_ActionsList) String() string { +func (x *BulkGetDecisionsByTokenRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*EntityEntitlements_ActionsList) ProtoMessage() {} +func (*BulkGetDecisionsByTokenRequest) ProtoMessage() {} -func (x *EntityEntitlements_ActionsList) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[15] +func (x *BulkGetDecisionsByTokenRequest) ProtoReflect() protoreflect.Message { + mi := &file_authorization_v2_authorization_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1154,43 +1250,43 @@ func (x *EntityEntitlements_ActionsList) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use EntityEntitlements_ActionsList.ProtoReflect.Descriptor instead. -func (*EntityEntitlements_ActionsList) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{9, 0} +// Deprecated: Use BulkGetDecisionsByTokenRequest.ProtoReflect.Descriptor instead. +func (*BulkGetDecisionsByTokenRequest) Descriptor() ([]byte, []int) { + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{17} } -func (x *EntityEntitlements_ActionsList) GetActions() []*policy.Action { +func (x *BulkGetDecisionsByTokenRequest) GetDecisionRequests() []*TokenDecisionRequest { if x != nil { - return x.Actions + return x.DecisionRequests } return nil } -type Resource_AttributeValues struct { +type BulkGetDecisionsByTokenResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Fqn []string `protobuf:"bytes,1,rep,name=fqn,proto3" json:"fqn,omitempty"` + DecisionResponses []*DecisionResponse `protobuf:"bytes,1,rep,name=decision_responses,json=decisionResponses,proto3" json:"decision_responses,omitempty"` } -func (x *Resource_AttributeValues) Reset() { - *x = Resource_AttributeValues{} +func (x *BulkGetDecisionsByTokenResponse) Reset() { + *x = BulkGetDecisionsByTokenResponse{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[17] + mi := &file_authorization_v2_authorization_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *Resource_AttributeValues) String() string { +func (x *BulkGetDecisionsByTokenResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Resource_AttributeValues) ProtoMessage() {} +func (*BulkGetDecisionsByTokenResponse) ProtoMessage() {} -func (x *Resource_AttributeValues) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[17] +func (x *BulkGetDecisionsByTokenResponse) ProtoReflect() protoreflect.Message { + mi := &file_authorization_v2_authorization_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1201,44 +1297,43 @@ func (x *Resource_AttributeValues) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Resource_AttributeValues.ProtoReflect.Descriptor instead. -func (*Resource_AttributeValues) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{10, 0} +// Deprecated: Use BulkGetDecisionsByTokenResponse.ProtoReflect.Descriptor instead. +func (*BulkGetDecisionsByTokenResponse) Descriptor() ([]byte, []int) { + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{18} } -func (x *Resource_AttributeValues) GetFqn() []string { +func (x *BulkGetDecisionsByTokenResponse) GetDecisionResponses() []*DecisionResponse { if x != nil { - return x.Fqn + return x.DecisionResponses } return nil } -type Resource_RegisteredResources struct { +type EntityEntitlements_ActionsList struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // FQN or URN (when supported) - Identifier []string `protobuf:"bytes,1,rep,name=identifier,proto3" json:"identifier,omitempty"` + Actions []*policy.Action `protobuf:"bytes,1,rep,name=actions,proto3" json:"actions,omitempty"` } -func (x *Resource_RegisteredResources) Reset() { - *x = Resource_RegisteredResources{} +func (x *EntityEntitlements_ActionsList) Reset() { + *x = EntityEntitlements_ActionsList{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[18] + mi := &file_authorization_v2_authorization_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *Resource_RegisteredResources) String() string { +func (x *EntityEntitlements_ActionsList) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Resource_RegisteredResources) ProtoMessage() {} +func (*EntityEntitlements_ActionsList) ProtoMessage() {} -func (x *Resource_RegisteredResources) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[18] +func (x *EntityEntitlements_ActionsList) ProtoReflect() protoreflect.Message { + mi := &file_authorization_v2_authorization_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1249,14 +1344,61 @@ func (x *Resource_RegisteredResources) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Resource_RegisteredResources.ProtoReflect.Descriptor instead. -func (*Resource_RegisteredResources) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{10, 1} +// Deprecated: Use EntityEntitlements_ActionsList.ProtoReflect.Descriptor instead. +func (*EntityEntitlements_ActionsList) Descriptor() ([]byte, []int) { + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{11, 0} } -func (x *Resource_RegisteredResources) GetIdentifier() []string { +func (x *EntityEntitlements_ActionsList) GetActions() []*policy.Action { if x != nil { - return x.Identifier + return x.Actions + } + return nil +} + +type Resource_AttributeValues struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Fqns []string `protobuf:"bytes,1,rep,name=fqns,proto3" json:"fqns,omitempty"` +} + +func (x *Resource_AttributeValues) Reset() { + *x = Resource_AttributeValues{} + if protoimpl.UnsafeEnabled { + mi := &file_authorization_v2_authorization_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Resource_AttributeValues) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Resource_AttributeValues) ProtoMessage() {} + +func (x *Resource_AttributeValues) ProtoReflect() protoreflect.Message { + mi := &file_authorization_v2_authorization_proto_msgTypes[21] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Resource_AttributeValues.ProtoReflect.Descriptor instead. +func (*Resource_AttributeValues) Descriptor() ([]byte, []int) { + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{12, 0} +} + +func (x *Resource_AttributeValues) GetFqns() []string { + if x != nil { + return x.Fqns } return nil } @@ -1267,238 +1409,267 @@ var file_authorization_v2_authorization_proto_rawDesc = []byte{ 0x0a, 0x24, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x14, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x29, 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x10, 0x0a, 0x03, 0x6a, 0x77, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6a, - 0x77, 0x74, 0x22, 0x97, 0x04, 0x0a, 0x06, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x25, 0x0a, - 0x0d, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0c, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x12, 0x1d, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6c, - 0x61, 0x69, 0x6d, 0x73, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, - 0x52, 0x0f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x55, 0x72, - 0x6c, 0x12, 0x14, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, - 0x00, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x2e, 0x0a, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, - 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x48, 0x00, 0x52, - 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x12, 0x38, 0x0a, 0x06, 0x63, 0x75, 0x73, 0x74, 0x6f, - 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x00, 0x52, 0x06, 0x63, 0x75, 0x73, 0x74, 0x6f, - 0x6d, 0x12, 0x1d, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, - 0x12, 0x46, 0x0a, 0x1e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, - 0x65, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x1c, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x3d, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, - 0x67, 0x6f, 0x72, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x2e, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x08, 0x63, - 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x22, 0x54, 0x0a, 0x08, 0x43, 0x61, 0x74, 0x65, 0x67, - 0x6f, 0x72, 0x79, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, - 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, - 0x10, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x53, 0x55, 0x42, 0x4a, 0x45, 0x43, - 0x54, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, - 0x45, 0x4e, 0x56, 0x49, 0x52, 0x4f, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x42, 0x0d, 0x0a, - 0x0b, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x42, 0x0a, 0x0c, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x32, 0x0a, 0x09, - 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2f, 0x6f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x3c, 0x0a, 0x05, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, + 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6a, 0x77, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6a, 0x77, 0x74, 0x22, 0x9c, 0x04, 0x0a, 0x06, 0x45, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, + 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0d, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0c, + 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1d, 0x0a, 0x09, + 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, + 0x00, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x72, + 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x5f, 0x75, 0x72, 0x6c, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, + 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x55, 0x72, 0x6c, 0x12, 0x14, 0x0a, 0x04, 0x75, 0x75, 0x69, + 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, + 0x2e, 0x0a, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, - 0x22, 0x53, 0x0a, 0x0b, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x34, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0xcc, 0x01, 0x0a, 0x0f, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x42, 0x0a, 0x0d, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x12, 0x4b, 0x0a, 0x13, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x52, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x65, 0x73, 0x22, 0xd1, 0x02, 0x0a, 0x10, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, - 0x64, 0x12, 0x34, 0x0a, 0x16, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x74, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x14, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x73, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x47, 0x0a, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x2b, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, - 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x62, 0x6c, 0x69, - 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x6f, - 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x4c, 0x0a, 0x08, 0x44, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x14, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, - 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, - 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4e, - 0x59, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, - 0x50, 0x45, 0x52, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x22, 0x65, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x4e, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x10, 0x64, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, - 0x69, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22, 0xf7, 0x01, 0x0a, 0x16, 0x47, - 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x35, 0x0a, 0x05, 0x73, - 0x63, 0x6f, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x88, - 0x01, 0x01, 0x12, 0x45, 0x0a, 0x1c, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, - 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, - 0x68, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x1a, 0x77, 0x69, 0x74, 0x68, - 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x48, 0x69, 0x65, - 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x73, 0x63, - 0x6f, 0x70, 0x65, 0x42, 0x1f, 0x0a, 0x1d, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, - 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, - 0x72, 0x63, 0x68, 0x79, 0x22, 0xfb, 0x02, 0x0a, 0x12, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, - 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x12, 0x8b, 0x01, 0x0a, 0x1f, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, - 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x46, 0x71, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x1b, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x1a, 0x37, 0x0a, 0x0b, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, - 0x80, 0x01, 0x0a, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x46, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, - 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x22, 0xd3, 0x02, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, - 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, - 0x49, 0x64, 0x12, 0x57, 0x0a, 0x10, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x48, 0x00, 0x52, 0x0f, 0x61, 0x74, 0x74, 0x72, - 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x63, 0x0a, 0x14, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x48, 0x00, 0x52, 0x13, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x1a, 0x23, 0x0a, 0x0f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x71, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x03, 0x66, 0x71, 0x6e, 0x1a, 0x35, 0x0a, 0x13, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, - 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x0a, 0x0a, 0x08, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x63, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x45, - 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, - 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xbe, 0x01, - 0x0a, 0x14, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x12, 0x2f, 0x0a, 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x17, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, - 0x73, 0x12, 0x4b, 0x0a, 0x13, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x74, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, + 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x48, 0x00, 0x52, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x12, + 0x38, 0x0a, 0x06, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1e, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, + 0x00, 0x52, 0x06, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x1d, 0x0a, 0x09, 0x63, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, + 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x17, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, + 0x66, 0x71, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x15, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x46, + 0x71, 0x6e, 0x12, 0x3d, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x43, + 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, + 0x79, 0x22, 0x54, 0x0a, 0x08, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x18, 0x0a, + 0x14, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, + 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x41, 0x54, 0x45, 0x47, + 0x4f, 0x52, 0x59, 0x5f, 0x53, 0x55, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x01, 0x12, 0x18, 0x0a, + 0x14, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x45, 0x4e, 0x56, 0x49, 0x52, 0x4f, + 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x42, 0x0d, 0x0a, 0x0b, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x42, 0x0a, 0x0c, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x32, 0x0a, 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, + 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x66, 0x0a, 0x0b, 0x45, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, + 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x08, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x12, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0x71, - 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, - 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x53, 0x0a, 0x11, - 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, - 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x73, 0x22, 0x70, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x51, 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, - 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x73, 0x32, 0x93, 0x03, 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x7b, 0x0a, 0x0c, - 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x25, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, + 0x65, 0x73, 0x22, 0xa8, 0x01, 0x0a, 0x0f, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x35, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x26, 0x0a, + 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, + 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x36, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0xc0, 0x02, + 0x0a, 0x10, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, + 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x32, 0x0a, + 0x15, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x65, 0x70, + 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, + 0x64, 0x12, 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x47, 0x0a, 0x08, 0x64, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, + 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x22, 0x4c, 0x0a, 0x08, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, + 0x0a, 0x14, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, + 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x45, 0x43, 0x49, + 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4e, 0x59, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x44, + 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x54, 0x10, 0x02, + 0x22, 0x62, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x21, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x52, 0x0f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x22, 0x66, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x11, 0x64, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x69, 0x0a, 0x17, + 0x42, 0x75, 0x6c, 0x6b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4e, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, 0x6d, 0x0a, 0x18, 0x42, 0x75, 0x6c, 0x6b, 0x47, + 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, + 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22, 0xf7, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x45, 0x6e, + 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x34, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x35, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x48, 0x00, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x88, 0x01, 0x01, 0x12, 0x45, + 0x0a, 0x1c, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, + 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x1a, 0x77, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, + 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, + 0x68, 0x79, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x42, + 0x1f, 0x0a, 0x1d, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, + 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, + 0x22, 0xfb, 0x02, 0x0a, 0x12, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x49, 0x64, 0x12, 0x8b, 0x01, 0x0a, 0x1f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, + 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, + 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x1b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, + 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, + 0x71, 0x6e, 0x1a, 0x37, 0x0a, 0x0b, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, + 0x74, 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x80, 0x01, 0x0a, 0x20, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x46, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x30, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xf3, + 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x65, + 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x57, + 0x0a, 0x10, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x73, 0x48, 0x00, 0x52, 0x0f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x38, 0x0a, 0x17, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x66, + 0x71, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x15, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x46, 0x71, + 0x6e, 0x1a, 0x25, 0x0a, 0x0f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, 0x6e, 0x73, 0x42, 0x0a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x22, 0x63, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x48, 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, + 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x0c, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xa5, 0x01, 0x0a, 0x14, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x12, 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x36, 0x0a, 0x08, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x22, 0x6e, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x51, + 0x0a, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x52, 0x0f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x22, 0x6d, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x4f, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x10, + 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x75, 0x0a, 0x1e, 0x42, 0x75, 0x6c, 0x6b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x53, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, + 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, 0x74, 0x0a, 0x1f, 0x42, 0x75, 0x6c, 0x6b, 0x47, + 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x12, 0x64, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x32, 0xc1, 0x04, + 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5c, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, + 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x6b, 0x0a, 0x10, 0x42, 0x75, 0x6c, 0x6b, 0x47, 0x65, 0x74, 0x44, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x16, 0x3a, 0x01, 0x2a, 0x22, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x93, 0x01, 0x0a, 0x13, 0x47, 0x65, - 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x12, 0x2c, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x47, 0x65, 0x74, 0x44, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x12, 0x80, 0x01, 0x0a, 0x17, 0x42, 0x75, 0x6c, 0x6b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x30, 0x2e, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, + 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, - 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x68, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x12, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, - 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xd5, 0x01, 0x0a, 0x14, 0x63, 0x6f, - 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x42, 0x12, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x48, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, - 0x6f, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, - 0x76, 0x32, 0x3b, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x76, 0x32, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x10, 0x41, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0xe2, 0x02, - 0x1c, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, - 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, - 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, - 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x31, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x71, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2b, 0x2e, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, + 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x45, 0x6e, + 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x28, 0x2e, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, + 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x42, 0xd5, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x42, 0x12, 0x41, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, + 0x5a, 0x48, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, + 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, 0x6f, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x3b, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x32, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, + 0xaa, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x56, 0x32, 0xca, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x1c, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( @@ -1514,69 +1685,79 @@ func file_authorization_v2_authorization_proto_rawDescGZIP() []byte { } var file_authorization_v2_authorization_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_authorization_v2_authorization_proto_msgTypes = make([]protoimpl.MessageInfo, 19) +var file_authorization_v2_authorization_proto_msgTypes = make([]protoimpl.MessageInfo, 22) var file_authorization_v2_authorization_proto_goTypes = []interface{}{ - (Entity_Category)(0), // 0: authorization.v2.Entity.Category - (DecisionResponse_Decision)(0), // 1: authorization.v2.DecisionResponse.Decision - (*Token)(nil), // 2: authorization.v2.Token - (*Entity)(nil), // 3: authorization.v2.Entity - (*EntityCustom)(nil), // 4: authorization.v2.EntityCustom - (*EntityChain)(nil), // 5: authorization.v2.EntityChain - (*DecisionRequest)(nil), // 6: authorization.v2.DecisionRequest - (*DecisionResponse)(nil), // 7: authorization.v2.DecisionResponse - (*GetDecisionsRequest)(nil), // 8: authorization.v2.GetDecisionsRequest - (*GetDecisionsResponse)(nil), // 9: authorization.v2.GetDecisionsResponse - (*GetEntitlementsRequest)(nil), // 10: authorization.v2.GetEntitlementsRequest - (*EntityEntitlements)(nil), // 11: authorization.v2.EntityEntitlements - (*Resource)(nil), // 12: authorization.v2.Resource - (*GetEntitlementsResponse)(nil), // 13: authorization.v2.GetEntitlementsResponse - (*TokenDecisionRequest)(nil), // 14: authorization.v2.TokenDecisionRequest - (*GetDecisionsByTokenRequest)(nil), // 15: authorization.v2.GetDecisionsByTokenRequest - (*GetDecisionsByTokenResponse)(nil), // 16: authorization.v2.GetDecisionsByTokenResponse - (*EntityEntitlements_ActionsList)(nil), // 17: authorization.v2.EntityEntitlements.ActionsList - nil, // 18: authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry - (*Resource_AttributeValues)(nil), // 19: authorization.v2.Resource.AttributeValues - (*Resource_RegisteredResources)(nil), // 20: authorization.v2.Resource.RegisteredResources - (*anypb.Any)(nil), // 21: google.protobuf.Any - (*policy.Action)(nil), // 22: policy.Action + (Entity_Category)(0), // 0: authorization.v2.Entity.Category + (DecisionResponse_Decision)(0), // 1: authorization.v2.DecisionResponse.Decision + (*Token)(nil), // 2: authorization.v2.Token + (*Entity)(nil), // 3: authorization.v2.Entity + (*EntityCustom)(nil), // 4: authorization.v2.EntityCustom + (*EntityChain)(nil), // 5: authorization.v2.EntityChain + (*DecisionRequest)(nil), // 6: authorization.v2.DecisionRequest + (*DecisionResponse)(nil), // 7: authorization.v2.DecisionResponse + (*GetDecisionRequest)(nil), // 8: authorization.v2.GetDecisionRequest + (*GetDecisionResponse)(nil), // 9: authorization.v2.GetDecisionResponse + (*BulkGetDecisionsRequest)(nil), // 10: authorization.v2.BulkGetDecisionsRequest + (*BulkGetDecisionsResponse)(nil), // 11: authorization.v2.BulkGetDecisionsResponse + (*GetEntitlementsRequest)(nil), // 12: authorization.v2.GetEntitlementsRequest + (*EntityEntitlements)(nil), // 13: authorization.v2.EntityEntitlements + (*Resource)(nil), // 14: authorization.v2.Resource + (*GetEntitlementsResponse)(nil), // 15: authorization.v2.GetEntitlementsResponse + (*TokenDecisionRequest)(nil), // 16: authorization.v2.TokenDecisionRequest + (*GetDecisionByTokenRequest)(nil), // 17: authorization.v2.GetDecisionByTokenRequest + (*GetDecisionByTokenResponse)(nil), // 18: authorization.v2.GetDecisionByTokenResponse + (*BulkGetDecisionsByTokenRequest)(nil), // 19: authorization.v2.BulkGetDecisionsByTokenRequest + (*BulkGetDecisionsByTokenResponse)(nil), // 20: authorization.v2.BulkGetDecisionsByTokenResponse + (*EntityEntitlements_ActionsList)(nil), // 21: authorization.v2.EntityEntitlements.ActionsList + nil, // 22: authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry + (*Resource_AttributeValues)(nil), // 23: authorization.v2.Resource.AttributeValues + (*anypb.Any)(nil), // 24: google.protobuf.Any + (*policy.Action)(nil), // 25: policy.Action } var file_authorization_v2_authorization_proto_depIdxs = []int32{ - 21, // 0: authorization.v2.Entity.claims:type_name -> google.protobuf.Any + 24, // 0: authorization.v2.Entity.claims:type_name -> google.protobuf.Any 4, // 1: authorization.v2.Entity.custom:type_name -> authorization.v2.EntityCustom 0, // 2: authorization.v2.Entity.category:type_name -> authorization.v2.Entity.Category - 21, // 3: authorization.v2.EntityCustom.extension:type_name -> google.protobuf.Any + 24, // 3: authorization.v2.EntityCustom.extension:type_name -> google.protobuf.Any 3, // 4: authorization.v2.EntityChain.entities:type_name -> authorization.v2.Entity - 22, // 5: authorization.v2.DecisionRequest.actions:type_name -> policy.Action - 5, // 6: authorization.v2.DecisionRequest.entity_chains:type_name -> authorization.v2.EntityChain - 12, // 7: authorization.v2.DecisionRequest.resource_attributes:type_name -> authorization.v2.Resource - 22, // 8: authorization.v2.DecisionResponse.action:type_name -> policy.Action + 5, // 5: authorization.v2.DecisionRequest.entity:type_name -> authorization.v2.EntityChain + 25, // 6: authorization.v2.DecisionRequest.action:type_name -> policy.Action + 14, // 7: authorization.v2.DecisionRequest.resource:type_name -> authorization.v2.Resource + 25, // 8: authorization.v2.DecisionResponse.action:type_name -> policy.Action 1, // 9: authorization.v2.DecisionResponse.decision:type_name -> authorization.v2.DecisionResponse.Decision - 6, // 10: authorization.v2.GetDecisionsRequest.decision_requests:type_name -> authorization.v2.DecisionRequest - 7, // 11: authorization.v2.GetDecisionsResponse.decision_responses:type_name -> authorization.v2.DecisionResponse - 3, // 12: authorization.v2.GetEntitlementsRequest.entities:type_name -> authorization.v2.Entity - 12, // 13: authorization.v2.GetEntitlementsRequest.scope:type_name -> authorization.v2.Resource - 18, // 14: authorization.v2.EntityEntitlements.actions_per_attribute_value_fqn:type_name -> authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry - 19, // 15: authorization.v2.Resource.attribute_values:type_name -> authorization.v2.Resource.AttributeValues - 20, // 16: authorization.v2.Resource.registered_resources:type_name -> authorization.v2.Resource.RegisteredResources - 11, // 17: authorization.v2.GetEntitlementsResponse.entitlements:type_name -> authorization.v2.EntityEntitlements - 22, // 18: authorization.v2.TokenDecisionRequest.actions:type_name -> policy.Action - 2, // 19: authorization.v2.TokenDecisionRequest.tokens:type_name -> authorization.v2.Token - 12, // 20: authorization.v2.TokenDecisionRequest.resource_attributes:type_name -> authorization.v2.Resource - 14, // 21: authorization.v2.GetDecisionsByTokenRequest.decision_requests:type_name -> authorization.v2.TokenDecisionRequest - 7, // 22: authorization.v2.GetDecisionsByTokenResponse.decision_responses:type_name -> authorization.v2.DecisionResponse - 22, // 23: authorization.v2.EntityEntitlements.ActionsList.actions:type_name -> policy.Action - 17, // 24: authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry.value:type_name -> authorization.v2.EntityEntitlements.ActionsList - 8, // 25: authorization.v2.AuthorizationService.GetDecisions:input_type -> authorization.v2.GetDecisionsRequest - 15, // 26: authorization.v2.AuthorizationService.GetDecisionsByToken:input_type -> authorization.v2.GetDecisionsByTokenRequest - 10, // 27: authorization.v2.AuthorizationService.GetEntitlements:input_type -> authorization.v2.GetEntitlementsRequest - 9, // 28: authorization.v2.AuthorizationService.GetDecisions:output_type -> authorization.v2.GetDecisionsResponse - 16, // 29: authorization.v2.AuthorizationService.GetDecisionsByToken:output_type -> authorization.v2.GetDecisionsByTokenResponse - 13, // 30: authorization.v2.AuthorizationService.GetEntitlements:output_type -> authorization.v2.GetEntitlementsResponse - 28, // [28:31] is the sub-list for method output_type - 25, // [25:28] is the sub-list for method input_type - 25, // [25:25] is the sub-list for extension type_name - 25, // [25:25] is the sub-list for extension extendee - 0, // [0:25] is the sub-list for field type_name + 6, // 10: authorization.v2.GetDecisionRequest.decision_request:type_name -> authorization.v2.DecisionRequest + 7, // 11: authorization.v2.GetDecisionResponse.decision_response:type_name -> authorization.v2.DecisionResponse + 6, // 12: authorization.v2.BulkGetDecisionsRequest.decision_requests:type_name -> authorization.v2.DecisionRequest + 7, // 13: authorization.v2.BulkGetDecisionsResponse.decision_responses:type_name -> authorization.v2.DecisionResponse + 3, // 14: authorization.v2.GetEntitlementsRequest.entities:type_name -> authorization.v2.Entity + 14, // 15: authorization.v2.GetEntitlementsRequest.scope:type_name -> authorization.v2.Resource + 22, // 16: authorization.v2.EntityEntitlements.actions_per_attribute_value_fqn:type_name -> authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry + 23, // 17: authorization.v2.Resource.attribute_values:type_name -> authorization.v2.Resource.AttributeValues + 13, // 18: authorization.v2.GetEntitlementsResponse.entitlements:type_name -> authorization.v2.EntityEntitlements + 2, // 19: authorization.v2.TokenDecisionRequest.token:type_name -> authorization.v2.Token + 25, // 20: authorization.v2.TokenDecisionRequest.action:type_name -> policy.Action + 14, // 21: authorization.v2.TokenDecisionRequest.resource:type_name -> authorization.v2.Resource + 16, // 22: authorization.v2.GetDecisionByTokenRequest.decision_request:type_name -> authorization.v2.TokenDecisionRequest + 7, // 23: authorization.v2.GetDecisionByTokenResponse.decision_response:type_name -> authorization.v2.DecisionResponse + 16, // 24: authorization.v2.BulkGetDecisionsByTokenRequest.decision_requests:type_name -> authorization.v2.TokenDecisionRequest + 7, // 25: authorization.v2.BulkGetDecisionsByTokenResponse.decision_responses:type_name -> authorization.v2.DecisionResponse + 25, // 26: authorization.v2.EntityEntitlements.ActionsList.actions:type_name -> policy.Action + 21, // 27: authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry.value:type_name -> authorization.v2.EntityEntitlements.ActionsList + 8, // 28: authorization.v2.AuthorizationService.GetDecision:input_type -> authorization.v2.GetDecisionRequest + 10, // 29: authorization.v2.AuthorizationService.BulkGetDecisions:input_type -> authorization.v2.BulkGetDecisionsRequest + 19, // 30: authorization.v2.AuthorizationService.BulkGetDecisionsByToken:input_type -> authorization.v2.BulkGetDecisionsByTokenRequest + 17, // 31: authorization.v2.AuthorizationService.GetDecisionByToken:input_type -> authorization.v2.GetDecisionByTokenRequest + 12, // 32: authorization.v2.AuthorizationService.GetEntitlements:input_type -> authorization.v2.GetEntitlementsRequest + 9, // 33: authorization.v2.AuthorizationService.GetDecision:output_type -> authorization.v2.GetDecisionResponse + 11, // 34: authorization.v2.AuthorizationService.BulkGetDecisions:output_type -> authorization.v2.BulkGetDecisionsResponse + 20, // 35: authorization.v2.AuthorizationService.BulkGetDecisionsByToken:output_type -> authorization.v2.BulkGetDecisionsByTokenResponse + 18, // 36: authorization.v2.AuthorizationService.GetDecisionByToken:output_type -> authorization.v2.GetDecisionByTokenResponse + 15, // 37: authorization.v2.AuthorizationService.GetEntitlements:output_type -> authorization.v2.GetEntitlementsResponse + 33, // [33:38] is the sub-list for method output_type + 28, // [28:33] is the sub-list for method input_type + 28, // [28:28] is the sub-list for extension type_name + 28, // [28:28] is the sub-list for extension extendee + 0, // [0:28] is the sub-list for field type_name } func init() { file_authorization_v2_authorization_proto_init() } @@ -1658,7 +1839,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDecisionsRequest); i { + switch v := v.(*GetDecisionRequest); i { case 0: return &v.state case 1: @@ -1670,7 +1851,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDecisionsResponse); i { + switch v := v.(*GetDecisionResponse); i { case 0: return &v.state case 1: @@ -1682,7 +1863,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetEntitlementsRequest); i { + switch v := v.(*BulkGetDecisionsRequest); i { case 0: return &v.state case 1: @@ -1694,7 +1875,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EntityEntitlements); i { + switch v := v.(*BulkGetDecisionsResponse); i { case 0: return &v.state case 1: @@ -1706,7 +1887,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Resource); i { + switch v := v.(*GetEntitlementsRequest); i { case 0: return &v.state case 1: @@ -1718,7 +1899,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetEntitlementsResponse); i { + switch v := v.(*EntityEntitlements); i { case 0: return &v.state case 1: @@ -1730,7 +1911,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TokenDecisionRequest); i { + switch v := v.(*Resource); i { case 0: return &v.state case 1: @@ -1742,7 +1923,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDecisionsByTokenRequest); i { + switch v := v.(*GetEntitlementsResponse); i { case 0: return &v.state case 1: @@ -1754,7 +1935,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDecisionsByTokenResponse); i { + switch v := v.(*TokenDecisionRequest); i { case 0: return &v.state case 1: @@ -1766,7 +1947,19 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EntityEntitlements_ActionsList); i { + switch v := v.(*GetDecisionByTokenRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_authorization_v2_authorization_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetDecisionByTokenResponse); i { case 0: return &v.state case 1: @@ -1778,7 +1971,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Resource_AttributeValues); i { + switch v := v.(*BulkGetDecisionsByTokenRequest); i { case 0: return &v.state case 1: @@ -1790,7 +1983,31 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Resource_RegisteredResources); i { + switch v := v.(*BulkGetDecisionsByTokenResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_authorization_v2_authorization_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EntityEntitlements_ActionsList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_authorization_v2_authorization_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Resource_AttributeValues); i { case 0: return &v.state case 1: @@ -1810,12 +2027,12 @@ func file_authorization_v2_authorization_proto_init() { (*Entity_Claims)(nil), (*Entity_Custom)(nil), (*Entity_ClientId)(nil), - (*Entity_RegisteredResourceIdentifier)(nil), + (*Entity_RegisteredResourceFqn)(nil), } - file_authorization_v2_authorization_proto_msgTypes[8].OneofWrappers = []interface{}{} - file_authorization_v2_authorization_proto_msgTypes[10].OneofWrappers = []interface{}{ + file_authorization_v2_authorization_proto_msgTypes[10].OneofWrappers = []interface{}{} + file_authorization_v2_authorization_proto_msgTypes[12].OneofWrappers = []interface{}{ (*Resource_AttributeValues_)(nil), - (*Resource_RegisteredResources_)(nil), + (*Resource_RegisteredResourceFqn)(nil), } type x struct{} out := protoimpl.TypeBuilder{ @@ -1823,7 +2040,7 @@ func file_authorization_v2_authorization_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_authorization_v2_authorization_proto_rawDesc, NumEnums: 2, - NumMessages: 19, + NumMessages: 22, NumExtensions: 0, NumServices: 1, }, diff --git a/protocol/go/authorization/v2/authorization.pb.gw.go b/protocol/go/authorization/v2/authorization.pb.gw.go deleted file mode 100644 index 52c346aced..0000000000 --- a/protocol/go/authorization/v2/authorization.pb.gw.go +++ /dev/null @@ -1,250 +0,0 @@ -// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: authorization/v2/authorization.proto - -/* -Package authorizationv2 is a reverse proxy. - -It translates gRPC into RESTful JSON APIs. -*/ -package authorizationv2 - -import ( - "context" - "io" - "net/http" - - "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" - "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/grpclog" - "google.golang.org/grpc/metadata" - "google.golang.org/grpc/status" - "google.golang.org/protobuf/proto" -) - -// Suppress "imported and not used" errors -var _ codes.Code -var _ io.Reader -var _ status.Status -var _ = runtime.String -var _ = utilities.NewDoubleArray -var _ = metadata.Join - -func request_AuthorizationService_GetDecisions_0(ctx context.Context, marshaler runtime.Marshaler, client AuthorizationServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetDecisionsRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.GetDecisions(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_AuthorizationService_GetDecisions_0(ctx context.Context, marshaler runtime.Marshaler, server AuthorizationServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetDecisionsRequest - var metadata runtime.ServerMetadata - - if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && err != io.EOF { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.GetDecisions(ctx, &protoReq) - return msg, metadata, err - -} - -var ( - filter_AuthorizationService_GetDecisionsByToken_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) - -func request_AuthorizationService_GetDecisionsByToken_0(ctx context.Context, marshaler runtime.Marshaler, client AuthorizationServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetDecisionsByTokenRequest - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AuthorizationService_GetDecisionsByToken_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := client.GetDecisionsByToken(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_AuthorizationService_GetDecisionsByToken_0(ctx context.Context, marshaler runtime.Marshaler, server AuthorizationServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetDecisionsByTokenRequest - var metadata runtime.ServerMetadata - - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_AuthorizationService_GetDecisionsByToken_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - - msg, err := server.GetDecisionsByToken(ctx, &protoReq) - return msg, metadata, err - -} - -// RegisterAuthorizationServiceHandlerServer registers the http handlers for service AuthorizationService to "mux". -// UnaryRPC :call AuthorizationServiceServer directly. -// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterAuthorizationServiceHandlerFromEndpoint instead. -func RegisterAuthorizationServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server AuthorizationServiceServer) error { - - mux.Handle("POST", pattern_AuthorizationService_GetDecisions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/authorization.v2.AuthorizationService/GetDecisions", runtime.WithHTTPPathPattern("/v1/authorization")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_AuthorizationService_GetDecisions_0(annotatedContext, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) - if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) - return - } - - forward_AuthorizationService_GetDecisions_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("POST", pattern_AuthorizationService_GetDecisionsByToken_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/authorization.v2.AuthorizationService/GetDecisionsByToken", runtime.WithHTTPPathPattern("/v1/token/authorization")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_AuthorizationService_GetDecisionsByToken_0(annotatedContext, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) - if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) - return - } - - forward_AuthorizationService_GetDecisionsByToken_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -// RegisterAuthorizationServiceHandlerFromEndpoint is same as RegisterAuthorizationServiceHandler but -// automatically dials to "endpoint" and closes the connection when "ctx" gets done. -func RegisterAuthorizationServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { - conn, err := grpc.DialContext(ctx, endpoint, opts...) - if err != nil { - return err - } - defer func() { - if err != nil { - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - return - } - go func() { - <-ctx.Done() - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - }() - }() - - return RegisterAuthorizationServiceHandler(ctx, mux, conn) -} - -// RegisterAuthorizationServiceHandler registers the http handlers for service AuthorizationService to "mux". -// The handlers forward requests to the grpc endpoint over "conn". -func RegisterAuthorizationServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { - return RegisterAuthorizationServiceHandlerClient(ctx, mux, NewAuthorizationServiceClient(conn)) -} - -// RegisterAuthorizationServiceHandlerClient registers the http handlers for service AuthorizationService -// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "AuthorizationServiceClient". -// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "AuthorizationServiceClient" -// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in -// "AuthorizationServiceClient" to call the correct interceptors. -func RegisterAuthorizationServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client AuthorizationServiceClient) error { - - mux.Handle("POST", pattern_AuthorizationService_GetDecisions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/authorization.v2.AuthorizationService/GetDecisions", runtime.WithHTTPPathPattern("/v1/authorization")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_AuthorizationService_GetDecisions_0(annotatedContext, inboundMarshaler, client, req, pathParams) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) - if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) - return - } - - forward_AuthorizationService_GetDecisions_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - mux.Handle("POST", pattern_AuthorizationService_GetDecisionsByToken_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - var err error - var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/authorization.v2.AuthorizationService/GetDecisionsByToken", runtime.WithHTTPPathPattern("/v1/token/authorization")) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_AuthorizationService_GetDecisionsByToken_0(annotatedContext, inboundMarshaler, client, req, pathParams) - annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) - if err != nil { - runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) - return - } - - forward_AuthorizationService_GetDecisionsByToken_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - - return nil -} - -var ( - pattern_AuthorizationService_GetDecisions_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "authorization"}, "")) - - pattern_AuthorizationService_GetDecisionsByToken_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "token", "authorization"}, "")) -) - -var ( - forward_AuthorizationService_GetDecisions_0 = runtime.ForwardResponseMessage - - forward_AuthorizationService_GetDecisionsByToken_0 = runtime.ForwardResponseMessage -) diff --git a/protocol/go/authorization/v2/authorization_grpc.pb.go b/protocol/go/authorization/v2/authorization_grpc.pb.go index 63311eff85..0823c02502 100644 --- a/protocol/go/authorization/v2/authorization_grpc.pb.go +++ b/protocol/go/authorization/v2/authorization_grpc.pb.go @@ -19,17 +19,21 @@ import ( const _ = grpc.SupportPackageIsVersion7 const ( - AuthorizationService_GetDecisions_FullMethodName = "/authorization.v2.AuthorizationService/GetDecisions" - AuthorizationService_GetDecisionsByToken_FullMethodName = "/authorization.v2.AuthorizationService/GetDecisionsByToken" - AuthorizationService_GetEntitlements_FullMethodName = "/authorization.v2.AuthorizationService/GetEntitlements" + AuthorizationService_GetDecision_FullMethodName = "/authorization.v2.AuthorizationService/GetDecision" + AuthorizationService_BulkGetDecisions_FullMethodName = "/authorization.v2.AuthorizationService/BulkGetDecisions" + AuthorizationService_BulkGetDecisionsByToken_FullMethodName = "/authorization.v2.AuthorizationService/BulkGetDecisionsByToken" + AuthorizationService_GetDecisionByToken_FullMethodName = "/authorization.v2.AuthorizationService/GetDecisionByToken" + AuthorizationService_GetEntitlements_FullMethodName = "/authorization.v2.AuthorizationService/GetEntitlements" ) // AuthorizationServiceClient is the client API for AuthorizationService service. // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. type AuthorizationServiceClient interface { - GetDecisions(ctx context.Context, in *GetDecisionsRequest, opts ...grpc.CallOption) (*GetDecisionsResponse, error) - GetDecisionsByToken(ctx context.Context, in *GetDecisionsByTokenRequest, opts ...grpc.CallOption) (*GetDecisionsByTokenResponse, error) + GetDecision(ctx context.Context, in *GetDecisionRequest, opts ...grpc.CallOption) (*GetDecisionResponse, error) + BulkGetDecisions(ctx context.Context, in *BulkGetDecisionsRequest, opts ...grpc.CallOption) (*BulkGetDecisionsResponse, error) + BulkGetDecisionsByToken(ctx context.Context, in *BulkGetDecisionsByTokenRequest, opts ...grpc.CallOption) (*BulkGetDecisionsByTokenResponse, error) + GetDecisionByToken(ctx context.Context, in *GetDecisionByTokenRequest, opts ...grpc.CallOption) (*GetDecisionByTokenResponse, error) GetEntitlements(ctx context.Context, in *GetEntitlementsRequest, opts ...grpc.CallOption) (*GetEntitlementsResponse, error) } @@ -41,18 +45,36 @@ func NewAuthorizationServiceClient(cc grpc.ClientConnInterface) AuthorizationSer return &authorizationServiceClient{cc} } -func (c *authorizationServiceClient) GetDecisions(ctx context.Context, in *GetDecisionsRequest, opts ...grpc.CallOption) (*GetDecisionsResponse, error) { - out := new(GetDecisionsResponse) - err := c.cc.Invoke(ctx, AuthorizationService_GetDecisions_FullMethodName, in, out, opts...) +func (c *authorizationServiceClient) GetDecision(ctx context.Context, in *GetDecisionRequest, opts ...grpc.CallOption) (*GetDecisionResponse, error) { + out := new(GetDecisionResponse) + err := c.cc.Invoke(ctx, AuthorizationService_GetDecision_FullMethodName, in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *authorizationServiceClient) GetDecisionsByToken(ctx context.Context, in *GetDecisionsByTokenRequest, opts ...grpc.CallOption) (*GetDecisionsByTokenResponse, error) { - out := new(GetDecisionsByTokenResponse) - err := c.cc.Invoke(ctx, AuthorizationService_GetDecisionsByToken_FullMethodName, in, out, opts...) +func (c *authorizationServiceClient) BulkGetDecisions(ctx context.Context, in *BulkGetDecisionsRequest, opts ...grpc.CallOption) (*BulkGetDecisionsResponse, error) { + out := new(BulkGetDecisionsResponse) + err := c.cc.Invoke(ctx, AuthorizationService_BulkGetDecisions_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *authorizationServiceClient) BulkGetDecisionsByToken(ctx context.Context, in *BulkGetDecisionsByTokenRequest, opts ...grpc.CallOption) (*BulkGetDecisionsByTokenResponse, error) { + out := new(BulkGetDecisionsByTokenResponse) + err := c.cc.Invoke(ctx, AuthorizationService_BulkGetDecisionsByToken_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *authorizationServiceClient) GetDecisionByToken(ctx context.Context, in *GetDecisionByTokenRequest, opts ...grpc.CallOption) (*GetDecisionByTokenResponse, error) { + out := new(GetDecisionByTokenResponse) + err := c.cc.Invoke(ctx, AuthorizationService_GetDecisionByToken_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -72,8 +94,10 @@ func (c *authorizationServiceClient) GetEntitlements(ctx context.Context, in *Ge // All implementations must embed UnimplementedAuthorizationServiceServer // for forward compatibility type AuthorizationServiceServer interface { - GetDecisions(context.Context, *GetDecisionsRequest) (*GetDecisionsResponse, error) - GetDecisionsByToken(context.Context, *GetDecisionsByTokenRequest) (*GetDecisionsByTokenResponse, error) + GetDecision(context.Context, *GetDecisionRequest) (*GetDecisionResponse, error) + BulkGetDecisions(context.Context, *BulkGetDecisionsRequest) (*BulkGetDecisionsResponse, error) + BulkGetDecisionsByToken(context.Context, *BulkGetDecisionsByTokenRequest) (*BulkGetDecisionsByTokenResponse, error) + GetDecisionByToken(context.Context, *GetDecisionByTokenRequest) (*GetDecisionByTokenResponse, error) GetEntitlements(context.Context, *GetEntitlementsRequest) (*GetEntitlementsResponse, error) mustEmbedUnimplementedAuthorizationServiceServer() } @@ -82,11 +106,17 @@ type AuthorizationServiceServer interface { type UnimplementedAuthorizationServiceServer struct { } -func (UnimplementedAuthorizationServiceServer) GetDecisions(context.Context, *GetDecisionsRequest) (*GetDecisionsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetDecisions not implemented") +func (UnimplementedAuthorizationServiceServer) GetDecision(context.Context, *GetDecisionRequest) (*GetDecisionResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetDecision not implemented") +} +func (UnimplementedAuthorizationServiceServer) BulkGetDecisions(context.Context, *BulkGetDecisionsRequest) (*BulkGetDecisionsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method BulkGetDecisions not implemented") +} +func (UnimplementedAuthorizationServiceServer) BulkGetDecisionsByToken(context.Context, *BulkGetDecisionsByTokenRequest) (*BulkGetDecisionsByTokenResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method BulkGetDecisionsByToken not implemented") } -func (UnimplementedAuthorizationServiceServer) GetDecisionsByToken(context.Context, *GetDecisionsByTokenRequest) (*GetDecisionsByTokenResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetDecisionsByToken not implemented") +func (UnimplementedAuthorizationServiceServer) GetDecisionByToken(context.Context, *GetDecisionByTokenRequest) (*GetDecisionByTokenResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetDecisionByToken not implemented") } func (UnimplementedAuthorizationServiceServer) GetEntitlements(context.Context, *GetEntitlementsRequest) (*GetEntitlementsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetEntitlements not implemented") @@ -104,38 +134,74 @@ func RegisterAuthorizationServiceServer(s grpc.ServiceRegistrar, srv Authorizati s.RegisterService(&AuthorizationService_ServiceDesc, srv) } -func _AuthorizationService_GetDecisions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetDecisionsRequest) +func _AuthorizationService_GetDecision_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetDecisionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AuthorizationServiceServer).GetDecision(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: AuthorizationService_GetDecision_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AuthorizationServiceServer).GetDecision(ctx, req.(*GetDecisionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _AuthorizationService_BulkGetDecisions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(BulkGetDecisionsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AuthorizationServiceServer).BulkGetDecisions(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: AuthorizationService_BulkGetDecisions_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AuthorizationServiceServer).BulkGetDecisions(ctx, req.(*BulkGetDecisionsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _AuthorizationService_BulkGetDecisionsByToken_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(BulkGetDecisionsByTokenRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(AuthorizationServiceServer).GetDecisions(ctx, in) + return srv.(AuthorizationServiceServer).BulkGetDecisionsByToken(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: AuthorizationService_GetDecisions_FullMethodName, + FullMethod: AuthorizationService_BulkGetDecisionsByToken_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizationServiceServer).GetDecisions(ctx, req.(*GetDecisionsRequest)) + return srv.(AuthorizationServiceServer).BulkGetDecisionsByToken(ctx, req.(*BulkGetDecisionsByTokenRequest)) } return interceptor(ctx, in, info, handler) } -func _AuthorizationService_GetDecisionsByToken_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetDecisionsByTokenRequest) +func _AuthorizationService_GetDecisionByToken_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetDecisionByTokenRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(AuthorizationServiceServer).GetDecisionsByToken(ctx, in) + return srv.(AuthorizationServiceServer).GetDecisionByToken(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: AuthorizationService_GetDecisionsByToken_FullMethodName, + FullMethod: AuthorizationService_GetDecisionByToken_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizationServiceServer).GetDecisionsByToken(ctx, req.(*GetDecisionsByTokenRequest)) + return srv.(AuthorizationServiceServer).GetDecisionByToken(ctx, req.(*GetDecisionByTokenRequest)) } return interceptor(ctx, in, info, handler) } @@ -166,12 +232,20 @@ var AuthorizationService_ServiceDesc = grpc.ServiceDesc{ HandlerType: (*AuthorizationServiceServer)(nil), Methods: []grpc.MethodDesc{ { - MethodName: "GetDecisions", - Handler: _AuthorizationService_GetDecisions_Handler, + MethodName: "GetDecision", + Handler: _AuthorizationService_GetDecision_Handler, + }, + { + MethodName: "BulkGetDecisions", + Handler: _AuthorizationService_BulkGetDecisions_Handler, + }, + { + MethodName: "BulkGetDecisionsByToken", + Handler: _AuthorizationService_BulkGetDecisionsByToken_Handler, }, { - MethodName: "GetDecisionsByToken", - Handler: _AuthorizationService_GetDecisionsByToken_Handler, + MethodName: "GetDecisionByToken", + Handler: _AuthorizationService_GetDecisionByToken_Handler, }, { MethodName: "GetEntitlements", diff --git a/protocol/go/authorization/v2/authorizationv2connect/authorization.connect.go b/protocol/go/authorization/v2/authorizationv2connect/authorization.connect.go index bbaeaeda32..b6807d0583 100644 --- a/protocol/go/authorization/v2/authorizationv2connect/authorization.connect.go +++ b/protocol/go/authorization/v2/authorizationv2connect/authorization.connect.go @@ -33,12 +33,18 @@ const ( // reflection-formatted method names, remove the leading slash and convert the remaining slash to a // period. const ( - // AuthorizationServiceGetDecisionsProcedure is the fully-qualified name of the - // AuthorizationService's GetDecisions RPC. - AuthorizationServiceGetDecisionsProcedure = "/authorization.v2.AuthorizationService/GetDecisions" - // AuthorizationServiceGetDecisionsByTokenProcedure is the fully-qualified name of the - // AuthorizationService's GetDecisionsByToken RPC. - AuthorizationServiceGetDecisionsByTokenProcedure = "/authorization.v2.AuthorizationService/GetDecisionsByToken" + // AuthorizationServiceGetDecisionProcedure is the fully-qualified name of the + // AuthorizationService's GetDecision RPC. + AuthorizationServiceGetDecisionProcedure = "/authorization.v2.AuthorizationService/GetDecision" + // AuthorizationServiceBulkGetDecisionsProcedure is the fully-qualified name of the + // AuthorizationService's BulkGetDecisions RPC. + AuthorizationServiceBulkGetDecisionsProcedure = "/authorization.v2.AuthorizationService/BulkGetDecisions" + // AuthorizationServiceBulkGetDecisionsByTokenProcedure is the fully-qualified name of the + // AuthorizationService's BulkGetDecisionsByToken RPC. + AuthorizationServiceBulkGetDecisionsByTokenProcedure = "/authorization.v2.AuthorizationService/BulkGetDecisionsByToken" + // AuthorizationServiceGetDecisionByTokenProcedure is the fully-qualified name of the + // AuthorizationService's GetDecisionByToken RPC. + AuthorizationServiceGetDecisionByTokenProcedure = "/authorization.v2.AuthorizationService/GetDecisionByToken" // AuthorizationServiceGetEntitlementsProcedure is the fully-qualified name of the // AuthorizationService's GetEntitlements RPC. AuthorizationServiceGetEntitlementsProcedure = "/authorization.v2.AuthorizationService/GetEntitlements" @@ -46,16 +52,20 @@ const ( // These variables are the protoreflect.Descriptor objects for the RPCs defined in this package. var ( - authorizationServiceServiceDescriptor = v2.File_authorization_v2_authorization_proto.Services().ByName("AuthorizationService") - authorizationServiceGetDecisionsMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetDecisions") - authorizationServiceGetDecisionsByTokenMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetDecisionsByToken") - authorizationServiceGetEntitlementsMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetEntitlements") + authorizationServiceServiceDescriptor = v2.File_authorization_v2_authorization_proto.Services().ByName("AuthorizationService") + authorizationServiceGetDecisionMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetDecision") + authorizationServiceBulkGetDecisionsMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("BulkGetDecisions") + authorizationServiceBulkGetDecisionsByTokenMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("BulkGetDecisionsByToken") + authorizationServiceGetDecisionByTokenMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetDecisionByToken") + authorizationServiceGetEntitlementsMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetEntitlements") ) // AuthorizationServiceClient is a client for the authorization.v2.AuthorizationService service. type AuthorizationServiceClient interface { - GetDecisions(context.Context, *connect.Request[v2.GetDecisionsRequest]) (*connect.Response[v2.GetDecisionsResponse], error) - GetDecisionsByToken(context.Context, *connect.Request[v2.GetDecisionsByTokenRequest]) (*connect.Response[v2.GetDecisionsByTokenResponse], error) + GetDecision(context.Context, *connect.Request[v2.GetDecisionRequest]) (*connect.Response[v2.GetDecisionResponse], error) + BulkGetDecisions(context.Context, *connect.Request[v2.BulkGetDecisionsRequest]) (*connect.Response[v2.BulkGetDecisionsResponse], error) + BulkGetDecisionsByToken(context.Context, *connect.Request[v2.BulkGetDecisionsByTokenRequest]) (*connect.Response[v2.BulkGetDecisionsByTokenResponse], error) + GetDecisionByToken(context.Context, *connect.Request[v2.GetDecisionByTokenRequest]) (*connect.Response[v2.GetDecisionByTokenResponse], error) GetEntitlements(context.Context, *connect.Request[v2.GetEntitlementsRequest]) (*connect.Response[v2.GetEntitlementsResponse], error) } @@ -69,16 +79,28 @@ type AuthorizationServiceClient interface { func NewAuthorizationServiceClient(httpClient connect.HTTPClient, baseURL string, opts ...connect.ClientOption) AuthorizationServiceClient { baseURL = strings.TrimRight(baseURL, "/") return &authorizationServiceClient{ - getDecisions: connect.NewClient[v2.GetDecisionsRequest, v2.GetDecisionsResponse]( + getDecision: connect.NewClient[v2.GetDecisionRequest, v2.GetDecisionResponse]( httpClient, - baseURL+AuthorizationServiceGetDecisionsProcedure, - connect.WithSchema(authorizationServiceGetDecisionsMethodDescriptor), + baseURL+AuthorizationServiceGetDecisionProcedure, + connect.WithSchema(authorizationServiceGetDecisionMethodDescriptor), connect.WithClientOptions(opts...), ), - getDecisionsByToken: connect.NewClient[v2.GetDecisionsByTokenRequest, v2.GetDecisionsByTokenResponse]( + bulkGetDecisions: connect.NewClient[v2.BulkGetDecisionsRequest, v2.BulkGetDecisionsResponse]( httpClient, - baseURL+AuthorizationServiceGetDecisionsByTokenProcedure, - connect.WithSchema(authorizationServiceGetDecisionsByTokenMethodDescriptor), + baseURL+AuthorizationServiceBulkGetDecisionsProcedure, + connect.WithSchema(authorizationServiceBulkGetDecisionsMethodDescriptor), + connect.WithClientOptions(opts...), + ), + bulkGetDecisionsByToken: connect.NewClient[v2.BulkGetDecisionsByTokenRequest, v2.BulkGetDecisionsByTokenResponse]( + httpClient, + baseURL+AuthorizationServiceBulkGetDecisionsByTokenProcedure, + connect.WithSchema(authorizationServiceBulkGetDecisionsByTokenMethodDescriptor), + connect.WithClientOptions(opts...), + ), + getDecisionByToken: connect.NewClient[v2.GetDecisionByTokenRequest, v2.GetDecisionByTokenResponse]( + httpClient, + baseURL+AuthorizationServiceGetDecisionByTokenProcedure, + connect.WithSchema(authorizationServiceGetDecisionByTokenMethodDescriptor), connect.WithClientOptions(opts...), ), getEntitlements: connect.NewClient[v2.GetEntitlementsRequest, v2.GetEntitlementsResponse]( @@ -92,19 +114,31 @@ func NewAuthorizationServiceClient(httpClient connect.HTTPClient, baseURL string // authorizationServiceClient implements AuthorizationServiceClient. type authorizationServiceClient struct { - getDecisions *connect.Client[v2.GetDecisionsRequest, v2.GetDecisionsResponse] - getDecisionsByToken *connect.Client[v2.GetDecisionsByTokenRequest, v2.GetDecisionsByTokenResponse] - getEntitlements *connect.Client[v2.GetEntitlementsRequest, v2.GetEntitlementsResponse] + getDecision *connect.Client[v2.GetDecisionRequest, v2.GetDecisionResponse] + bulkGetDecisions *connect.Client[v2.BulkGetDecisionsRequest, v2.BulkGetDecisionsResponse] + bulkGetDecisionsByToken *connect.Client[v2.BulkGetDecisionsByTokenRequest, v2.BulkGetDecisionsByTokenResponse] + getDecisionByToken *connect.Client[v2.GetDecisionByTokenRequest, v2.GetDecisionByTokenResponse] + getEntitlements *connect.Client[v2.GetEntitlementsRequest, v2.GetEntitlementsResponse] +} + +// GetDecision calls authorization.v2.AuthorizationService.GetDecision. +func (c *authorizationServiceClient) GetDecision(ctx context.Context, req *connect.Request[v2.GetDecisionRequest]) (*connect.Response[v2.GetDecisionResponse], error) { + return c.getDecision.CallUnary(ctx, req) +} + +// BulkGetDecisions calls authorization.v2.AuthorizationService.BulkGetDecisions. +func (c *authorizationServiceClient) BulkGetDecisions(ctx context.Context, req *connect.Request[v2.BulkGetDecisionsRequest]) (*connect.Response[v2.BulkGetDecisionsResponse], error) { + return c.bulkGetDecisions.CallUnary(ctx, req) } -// GetDecisions calls authorization.v2.AuthorizationService.GetDecisions. -func (c *authorizationServiceClient) GetDecisions(ctx context.Context, req *connect.Request[v2.GetDecisionsRequest]) (*connect.Response[v2.GetDecisionsResponse], error) { - return c.getDecisions.CallUnary(ctx, req) +// BulkGetDecisionsByToken calls authorization.v2.AuthorizationService.BulkGetDecisionsByToken. +func (c *authorizationServiceClient) BulkGetDecisionsByToken(ctx context.Context, req *connect.Request[v2.BulkGetDecisionsByTokenRequest]) (*connect.Response[v2.BulkGetDecisionsByTokenResponse], error) { + return c.bulkGetDecisionsByToken.CallUnary(ctx, req) } -// GetDecisionsByToken calls authorization.v2.AuthorizationService.GetDecisionsByToken. -func (c *authorizationServiceClient) GetDecisionsByToken(ctx context.Context, req *connect.Request[v2.GetDecisionsByTokenRequest]) (*connect.Response[v2.GetDecisionsByTokenResponse], error) { - return c.getDecisionsByToken.CallUnary(ctx, req) +// GetDecisionByToken calls authorization.v2.AuthorizationService.GetDecisionByToken. +func (c *authorizationServiceClient) GetDecisionByToken(ctx context.Context, req *connect.Request[v2.GetDecisionByTokenRequest]) (*connect.Response[v2.GetDecisionByTokenResponse], error) { + return c.getDecisionByToken.CallUnary(ctx, req) } // GetEntitlements calls authorization.v2.AuthorizationService.GetEntitlements. @@ -115,8 +149,10 @@ func (c *authorizationServiceClient) GetEntitlements(ctx context.Context, req *c // AuthorizationServiceHandler is an implementation of the authorization.v2.AuthorizationService // service. type AuthorizationServiceHandler interface { - GetDecisions(context.Context, *connect.Request[v2.GetDecisionsRequest]) (*connect.Response[v2.GetDecisionsResponse], error) - GetDecisionsByToken(context.Context, *connect.Request[v2.GetDecisionsByTokenRequest]) (*connect.Response[v2.GetDecisionsByTokenResponse], error) + GetDecision(context.Context, *connect.Request[v2.GetDecisionRequest]) (*connect.Response[v2.GetDecisionResponse], error) + BulkGetDecisions(context.Context, *connect.Request[v2.BulkGetDecisionsRequest]) (*connect.Response[v2.BulkGetDecisionsResponse], error) + BulkGetDecisionsByToken(context.Context, *connect.Request[v2.BulkGetDecisionsByTokenRequest]) (*connect.Response[v2.BulkGetDecisionsByTokenResponse], error) + GetDecisionByToken(context.Context, *connect.Request[v2.GetDecisionByTokenRequest]) (*connect.Response[v2.GetDecisionByTokenResponse], error) GetEntitlements(context.Context, *connect.Request[v2.GetEntitlementsRequest]) (*connect.Response[v2.GetEntitlementsResponse], error) } @@ -126,16 +162,28 @@ type AuthorizationServiceHandler interface { // By default, handlers support the Connect, gRPC, and gRPC-Web protocols with the binary Protobuf // and JSON codecs. They also support gzip compression. func NewAuthorizationServiceHandler(svc AuthorizationServiceHandler, opts ...connect.HandlerOption) (string, http.Handler) { - authorizationServiceGetDecisionsHandler := connect.NewUnaryHandler( - AuthorizationServiceGetDecisionsProcedure, - svc.GetDecisions, - connect.WithSchema(authorizationServiceGetDecisionsMethodDescriptor), + authorizationServiceGetDecisionHandler := connect.NewUnaryHandler( + AuthorizationServiceGetDecisionProcedure, + svc.GetDecision, + connect.WithSchema(authorizationServiceGetDecisionMethodDescriptor), + connect.WithHandlerOptions(opts...), + ) + authorizationServiceBulkGetDecisionsHandler := connect.NewUnaryHandler( + AuthorizationServiceBulkGetDecisionsProcedure, + svc.BulkGetDecisions, + connect.WithSchema(authorizationServiceBulkGetDecisionsMethodDescriptor), + connect.WithHandlerOptions(opts...), + ) + authorizationServiceBulkGetDecisionsByTokenHandler := connect.NewUnaryHandler( + AuthorizationServiceBulkGetDecisionsByTokenProcedure, + svc.BulkGetDecisionsByToken, + connect.WithSchema(authorizationServiceBulkGetDecisionsByTokenMethodDescriptor), connect.WithHandlerOptions(opts...), ) - authorizationServiceGetDecisionsByTokenHandler := connect.NewUnaryHandler( - AuthorizationServiceGetDecisionsByTokenProcedure, - svc.GetDecisionsByToken, - connect.WithSchema(authorizationServiceGetDecisionsByTokenMethodDescriptor), + authorizationServiceGetDecisionByTokenHandler := connect.NewUnaryHandler( + AuthorizationServiceGetDecisionByTokenProcedure, + svc.GetDecisionByToken, + connect.WithSchema(authorizationServiceGetDecisionByTokenMethodDescriptor), connect.WithHandlerOptions(opts...), ) authorizationServiceGetEntitlementsHandler := connect.NewUnaryHandler( @@ -146,10 +194,14 @@ func NewAuthorizationServiceHandler(svc AuthorizationServiceHandler, opts ...con ) return "/authorization.v2.AuthorizationService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { switch r.URL.Path { - case AuthorizationServiceGetDecisionsProcedure: - authorizationServiceGetDecisionsHandler.ServeHTTP(w, r) - case AuthorizationServiceGetDecisionsByTokenProcedure: - authorizationServiceGetDecisionsByTokenHandler.ServeHTTP(w, r) + case AuthorizationServiceGetDecisionProcedure: + authorizationServiceGetDecisionHandler.ServeHTTP(w, r) + case AuthorizationServiceBulkGetDecisionsProcedure: + authorizationServiceBulkGetDecisionsHandler.ServeHTTP(w, r) + case AuthorizationServiceBulkGetDecisionsByTokenProcedure: + authorizationServiceBulkGetDecisionsByTokenHandler.ServeHTTP(w, r) + case AuthorizationServiceGetDecisionByTokenProcedure: + authorizationServiceGetDecisionByTokenHandler.ServeHTTP(w, r) case AuthorizationServiceGetEntitlementsProcedure: authorizationServiceGetEntitlementsHandler.ServeHTTP(w, r) default: @@ -161,12 +213,20 @@ func NewAuthorizationServiceHandler(svc AuthorizationServiceHandler, opts ...con // UnimplementedAuthorizationServiceHandler returns CodeUnimplemented from all methods. type UnimplementedAuthorizationServiceHandler struct{} -func (UnimplementedAuthorizationServiceHandler) GetDecisions(context.Context, *connect.Request[v2.GetDecisionsRequest]) (*connect.Response[v2.GetDecisionsResponse], error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("authorization.v2.AuthorizationService.GetDecisions is not implemented")) +func (UnimplementedAuthorizationServiceHandler) GetDecision(context.Context, *connect.Request[v2.GetDecisionRequest]) (*connect.Response[v2.GetDecisionResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("authorization.v2.AuthorizationService.GetDecision is not implemented")) +} + +func (UnimplementedAuthorizationServiceHandler) BulkGetDecisions(context.Context, *connect.Request[v2.BulkGetDecisionsRequest]) (*connect.Response[v2.BulkGetDecisionsResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("authorization.v2.AuthorizationService.BulkGetDecisions is not implemented")) +} + +func (UnimplementedAuthorizationServiceHandler) BulkGetDecisionsByToken(context.Context, *connect.Request[v2.BulkGetDecisionsByTokenRequest]) (*connect.Response[v2.BulkGetDecisionsByTokenResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("authorization.v2.AuthorizationService.BulkGetDecisionsByToken is not implemented")) } -func (UnimplementedAuthorizationServiceHandler) GetDecisionsByToken(context.Context, *connect.Request[v2.GetDecisionsByTokenRequest]) (*connect.Response[v2.GetDecisionsByTokenResponse], error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("authorization.v2.AuthorizationService.GetDecisionsByToken is not implemented")) +func (UnimplementedAuthorizationServiceHandler) GetDecisionByToken(context.Context, *connect.Request[v2.GetDecisionByTokenRequest]) (*connect.Response[v2.GetDecisionByTokenResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("authorization.v2.AuthorizationService.GetDecisionByToken is not implemented")) } func (UnimplementedAuthorizationServiceHandler) GetEntitlements(context.Context, *connect.Request[v2.GetEntitlementsRequest]) (*connect.Response[v2.GetEntitlementsResponse], error) { diff --git a/service/authorization/v2/authorization.proto b/service/authorization/v2/authorization.proto index 15aac79d4d..ee90c07460 100644 --- a/service/authorization/v2/authorization.proto +++ b/service/authorization/v2/authorization.proto @@ -2,18 +2,20 @@ syntax = "proto3"; package authorization.v2; -import "google/api/annotations.proto"; import "google/protobuf/any.proto"; import "policy/objects.proto"; message Token { - string id = 1; // ephemeral id for tracking between request and response - string jwt = 2; // the token + // ephemeral id for tracking between request and response + string ephemeral_id = 1; + // access token + string jwt = 2; } // PE (Person Entity) or NPE (Non-Person Entity) message Entity { - string id = 1; // ephemeral id for tracking between request and response + // ephemeral id for tracking between request and response + string ephemeral_id = 1; // Standard entity types supported by the platform oneof entity_type { // one of the entity options must be set @@ -24,8 +26,7 @@ message Entity { google.protobuf.Any claims = 6; EntityCustom custom = 7; string client_id = 8; - // FQN or URN (when supported) - string registered_resource_identifier = 10; + string registered_resource_fqn = 10; } enum Category { CATEGORY_UNSPECIFIED = 0; @@ -42,15 +43,16 @@ message EntityCustom { // A set of related PE and NPE message EntityChain { - string id = 1; // ephemeral id for tracking between request and response + // ephemeral id for tracking between request and response + string ephemeral_id = 1; repeated Entity entities = 2; } -// Can the entity (PE or NPE) represented by each entity chain take the provided actions on the set of resources +// Can the entity (PE or NPE) represented by each entity chain take the provided action on the set of resources message DecisionRequest { - repeated policy.Action actions = 1; - repeated EntityChain entity_chains = 2; - repeated Resource resource_attributes = 3; + EntityChain entity = 1; + policy.Action action = 2; + Resource resource = 3; } message DecisionResponse { @@ -58,26 +60,39 @@ message DecisionResponse { DECISION_UNSPECIFIED = 0; DECISION_DENY = 1; DECISION_PERMIT = 2; + // DECISION_OBLIGATED = 3; } - string entity_chain_id = 1; // ephemeral entity chain id from the request - string resource_attributes_id = 2; // ephemeral resource attributes id from the request - policy.Action action = 3; // Action of the decision response - Decision decision = 4; // The decision response - repeated string obligations = 5; //optional list of obligations represented in URI format + // ephemeral id for tracking between request and response + string ephemeral_entity_chain_id = 1; + // ephemeral id for tracking between request and response + string ephemeral_resource_id = 2; + // action that was requested + policy.Action action = 3; + // the decision response + Decision decision = 4; + // optional list of obligations represented in URI format + // repeated string obligations = 5; } -message GetDecisionsRequest { - repeated DecisionRequest decision_requests = 1; +message GetDecisionRequest { + DecisionRequest decision_request = 1; +} +message GetDecisionResponse { + DecisionResponse decision_response = 1; } -message GetDecisionsResponse { +// More performant bulk request for multiple decisions +message BulkGetDecisionsRequest { + repeated DecisionRequest decision_requests = 1; +} +message BulkGetDecisionsResponse { repeated DecisionResponse decision_responses = 1; } message GetEntitlementsRequest { // list of requested entities repeated Entity entities = 1; - // optional attribute fqn as a scope + // optional resource as a scope optional Resource scope = 2; // optional parameter to return a full list of entitlements - returns lower hierarchy attributes optional bool with_comprehensive_hierarchy = 3; @@ -93,21 +108,18 @@ message EntityEntitlements { map actions_per_attribute_value_fqn = 2; } -// A logical bucket of attributes belonging to a "Resource" +// Either a registered resource or a set of attribute values message Resource { + // ephemeral id for tracking between request and response string ephemeral_id = 1; message AttributeValues { - repeated string fqn = 1; - } - message RegisteredResources { - // FQN or URN (when supported) - repeated string identifier = 1; + repeated string fqns = 1; } oneof resource { AttributeValues attribute_values = 2; - RegisteredResources registered_resources = 3; + string registered_resource_fqn = 3; } } @@ -115,29 +127,34 @@ message GetEntitlementsResponse { repeated EntityEntitlements entitlements = 1; } +// Can the entity (PE or NPE) represented by this token take the provided action on the set of resources message TokenDecisionRequest { - repeated policy.Action actions = 1; - repeated Token tokens = 2; - repeated Resource resource_attributes = 3; + Token token = 1; + policy.Action action = 2; + Resource resource = 3; } -message GetDecisionsByTokenRequest { - repeated TokenDecisionRequest decision_requests = 1; +message GetDecisionByTokenRequest { + TokenDecisionRequest decision_request = 1; +} +message GetDecisionByTokenResponse { + DecisionResponse decision_response = 1; } -message GetDecisionsByTokenResponse { +// More performant bulk request for multiple decisions +message BulkGetDecisionsByTokenRequest { + repeated TokenDecisionRequest decision_requests = 1; +} +message BulkGetDecisionsByTokenResponse { repeated DecisionResponse decision_responses = 1; } service AuthorizationService { - rpc GetDecisions(GetDecisionsRequest) returns (GetDecisionsResponse) { - option (google.api.http) = { - post: "/v1/authorization" - body: "*" - }; - } - rpc GetDecisionsByToken(GetDecisionsByTokenRequest) returns (GetDecisionsByTokenResponse) { - option (google.api.http) = {post: "/v1/token/authorization"}; - } + rpc GetDecision(GetDecisionRequest) returns (GetDecisionResponse) {} + rpc BulkGetDecisions(BulkGetDecisionsRequest) returns (BulkGetDecisionsResponse) {} + + rpc BulkGetDecisionsByToken(BulkGetDecisionsByTokenRequest) returns (BulkGetDecisionsByTokenResponse) {} + rpc GetDecisionByToken(GetDecisionByTokenRequest) returns (GetDecisionByTokenResponse) {} + rpc GetEntitlements(GetEntitlementsRequest) returns (GetEntitlementsResponse) {} } From 50d8436409f362a0dc1d9fb2ce3f400dda8cb7e4 Mon Sep 17 00:00:00 2001 From: jakedoublev Date: Tue, 29 Apr 2025 11:07:38 -0700 Subject: [PATCH 07/49] put back original authz protos --- docs/grpc/index.html | 4 +- .../authorization/authorization.swagger.json | 9 +- protocol/go/authorization/authorization.pb.go | 44 ++++ service/authorization/authorization.proto | 201 +++++++++++------- 4 files changed, 181 insertions(+), 77 deletions(-) diff --git a/docs/grpc/index.html b/docs/grpc/index.html index 15f1784927..9984fb7f00 100644 --- a/docs/grpc/index.html +++ b/docs/grpc/index.html @@ -3375,7 +3375,7 @@

      GetDecisionsResponse

      GetEntitlementsRequest

      -

      +

      Request to get entitlements for one or more entities for an optional attribute scope

      Example: Get entitlements for bob and alice (both represented using an email address

      {

      "entities": [

      {

      "id": "e1",

      "emailAddress": "bob@example.org"

      },

      {

      "id": "e2",

      "emailAddress": "alice@example.org"

      }

      ],

      "scope": {

      "attributeFqns": [

      "https://example.net/attr/attr1/value/value1",

      "https://example.net/attr/attr1/value/value2"

      ]

      }

      }

      @@ -3413,7 +3413,7 @@

      GetEntitlementsRequest

      GetEntitlementsResponse

      -

      +

      Example Response for a request of : Get entitlements for bob and alice (both represented using an email address

      {

      "entitlements": [

      {

      "entityId": "e1",

      "attributeValueReferences": [

      {

      "attributeFqn": "http://www.example.org/attr/foo/value/bar"

      }

      ]

      },

      {

      "entityId": "e2",

      "attributeValueReferences": [

      {

      "attributeFqn": "http://www.example.org/attr/color/value/red"

      }

      ]

      }

      ]

      }

      diff --git a/docs/openapi/authorization/authorization.swagger.json b/docs/openapi/authorization/authorization.swagger.json index e223d843e9..5f9b787c93 100644 --- a/docs/openapi/authorization/authorization.swagger.json +++ b/docs/openapi/authorization/authorization.swagger.json @@ -68,6 +68,7 @@ "parameters": [ { "name": "body", + "description": "Example: Get entitlements for bob and alice (both represented using an email address\n\n{\n\"entities\": [\n{\n\"id\": \"e1\",\n\"emailAddress\": \"bob@example.org\"\n},\n{\n\"id\": \"e2\",\n\"emailAddress\": \"alice@example.org\"\n}\n],\n\"scope\": {\n\"attributeFqns\": [\n\"https://example.net/attr/attr1/value/value1\",\n\"https://example.net/attr/attr1/value/value2\"\n]\n}\n}", "in": "body", "required": true, "schema": { @@ -320,7 +321,9 @@ "type": "boolean", "title": "optional parameter to return a full list of entitlements - returns lower hierarchy attributes" } - } + }, + "description": "Example: Get entitlements for bob and alice (both represented using an email address\n\n{\n\"entities\": [\n{\n\"id\": \"e1\",\n\"emailAddress\": \"bob@example.org\"\n},\n{\n\"id\": \"e2\",\n\"emailAddress\": \"alice@example.org\"\n}\n],\n\"scope\": {\n\"attributeFqns\": [\n\"https://example.net/attr/attr1/value/value1\",\n\"https://example.net/attr/attr1/value/value2\"\n]\n}\n}", + "title": "Request to get entitlements for one or more entities for an optional attribute scope" }, "authorizationGetEntitlementsResponse": { "type": "object", @@ -332,7 +335,9 @@ "$ref": "#/definitions/authorizationEntityEntitlements" } } - } + }, + "description": "{\n\"entitlements\": [\n{\n\"entityId\": \"e1\",\n\"attributeValueReferences\": [\n{\n\"attributeFqn\": \"http://www.example.org/attr/foo/value/bar\"\n}\n]\n},\n{\n\"entityId\": \"e2\",\n\"attributeValueReferences\": [\n{\n\"attributeFqn\": \"http://www.example.org/attr/color/value/red\"\n}\n]\n}\n]\n}", + "title": "Example Response for a request of : Get entitlements for bob and alice (both represented using an email address" }, "authorizationResourceAttribute": { "type": "object", diff --git a/protocol/go/authorization/authorization.pb.go b/protocol/go/authorization/authorization.pb.go index 4740cde29e..210f7213fe 100644 --- a/protocol/go/authorization/authorization.pb.go +++ b/protocol/go/authorization/authorization.pb.go @@ -764,6 +764,28 @@ func (x *GetDecisionsResponse) GetDecisionResponses() []*DecisionResponse { return nil } +// Request to get entitlements for one or more entities for an optional attribute scope +// +// Example: Get entitlements for bob and alice (both represented using an email address +// +// { +// "entities": [ +// { +// "id": "e1", +// "emailAddress": "bob@example.org" +// }, +// { +// "id": "e2", +// "emailAddress": "alice@example.org" +// } +// ], +// "scope": { +// "attributeFqns": [ +// "https://example.net/attr/attr1/value/value1", +// "https://example.net/attr/attr1/value/value2" +// ] +// } +// } type GetEntitlementsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -941,6 +963,28 @@ func (x *ResourceAttribute) GetAttributeValueFqns() []string { return nil } +// Example Response for a request of : Get entitlements for bob and alice (both represented using an email address +// +// { +// "entitlements": [ +// { +// "entityId": "e1", +// "attributeValueReferences": [ +// { +// "attributeFqn": "http://www.example.org/attr/foo/value/bar" +// } +// ] +// }, +// { +// "entityId": "e2", +// "attributeValueReferences": [ +// { +// "attributeFqn": "http://www.example.org/attr/color/value/red" +// } +// ] +// } +// ] +// } type GetEntitlementsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache diff --git a/service/authorization/authorization.proto b/service/authorization/authorization.proto index 39801a3aff..f2b4a7b1d8 100644 --- a/service/authorization/authorization.proto +++ b/service/authorization/authorization.proto @@ -4,8 +4,10 @@ package authorization; import "google/api/annotations.proto"; import "google/protobuf/any.proto"; + import "policy/objects.proto"; + message Token { string id = 1; // ephemeral id for tracking between request and response string jwt = 2; // the token @@ -45,50 +47,50 @@ message EntityChain { } /* - Example Request Get Decisions to answer the question - Do Bob (represented by entity chain ec1) - and Alice (represented by entity chain ec2) have TRANSMIT authorization for - 2 resources; resource1 (attr-set-1) defined by attributes foo:bar resource2 (attr-set-2) defined by attribute foo:bar, color:red ? + Example Request Get Decisions to answer the question - Do Bob (represented by entity chain ec1) + and Alice (represented by entity chain ec2) have TRANSMIT authorization for + 2 resources; resource1 (attr-set-1) defined by attributes foo:bar resource2 (attr-set-2) defined by attribute foo:bar, color:red ? - { - "actions": [ - { - "standard": "STANDARD_ACTION_TRANSMIT" - } - ], - "entityChains": [ - { - "id": "ec1", - "entities": [ - { - "emailAddress": "bob@example.org" - } - ] - }, - { - "id": "ec2", - "entities": [ - { - "userName": "alice@example.org" - } - ] - } - ], - "resourceAttributes": [ - { - "resourceAttributeId": "attr-set-1", - "attributeFqns": [ - "https://www.example.org/attr/foo/value/value1" - ] - }, - { - "resourceAttributeId": "attr-set-2", - "attributeFqns": [ - "https://example.net/attr/attr1/value/value1", - "https://example.net/attr/attr1/value/value2" - ] - } - ] - } + { + "actions": [ + { + "standard": "STANDARD_ACTION_TRANSMIT" + } + ], + "entityChains": [ + { + "id": "ec1", + "entities": [ + { + "emailAddress": "bob@example.org" + } + ] + }, + { + "id": "ec2", + "entities": [ + { + "userName": "alice@example.org" + } + ] + } + ], + "resourceAttributes": [ + { + "resourceAttributeId": "attr-set-1", + "attributeFqns": [ + "https://www.example.org/attr/foo/value/value1" + ] + }, + { + "resourceAttributeId": "attr-set-2", + "attributeFqns": [ + "https://example.net/attr/attr1/value/value1", + "https://example.net/attr/attr1/value/value2" + ] + } + ] +} */ message DecisionRequest { @@ -156,6 +158,31 @@ message GetDecisionsResponse { repeated DecisionResponse decision_responses = 1; } +/* + Request to get entitlements for one or more entities for an optional attribute scope + + Example: Get entitlements for bob and alice (both represented using an email address + + { + "entities": [ + { + "id": "e1", + "emailAddress": "bob@example.org" + }, + { + "id": "e2", + "emailAddress": "alice@example.org" + } + ], + "scope": { + "attributeFqns": [ + "https://example.net/attr/attr1/value/value1", + "https://example.net/attr/attr1/value/value2" + ] + } + } + +*/ message GetEntitlementsRequest { // list of requested entities repeated Entity entities = 1; @@ -176,46 +203,74 @@ message ResourceAttribute { repeated string attribute_value_fqns = 2; } -message GetEntitlementsResponse { - repeated EntityEntitlements entitlements = 1; -} - /* - Example Request Get Decisions by Token to answer the question - Do Bob and client1 (represented by token tok1) - and Alice and client2 (represented by token tok2) have TRANSMIT authorization for - 2 resources; resource1 (attr-set-1) defined by attributes foo:bar resource2 (attr-set-2) defined by attribute foo:bar, color:red ? - { - "actions": [ - { - "standard": "STANDARD_ACTION_TRANSMIT" - } - ], - "tokens": [ - { - "id": "tok1", - "jwt": .... - }, - { - "id": "tok2", - "jwt": ..... - } - ], - "resourceAttributes": [ + Example Response for a request of : Get entitlements for bob and alice (both represented using an email address + + { + "entitlements": [ { - "attributeFqns": [ - "https://www.example.org/attr/foo/value/value1" + "entityId": "e1", + "attributeValueReferences": [ + { + "attributeFqn": "http://www.example.org/attr/foo/value/bar" + } ] }, { - "attributeFqns": [ - "https://example.net/attr/attr1/value/value1", - "https://example.net/attr/attr1/value/value2" + "entityId": "e2", + "attributeValueReferences": [ + { + "attributeFqn": "http://www.example.org/attr/color/value/red" + } ] } ] } + +*/ +message GetEntitlementsResponse { + repeated EntityEntitlements entitlements = 1; +} + + +/* + Example Request Get Decisions by Token to answer the question - Do Bob and client1 (represented by token tok1) + and Alice and client2 (represented by token tok2) have TRANSMIT authorization for + 2 resources; resource1 (attr-set-1) defined by attributes foo:bar resource2 (attr-set-2) defined by attribute foo:bar, color:red ? + + { + "actions": [ + { + "standard": "STANDARD_ACTION_TRANSMIT" + } + ], + "tokens": [ + { + "id": "tok1", + "jwt": .... + }, + { + "id": "tok2", + "jwt": ..... + } + ], + "resourceAttributes": [ + { + "attributeFqns": [ + "https://www.example.org/attr/foo/value/value1" + ] + }, + { + "attributeFqns": [ + "https://example.net/attr/attr1/value/value1", + "https://example.net/attr/attr1/value/value2" + ] + } + ] +} + */ message TokenDecisionRequest { repeated policy.Action actions = 1; @@ -247,4 +302,4 @@ service AuthorizationService { body: "*" }; } -} +} \ No newline at end of file From 88c25d278759a47459d4c2b8e2f8b3239da51ac3 Mon Sep 17 00:00:00 2001 From: Ryan Yanulites Date: Wed, 30 Apr 2025 08:52:22 -0600 Subject: [PATCH 08/49] undo change to original authn proto file --- service/authorization/authorization.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/service/authorization/authorization.proto b/service/authorization/authorization.proto index f2b4a7b1d8..058f1f18f3 100644 --- a/service/authorization/authorization.proto +++ b/service/authorization/authorization.proto @@ -302,4 +302,4 @@ service AuthorizationService { body: "*" }; } -} \ No newline at end of file +} From b3c41f3387d11379841de8fc8f770ef85e232d97 Mon Sep 17 00:00:00 2001 From: Ryan Yanulites Date: Wed, 30 Apr 2025 09:00:51 -0600 Subject: [PATCH 09/49] rename reg res fqn to use value --- docs/grpc/index.html | 4 +- .../v2/authorization.swagger.json | 4 +- .../go/authorization/v2/authorization.pb.go | 485 +++++++++--------- service/authorization/v2/authorization.proto | 4 +- 4 files changed, 249 insertions(+), 248 deletions(-) diff --git a/docs/grpc/index.html b/docs/grpc/index.html index 9984fb7f00..ec6f27342e 100644 --- a/docs/grpc/index.html +++ b/docs/grpc/index.html @@ -3938,7 +3938,7 @@

      Entity

      - + @@ -4282,7 +4282,7 @@

      Resource

      - + diff --git a/docs/openapi/authorization/v2/authorization.swagger.json b/docs/openapi/authorization/v2/authorization.swagger.json index 843cde8ff2..c46b2b6833 100644 --- a/docs/openapi/authorization/v2/authorization.swagger.json +++ b/docs/openapi/authorization/v2/authorization.swagger.json @@ -126,7 +126,7 @@ "clientId": { "type": "string" }, - "registeredResourceFqn": { + "registeredResourceValueFqn": { "type": "string" }, "category": { @@ -352,7 +352,7 @@ "attributeValues": { "$ref": "#/definitions/ResourceAttributeValues" }, - "registeredResourceFqn": { + "registeredResourceValueFqn": { "type": "string" } }, diff --git a/protocol/go/authorization/v2/authorization.pb.go b/protocol/go/authorization/v2/authorization.pb.go index 573686e76d..22fb2473a6 100644 --- a/protocol/go/authorization/v2/authorization.pb.go +++ b/protocol/go/authorization/v2/authorization.pb.go @@ -196,7 +196,7 @@ type Entity struct { // *Entity_Claims // *Entity_Custom // *Entity_ClientId - // *Entity_RegisteredResourceFqn + // *Entity_RegisteredResourceValueFqn EntityType isEntity_EntityType `protobuf_oneof:"entity_type"` Category Entity_Category `protobuf:"varint,9,opt,name=category,proto3,enum=authorization.v2.Entity_Category" json:"category,omitempty"` } @@ -296,9 +296,9 @@ func (x *Entity) GetClientId() string { return "" } -func (x *Entity) GetRegisteredResourceFqn() string { - if x, ok := x.GetEntityType().(*Entity_RegisteredResourceFqn); ok { - return x.RegisteredResourceFqn +func (x *Entity) GetRegisteredResourceValueFqn() string { + if x, ok := x.GetEntityType().(*Entity_RegisteredResourceValueFqn); ok { + return x.RegisteredResourceValueFqn } return "" } @@ -343,8 +343,8 @@ type Entity_ClientId struct { ClientId string `protobuf:"bytes,8,opt,name=client_id,json=clientId,proto3,oneof"` } -type Entity_RegisteredResourceFqn struct { - RegisteredResourceFqn string `protobuf:"bytes,10,opt,name=registered_resource_fqn,json=registeredResourceFqn,proto3,oneof"` +type Entity_RegisteredResourceValueFqn struct { + RegisteredResourceValueFqn string `protobuf:"bytes,10,opt,name=registered_resource_value_fqn,json=registeredResourceValueFqn,proto3,oneof"` } func (*Entity_EmailAddress) isEntity_EntityType() {} @@ -361,7 +361,7 @@ func (*Entity_Custom) isEntity_EntityType() {} func (*Entity_ClientId) isEntity_EntityType() {} -func (*Entity_RegisteredResourceFqn) isEntity_EntityType() {} +func (*Entity_RegisteredResourceValueFqn) isEntity_EntityType() {} // Entity type for custom entities beyond the standard types type EntityCustom struct { @@ -929,7 +929,7 @@ type Resource struct { // Types that are assignable to Resource: // // *Resource_AttributeValues_ - // *Resource_RegisteredResourceFqn + // *Resource_RegisteredResourceValueFqn Resource isResource_Resource `protobuf_oneof:"resource"` } @@ -986,9 +986,9 @@ func (x *Resource) GetAttributeValues() *Resource_AttributeValues { return nil } -func (x *Resource) GetRegisteredResourceFqn() string { - if x, ok := x.GetResource().(*Resource_RegisteredResourceFqn); ok { - return x.RegisteredResourceFqn +func (x *Resource) GetRegisteredResourceValueFqn() string { + if x, ok := x.GetResource().(*Resource_RegisteredResourceValueFqn); ok { + return x.RegisteredResourceValueFqn } return "" } @@ -1001,13 +1001,13 @@ type Resource_AttributeValues_ struct { AttributeValues *Resource_AttributeValues `protobuf:"bytes,2,opt,name=attribute_values,json=attributeValues,proto3,oneof"` } -type Resource_RegisteredResourceFqn struct { - RegisteredResourceFqn string `protobuf:"bytes,3,opt,name=registered_resource_fqn,json=registeredResourceFqn,proto3,oneof"` +type Resource_RegisteredResourceValueFqn struct { + RegisteredResourceValueFqn string `protobuf:"bytes,3,opt,name=registered_resource_value_fqn,json=registeredResourceValueFqn,proto3,oneof"` } func (*Resource_AttributeValues_) isResource_Resource() {} -func (*Resource_RegisteredResourceFqn) isResource_Resource() {} +func (*Resource_RegisteredResourceValueFqn) isResource_Resource() {} type GetEntitlementsResponse struct { state protoimpl.MessageState @@ -1416,7 +1416,7 @@ var file_authorization_v2_authorization_proto_rawDesc = []byte{ 0x65, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6a, 0x77, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6a, 0x77, 0x74, 0x22, 0x9c, 0x04, 0x0a, 0x06, 0x45, 0x6e, 0x74, 0x69, + 0x28, 0x09, 0x52, 0x03, 0x6a, 0x77, 0x74, 0x22, 0xa7, 0x04, 0x0a, 0x06, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0d, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x61, @@ -1436,240 +1436,241 @@ var file_authorization_v2_authorization_proto_rawDesc = []byte{ 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x00, 0x52, 0x06, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x1d, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, - 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x38, 0x0a, 0x17, 0x72, 0x65, 0x67, 0x69, + 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x1d, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, - 0x66, 0x71, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x15, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x46, - 0x71, 0x6e, 0x12, 0x3d, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x43, - 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, - 0x79, 0x22, 0x54, 0x0a, 0x08, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x18, 0x0a, - 0x14, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, - 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x41, 0x54, 0x45, 0x47, - 0x4f, 0x52, 0x59, 0x5f, 0x53, 0x55, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x01, 0x12, 0x18, 0x0a, - 0x14, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x45, 0x4e, 0x56, 0x49, 0x52, 0x4f, - 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x42, 0x0d, 0x0a, 0x0b, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x42, 0x0a, 0x0c, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x32, 0x0a, 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, - 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x66, 0x0a, 0x0b, 0x45, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, - 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0b, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x08, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, - 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, - 0x65, 0x73, 0x22, 0xa8, 0x01, 0x0a, 0x0f, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x35, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x26, 0x0a, - 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, - 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x36, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0xc0, 0x02, - 0x0a, 0x10, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x32, 0x0a, - 0x15, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x65, 0x70, - 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, - 0x64, 0x12, 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x47, 0x0a, 0x08, 0x64, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, - 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x22, 0x4c, 0x0a, 0x08, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, - 0x0a, 0x14, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, - 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x45, 0x43, 0x49, - 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4e, 0x59, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x44, - 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x54, 0x10, 0x02, - 0x22, 0x62, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x21, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x52, 0x0f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x22, 0x66, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x11, 0x64, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x48, + 0x00, 0x52, 0x1a, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x12, 0x3d, 0x0a, + 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x21, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x22, 0x54, 0x0a, 0x08, + 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x41, 0x54, 0x45, + 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, + 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x53, + 0x55, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x41, 0x54, 0x45, + 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x45, 0x4e, 0x56, 0x49, 0x52, 0x4f, 0x4e, 0x4d, 0x45, 0x4e, 0x54, + 0x10, 0x02, 0x42, 0x0d, 0x0a, 0x0b, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x74, 0x79, 0x70, + 0x65, 0x22, 0x42, 0x0a, 0x0c, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x75, 0x73, 0x74, 0x6f, + 0x6d, 0x12, 0x32, 0x0a, 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x09, 0x65, 0x78, 0x74, 0x65, + 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x66, 0x0a, 0x0b, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, + 0x68, 0x61, 0x69, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, + 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, + 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0xa8, 0x01, + 0x0a, 0x0f, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x35, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, + 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x36, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0xc0, 0x02, 0x0a, 0x10, 0x44, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, + 0x19, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x16, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x45, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x15, 0x65, 0x70, 0x68, 0x65, + 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, + 0x61, 0x6c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x06, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x47, 0x0a, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x69, 0x0a, 0x17, - 0x42, 0x75, 0x6c, 0x6b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4e, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, 0x6d, 0x0a, 0x18, 0x42, 0x75, 0x6c, 0x6b, 0x47, - 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, - 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22, 0xf7, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x45, 0x6e, - 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x34, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x35, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x48, 0x00, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x88, 0x01, 0x01, 0x12, 0x45, - 0x0a, 0x1c, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, - 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x1a, 0x77, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, - 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, - 0x68, 0x79, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x42, - 0x1f, 0x0a, 0x1d, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, - 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, - 0x22, 0xfb, 0x02, 0x0a, 0x12, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, - 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x49, 0x64, 0x12, 0x8b, 0x01, 0x0a, 0x1f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x4c, 0x0a, + 0x08, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x14, 0x44, 0x45, 0x43, + 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, + 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, + 0x44, 0x45, 0x4e, 0x59, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, + 0x4f, 0x4e, 0x5f, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x22, 0x62, 0x0a, 0x12, 0x47, + 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x4c, 0x0a, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0f, + 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, + 0x66, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x69, 0x0a, 0x17, 0x42, 0x75, 0x6c, 0x6b, 0x47, + 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x4e, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, + 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x73, 0x22, 0x6d, 0x0a, 0x18, 0x42, 0x75, 0x6c, 0x6b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, + 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x11, + 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x73, 0x22, 0xf7, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x08, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, - 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x1b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, - 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, - 0x71, 0x6e, 0x1a, 0x37, 0x0a, 0x0b, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, - 0x74, 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x80, 0x01, 0x0a, 0x20, + 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, + 0x65, 0x73, 0x12, 0x35, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, + 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x88, 0x01, 0x01, 0x12, 0x45, 0x0a, 0x1c, 0x77, 0x69, 0x74, + 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, + 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, + 0x01, 0x52, 0x1a, 0x77, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, + 0x73, 0x69, 0x76, 0x65, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x88, 0x01, 0x01, + 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x42, 0x1f, 0x0a, 0x1d, 0x5f, 0x77, + 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, + 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x22, 0xfb, 0x02, 0x0a, 0x12, + 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x12, + 0x8b, 0x01, 0x0a, 0x1f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, + 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, + 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x46, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x30, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, - 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xf3, - 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x65, - 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x57, - 0x0a, 0x10, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x73, 0x48, 0x00, 0x52, 0x0f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x38, 0x0a, 0x17, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x66, - 0x71, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x15, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x46, 0x71, - 0x6e, 0x1a, 0x25, 0x0a, 0x0f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, 0x6e, 0x73, 0x42, 0x0a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x22, 0x63, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, - 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x48, 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, - 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x0c, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xa5, 0x01, 0x0a, 0x14, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x12, 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x36, 0x0a, 0x08, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x22, 0x6e, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x51, - 0x0a, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x52, 0x0f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x22, 0x6d, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x4f, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x10, - 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x75, 0x0a, 0x1e, 0x42, 0x75, 0x6c, 0x6b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x53, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, 0x74, 0x0a, 0x1f, 0x42, 0x75, 0x6c, 0x6b, 0x47, - 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x12, 0x64, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x32, 0xc1, 0x04, - 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5c, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x75, + 0x52, 0x1b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x1a, 0x37, 0x0a, + 0x0b, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x07, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, + 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x80, 0x01, 0x0a, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x46, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xfe, 0x01, 0x0a, 0x08, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, + 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, + 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x57, 0x0a, 0x10, 0x61, 0x74, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, + 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x48, + 0x00, 0x52, 0x0f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x73, 0x12, 0x43, 0x0a, 0x1d, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, + 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, + 0x66, 0x71, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x1a, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x1a, 0x25, 0x0a, 0x0f, 0x41, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, + 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, 0x6e, 0x73, 0x42, 0x0a, + 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x63, 0x0a, 0x17, 0x47, 0x65, + 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, + 0xa5, 0x01, 0x0a, 0x14, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x36, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x6e, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x44, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x51, 0x0a, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, + 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x32, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x6d, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x44, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x75, 0x0a, 0x1e, 0x42, 0x75, 0x6c, 0x6b, 0x47, 0x65, + 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x53, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x10, 0x64, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, 0x74, 0x0a, + 0x1f, 0x42, 0x75, 0x6c, 0x6b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x51, 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x73, 0x32, 0xc1, 0x04, 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5c, 0x0a, 0x0b, + 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, - 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x6b, 0x0a, 0x10, 0x42, 0x75, 0x6c, 0x6b, 0x47, 0x65, 0x74, 0x44, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x6c, 0x6b, - 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6b, 0x0a, 0x10, 0x42, 0x75, + 0x6c, 0x6b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x29, + 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x32, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x6c, + 0x6b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x80, 0x01, 0x0a, 0x17, 0x42, 0x75, 0x6c, 0x6b, + 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x12, 0x30, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x47, 0x65, 0x74, 0x44, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x80, 0x01, 0x0a, 0x17, 0x42, 0x75, 0x6c, 0x6b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x30, 0x2e, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x31, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x71, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2b, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x47, 0x65, 0x74, + 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x71, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x45, 0x6e, - 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x28, 0x2e, 0x61, 0x75, 0x74, + 0x12, 0x2b, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, + 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, + 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, + 0x0f, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x12, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, - 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, - 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x42, 0xd5, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x42, 0x12, 0x41, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, - 0x5a, 0x48, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, - 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, 0x6f, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x3b, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x32, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, - 0xaa, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x56, 0x32, 0xca, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x1c, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, + 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xd5, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, + 0x42, 0x12, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x48, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, 0x6f, 0x2f, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, + 0x3b, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x32, + 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x1c, 0x41, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0x5c, + 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x41, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x32, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2027,12 +2028,12 @@ func file_authorization_v2_authorization_proto_init() { (*Entity_Claims)(nil), (*Entity_Custom)(nil), (*Entity_ClientId)(nil), - (*Entity_RegisteredResourceFqn)(nil), + (*Entity_RegisteredResourceValueFqn)(nil), } file_authorization_v2_authorization_proto_msgTypes[10].OneofWrappers = []interface{}{} file_authorization_v2_authorization_proto_msgTypes[12].OneofWrappers = []interface{}{ (*Resource_AttributeValues_)(nil), - (*Resource_RegisteredResourceFqn)(nil), + (*Resource_RegisteredResourceValueFqn)(nil), } type x struct{} out := protoimpl.TypeBuilder{ diff --git a/service/authorization/v2/authorization.proto b/service/authorization/v2/authorization.proto index ee90c07460..608f2288bc 100644 --- a/service/authorization/v2/authorization.proto +++ b/service/authorization/v2/authorization.proto @@ -26,7 +26,7 @@ message Entity { google.protobuf.Any claims = 6; EntityCustom custom = 7; string client_id = 8; - string registered_resource_fqn = 10; + string registered_resource_value_fqn = 10; } enum Category { CATEGORY_UNSPECIFIED = 0; @@ -119,7 +119,7 @@ message Resource { oneof resource { AttributeValues attribute_values = 2; - string registered_resource_fqn = 3; + string registered_resource_value_fqn = 3; } } From 13cf0175884d03ab505b0e2cbeb953152ae055e7 Mon Sep 17 00:00:00 2001 From: Ryan Yanulites Date: Wed, 30 Apr 2025 09:17:47 -0600 Subject: [PATCH 10/49] add entity chain comment --- docs/grpc/index.html | 3 ++- protocol/go/authorization/v2/authorization.pb.go | 1 + service/authorization/v2/authorization.proto | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/grpc/index.html b/docs/grpc/index.html index ec6f27342e..6f055ef0ee 100644 --- a/docs/grpc/index.html +++ b/docs/grpc/index.html @@ -4209,7 +4209,8 @@

      GetEntitlementsRequest

      - + diff --git a/protocol/go/authorization/v2/authorization.pb.go b/protocol/go/authorization/v2/authorization.pb.go index 22fb2473a6..37c6d79476 100644 --- a/protocol/go/authorization/v2/authorization.pb.go +++ b/protocol/go/authorization/v2/authorization.pb.go @@ -802,6 +802,7 @@ type GetEntitlementsRequest struct { unknownFields protoimpl.UnknownFields // list of requested entities + // todo: should this be an entity chain? Entities []*Entity `protobuf:"bytes,1,rep,name=entities,proto3" json:"entities,omitempty"` // optional resource as a scope Scope *Resource `protobuf:"bytes,2,opt,name=scope,proto3,oneof" json:"scope,omitempty"` diff --git a/service/authorization/v2/authorization.proto b/service/authorization/v2/authorization.proto index 608f2288bc..ac727bb33e 100644 --- a/service/authorization/v2/authorization.proto +++ b/service/authorization/v2/authorization.proto @@ -91,6 +91,7 @@ message BulkGetDecisionsResponse { message GetEntitlementsRequest { // list of requested entities + // todo: should this be an entity chain? repeated Entity entities = 1; // optional resource as a scope optional Resource scope = 2; From 7e9e22bf74a67547ae78b9d5f0530c253e0762a4 Mon Sep 17 00:00:00 2001 From: Ryan Yanulites Date: Wed, 30 Apr 2025 12:01:47 -0600 Subject: [PATCH 11/49] rename bulk methods to use same prefix --- docs/grpc/index.html | 234 ++++----- .../v2/authorization.swagger.json | 4 +- .../go/authorization/v2/authorization.pb.go | 471 +++++++++--------- .../authorization/v2/authorization_grpc.pb.go | 88 ++-- .../authorization.connect.go | 116 ++--- service/authorization/v2/authorization.proto | 12 +- 6 files changed, 462 insertions(+), 463 deletions(-) diff --git a/docs/grpc/index.html b/docs/grpc/index.html index 6f055ef0ee..b7aca4d923 100644 --- a/docs/grpc/index.html +++ b/docs/grpc/index.html @@ -408,51 +408,51 @@

      Table of Contents

      registered_resource_fqnregistered_resource_value_fqn string

      registered_resource_fqnregistered_resource_value_fqn string

      entities Entity repeated

      list of requested entities

      list of requested entities +todo: should this be an entity chain?

      - - - - - - - - - - - - - -
      FieldTypeLabelDescription
      decision_requestsTokenDecisionRequestrepeated

      - - - - - -

      BulkGetDecisionsByTokenResponse

      -

      - - - - - - - - - - - - - - - - -
      FieldTypeLabelDescription
      decision_responsesDecisionResponserepeated

      - - - - - -

      BulkGetDecisionsRequest

      -

      More performant bulk request for multiple decisions

      - - - - - - - - - - - - - - - - -
      FieldTypeLabelDescription
      decision_requestsDecisionRequestrepeated

      - - - - - -

      BulkGetDecisionsResponse

      -

      - - - - - - - - - - - - - - - - -
      FieldTypeLabelDescription
      decision_responsesDecisionResponserepeated

      - - - - -

      DecisionRequest

      Can the entity (PE or NPE) represented by each entity chain take the provided action on the set of resources

      @@ -4099,6 +4003,102 @@

      En +

      GetDecisionBulkByTokenRequest

      +

      More performant bulk request for multiple decisions

      + + + + + + + + + + + + + + + + +
      FieldTypeLabelDescription
      decision_requestsTokenDecisionRequestrepeated

      + + + + + +

      GetDecisionBulkByTokenResponse

      +

      + + + + + + + + + + + + + + + + +
      FieldTypeLabelDescription
      decision_responsesDecisionResponserepeated

      + + + + + +

      GetDecisionBulkRequest

      +

      More performant bulk request for multiple decisions

      + + + + + + + + + + + + + + + + +
      FieldTypeLabelDescription
      decision_requestsDecisionRequestrepeated

      + + + + + +

      GetDecisionBulkResponse

      +

      + + + + + + + + + + + + + + + + +
      FieldTypeLabelDescription
      decision_responsesDecisionResponserepeated

      + + + + +

      GetDecisionByTokenRequest

      @@ -4469,23 +4469,23 @@

      AuthorizationService

      - BulkGetDecisions - BulkGetDecisionsRequest - BulkGetDecisionsResponse + GetDecisionBulk + GetDecisionBulkRequest + GetDecisionBulkResponse

      - BulkGetDecisionsByToken - BulkGetDecisionsByTokenRequest - BulkGetDecisionsByTokenResponse + GetDecisionByToken + GetDecisionByTokenRequest + GetDecisionByTokenResponse

      - GetDecisionByToken - GetDecisionByTokenRequest - GetDecisionByTokenResponse + GetDecisionBulkByToken + GetDecisionBulkByTokenRequest + GetDecisionBulkByTokenResponse

      diff --git a/docs/openapi/authorization/v2/authorization.swagger.json b/docs/openapi/authorization/v2/authorization.swagger.json index c46b2b6833..7257904fbf 100644 --- a/docs/openapi/authorization/v2/authorization.swagger.json +++ b/docs/openapi/authorization/v2/authorization.swagger.json @@ -302,7 +302,7 @@ } } }, - "v2BulkGetDecisionsByTokenResponse": { + "v2GetDecisionBulkByTokenResponse": { "type": "object", "properties": { "decisionResponses": { @@ -314,7 +314,7 @@ } } }, - "v2BulkGetDecisionsResponse": { + "v2GetDecisionBulkResponse": { "type": "object", "properties": { "decisionResponses": { diff --git a/protocol/go/authorization/v2/authorization.pb.go b/protocol/go/authorization/v2/authorization.pb.go index 37c6d79476..da42261312 100644 --- a/protocol/go/authorization/v2/authorization.pb.go +++ b/protocol/go/authorization/v2/authorization.pb.go @@ -702,7 +702,7 @@ func (x *GetDecisionResponse) GetDecisionResponse() *DecisionResponse { } // More performant bulk request for multiple decisions -type BulkGetDecisionsRequest struct { +type GetDecisionBulkRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -710,8 +710,8 @@ type BulkGetDecisionsRequest struct { DecisionRequests []*DecisionRequest `protobuf:"bytes,1,rep,name=decision_requests,json=decisionRequests,proto3" json:"decision_requests,omitempty"` } -func (x *BulkGetDecisionsRequest) Reset() { - *x = BulkGetDecisionsRequest{} +func (x *GetDecisionBulkRequest) Reset() { + *x = GetDecisionBulkRequest{} if protoimpl.UnsafeEnabled { mi := &file_authorization_v2_authorization_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -719,13 +719,13 @@ func (x *BulkGetDecisionsRequest) Reset() { } } -func (x *BulkGetDecisionsRequest) String() string { +func (x *GetDecisionBulkRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BulkGetDecisionsRequest) ProtoMessage() {} +func (*GetDecisionBulkRequest) ProtoMessage() {} -func (x *BulkGetDecisionsRequest) ProtoReflect() protoreflect.Message { +func (x *GetDecisionBulkRequest) ProtoReflect() protoreflect.Message { mi := &file_authorization_v2_authorization_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -737,19 +737,19 @@ func (x *BulkGetDecisionsRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use BulkGetDecisionsRequest.ProtoReflect.Descriptor instead. -func (*BulkGetDecisionsRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use GetDecisionBulkRequest.ProtoReflect.Descriptor instead. +func (*GetDecisionBulkRequest) Descriptor() ([]byte, []int) { return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{8} } -func (x *BulkGetDecisionsRequest) GetDecisionRequests() []*DecisionRequest { +func (x *GetDecisionBulkRequest) GetDecisionRequests() []*DecisionRequest { if x != nil { return x.DecisionRequests } return nil } -type BulkGetDecisionsResponse struct { +type GetDecisionBulkResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -757,8 +757,8 @@ type BulkGetDecisionsResponse struct { DecisionResponses []*DecisionResponse `protobuf:"bytes,1,rep,name=decision_responses,json=decisionResponses,proto3" json:"decision_responses,omitempty"` } -func (x *BulkGetDecisionsResponse) Reset() { - *x = BulkGetDecisionsResponse{} +func (x *GetDecisionBulkResponse) Reset() { + *x = GetDecisionBulkResponse{} if protoimpl.UnsafeEnabled { mi := &file_authorization_v2_authorization_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -766,13 +766,13 @@ func (x *BulkGetDecisionsResponse) Reset() { } } -func (x *BulkGetDecisionsResponse) String() string { +func (x *GetDecisionBulkResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BulkGetDecisionsResponse) ProtoMessage() {} +func (*GetDecisionBulkResponse) ProtoMessage() {} -func (x *BulkGetDecisionsResponse) ProtoReflect() protoreflect.Message { +func (x *GetDecisionBulkResponse) ProtoReflect() protoreflect.Message { mi := &file_authorization_v2_authorization_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -784,12 +784,12 @@ func (x *BulkGetDecisionsResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use BulkGetDecisionsResponse.ProtoReflect.Descriptor instead. -func (*BulkGetDecisionsResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use GetDecisionBulkResponse.ProtoReflect.Descriptor instead. +func (*GetDecisionBulkResponse) Descriptor() ([]byte, []int) { return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{9} } -func (x *BulkGetDecisionsResponse) GetDecisionResponses() []*DecisionResponse { +func (x *GetDecisionBulkResponse) GetDecisionResponses() []*DecisionResponse { if x != nil { return x.DecisionResponses } @@ -1216,7 +1216,7 @@ func (x *GetDecisionByTokenResponse) GetDecisionResponse() *DecisionResponse { } // More performant bulk request for multiple decisions -type BulkGetDecisionsByTokenRequest struct { +type GetDecisionBulkByTokenRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -1224,8 +1224,8 @@ type BulkGetDecisionsByTokenRequest struct { DecisionRequests []*TokenDecisionRequest `protobuf:"bytes,1,rep,name=decision_requests,json=decisionRequests,proto3" json:"decision_requests,omitempty"` } -func (x *BulkGetDecisionsByTokenRequest) Reset() { - *x = BulkGetDecisionsByTokenRequest{} +func (x *GetDecisionBulkByTokenRequest) Reset() { + *x = GetDecisionBulkByTokenRequest{} if protoimpl.UnsafeEnabled { mi := &file_authorization_v2_authorization_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1233,13 +1233,13 @@ func (x *BulkGetDecisionsByTokenRequest) Reset() { } } -func (x *BulkGetDecisionsByTokenRequest) String() string { +func (x *GetDecisionBulkByTokenRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BulkGetDecisionsByTokenRequest) ProtoMessage() {} +func (*GetDecisionBulkByTokenRequest) ProtoMessage() {} -func (x *BulkGetDecisionsByTokenRequest) ProtoReflect() protoreflect.Message { +func (x *GetDecisionBulkByTokenRequest) ProtoReflect() protoreflect.Message { mi := &file_authorization_v2_authorization_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1251,19 +1251,19 @@ func (x *BulkGetDecisionsByTokenRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use BulkGetDecisionsByTokenRequest.ProtoReflect.Descriptor instead. -func (*BulkGetDecisionsByTokenRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use GetDecisionBulkByTokenRequest.ProtoReflect.Descriptor instead. +func (*GetDecisionBulkByTokenRequest) Descriptor() ([]byte, []int) { return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{17} } -func (x *BulkGetDecisionsByTokenRequest) GetDecisionRequests() []*TokenDecisionRequest { +func (x *GetDecisionBulkByTokenRequest) GetDecisionRequests() []*TokenDecisionRequest { if x != nil { return x.DecisionRequests } return nil } -type BulkGetDecisionsByTokenResponse struct { +type GetDecisionBulkByTokenResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -1271,8 +1271,8 @@ type BulkGetDecisionsByTokenResponse struct { DecisionResponses []*DecisionResponse `protobuf:"bytes,1,rep,name=decision_responses,json=decisionResponses,proto3" json:"decision_responses,omitempty"` } -func (x *BulkGetDecisionsByTokenResponse) Reset() { - *x = BulkGetDecisionsByTokenResponse{} +func (x *GetDecisionBulkByTokenResponse) Reset() { + *x = GetDecisionBulkByTokenResponse{} if protoimpl.UnsafeEnabled { mi := &file_authorization_v2_authorization_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1280,13 +1280,13 @@ func (x *BulkGetDecisionsByTokenResponse) Reset() { } } -func (x *BulkGetDecisionsByTokenResponse) String() string { +func (x *GetDecisionBulkByTokenResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BulkGetDecisionsByTokenResponse) ProtoMessage() {} +func (*GetDecisionBulkByTokenResponse) ProtoMessage() {} -func (x *BulkGetDecisionsByTokenResponse) ProtoReflect() protoreflect.Message { +func (x *GetDecisionBulkByTokenResponse) ProtoReflect() protoreflect.Message { mi := &file_authorization_v2_authorization_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1298,12 +1298,12 @@ func (x *BulkGetDecisionsByTokenResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use BulkGetDecisionsByTokenResponse.ProtoReflect.Descriptor instead. -func (*BulkGetDecisionsByTokenResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use GetDecisionBulkByTokenResponse.ProtoReflect.Descriptor instead. +func (*GetDecisionBulkByTokenResponse) Descriptor() ([]byte, []int) { return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{18} } -func (x *BulkGetDecisionsByTokenResponse) GetDecisionResponses() []*DecisionResponse { +func (x *GetDecisionBulkByTokenResponse) GetDecisionResponses() []*DecisionResponse { if x != nil { return x.DecisionResponses } @@ -1506,172 +1506,171 @@ var file_authorization_v2_authorization_proto_rawDesc = []byte{ 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x69, 0x0a, 0x17, 0x42, 0x75, 0x6c, 0x6b, 0x47, - 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x4e, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x73, 0x22, 0x6d, 0x0a, 0x18, 0x42, 0x75, 0x6c, 0x6b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, - 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x11, - 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x73, 0x22, 0xf7, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x08, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, - 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, - 0x65, 0x73, 0x12, 0x35, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, - 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x88, 0x01, 0x01, 0x12, 0x45, 0x0a, 0x1c, 0x77, 0x69, 0x74, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x68, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x44, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x4e, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, + 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x73, 0x22, 0x6c, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x12, + 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x11, 0x64, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22, + 0xf7, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x08, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, + 0x12, 0x35, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x05, 0x73, + 0x63, 0x6f, 0x70, 0x65, 0x88, 0x01, 0x01, 0x12, 0x45, 0x0a, 0x1c, 0x77, 0x69, 0x74, 0x68, 0x5f, + 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, + 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, + 0x1a, 0x77, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, + 0x76, 0x65, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x88, 0x01, 0x01, 0x42, 0x08, + 0x0a, 0x06, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x42, 0x1f, 0x0a, 0x1d, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, - 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, - 0x01, 0x52, 0x1a, 0x77, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, - 0x73, 0x69, 0x76, 0x65, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x88, 0x01, 0x01, - 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x42, 0x1f, 0x0a, 0x1d, 0x5f, 0x77, - 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, - 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x22, 0xfb, 0x02, 0x0a, 0x12, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x12, - 0x8b, 0x01, 0x0a, 0x1f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, - 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, - 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x22, 0xfb, 0x02, 0x0a, 0x12, 0x45, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x12, 0x8b, 0x01, + 0x0a, 0x1f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x61, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, + 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x1b, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x1a, 0x37, 0x0a, 0x0b, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x80, 0x01, 0x0a, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x46, 0x71, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x46, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xfe, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, + 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, + 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x57, 0x0a, 0x10, 0x61, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x41, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x48, 0x00, 0x52, + 0x0f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, + 0x12, 0x43, 0x0a, 0x1d, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, + 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x1a, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x46, 0x71, 0x6e, 0x1a, 0x25, 0x0a, 0x0f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x6e, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, 0x6e, 0x73, 0x42, 0x0a, 0x0a, 0x08, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x63, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x45, + 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x1b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, - 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x1a, 0x37, 0x0a, - 0x0b, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x07, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, - 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x80, 0x01, 0x0a, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x46, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x61, + 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, + 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xa5, 0x01, + 0x0a, 0x14, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x05, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x36, 0x0a, + 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x6e, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x51, 0x0a, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xfe, 0x01, 0x0a, 0x08, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, - 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, - 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x57, 0x0a, 0x10, 0x61, 0x74, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, - 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x48, - 0x00, 0x52, 0x0f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x73, 0x12, 0x43, 0x0a, 0x1d, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, - 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, - 0x66, 0x71, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x1a, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x1a, 0x25, 0x0a, 0x0f, 0x41, 0x74, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, - 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, 0x6e, 0x73, 0x42, 0x0a, - 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x63, 0x0a, 0x17, 0x47, 0x65, - 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, - 0xa5, 0x01, 0x0a, 0x14, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x36, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x6e, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x44, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x51, 0x0a, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x52, 0x0f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x6d, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, + 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x6d, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x44, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x75, 0x0a, 0x1e, 0x42, 0x75, 0x6c, 0x6b, 0x47, 0x65, - 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x53, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x10, 0x64, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, 0x74, 0x0a, - 0x1f, 0x42, 0x75, 0x6c, 0x6b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x51, 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, - 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x73, 0x32, 0xc1, 0x04, 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5c, 0x0a, 0x0b, - 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, - 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6b, 0x0a, 0x10, 0x42, 0x75, - 0x6c, 0x6b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x29, - 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x6c, - 0x6b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x80, 0x01, 0x0a, 0x17, 0x42, 0x75, 0x6c, 0x6b, - 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x12, 0x30, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x47, 0x65, 0x74, 0x44, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x47, 0x65, 0x74, - 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x71, 0x0a, 0x12, 0x47, 0x65, - 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x12, 0x2b, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, - 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, + 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x74, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x53, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x26, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, 0x73, 0x0a, 0x1e, 0x47, 0x65, + 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x42, 0x79, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x12, + 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x11, 0x64, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x32, + 0xba, 0x04, 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5c, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x44, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, - 0x0f, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x12, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, - 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xd5, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, + 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x12, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, + 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x71, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, + 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2b, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x7d, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2f, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x42, 0x12, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x48, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, 0x6f, 0x2f, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, - 0x3b, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x32, - 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x1c, 0x41, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0x5c, - 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x41, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x32, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, + 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, + 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, + 0x6b, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x68, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, + 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xd5, 0x01, 0x0a, + 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x42, 0x12, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x48, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2f, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x6c, 0x2f, 0x67, 0x6f, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x3b, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x76, 0x32, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x10, 0x41, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x32, 0xca, 0x02, + 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, + 0x32, 0xe2, 0x02, 0x1c, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5c, 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0xea, 0x02, 0x11, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1689,32 +1688,32 @@ func file_authorization_v2_authorization_proto_rawDescGZIP() []byte { var file_authorization_v2_authorization_proto_enumTypes = make([]protoimpl.EnumInfo, 2) var file_authorization_v2_authorization_proto_msgTypes = make([]protoimpl.MessageInfo, 22) var file_authorization_v2_authorization_proto_goTypes = []interface{}{ - (Entity_Category)(0), // 0: authorization.v2.Entity.Category - (DecisionResponse_Decision)(0), // 1: authorization.v2.DecisionResponse.Decision - (*Token)(nil), // 2: authorization.v2.Token - (*Entity)(nil), // 3: authorization.v2.Entity - (*EntityCustom)(nil), // 4: authorization.v2.EntityCustom - (*EntityChain)(nil), // 5: authorization.v2.EntityChain - (*DecisionRequest)(nil), // 6: authorization.v2.DecisionRequest - (*DecisionResponse)(nil), // 7: authorization.v2.DecisionResponse - (*GetDecisionRequest)(nil), // 8: authorization.v2.GetDecisionRequest - (*GetDecisionResponse)(nil), // 9: authorization.v2.GetDecisionResponse - (*BulkGetDecisionsRequest)(nil), // 10: authorization.v2.BulkGetDecisionsRequest - (*BulkGetDecisionsResponse)(nil), // 11: authorization.v2.BulkGetDecisionsResponse - (*GetEntitlementsRequest)(nil), // 12: authorization.v2.GetEntitlementsRequest - (*EntityEntitlements)(nil), // 13: authorization.v2.EntityEntitlements - (*Resource)(nil), // 14: authorization.v2.Resource - (*GetEntitlementsResponse)(nil), // 15: authorization.v2.GetEntitlementsResponse - (*TokenDecisionRequest)(nil), // 16: authorization.v2.TokenDecisionRequest - (*GetDecisionByTokenRequest)(nil), // 17: authorization.v2.GetDecisionByTokenRequest - (*GetDecisionByTokenResponse)(nil), // 18: authorization.v2.GetDecisionByTokenResponse - (*BulkGetDecisionsByTokenRequest)(nil), // 19: authorization.v2.BulkGetDecisionsByTokenRequest - (*BulkGetDecisionsByTokenResponse)(nil), // 20: authorization.v2.BulkGetDecisionsByTokenResponse - (*EntityEntitlements_ActionsList)(nil), // 21: authorization.v2.EntityEntitlements.ActionsList - nil, // 22: authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry - (*Resource_AttributeValues)(nil), // 23: authorization.v2.Resource.AttributeValues - (*anypb.Any)(nil), // 24: google.protobuf.Any - (*policy.Action)(nil), // 25: policy.Action + (Entity_Category)(0), // 0: authorization.v2.Entity.Category + (DecisionResponse_Decision)(0), // 1: authorization.v2.DecisionResponse.Decision + (*Token)(nil), // 2: authorization.v2.Token + (*Entity)(nil), // 3: authorization.v2.Entity + (*EntityCustom)(nil), // 4: authorization.v2.EntityCustom + (*EntityChain)(nil), // 5: authorization.v2.EntityChain + (*DecisionRequest)(nil), // 6: authorization.v2.DecisionRequest + (*DecisionResponse)(nil), // 7: authorization.v2.DecisionResponse + (*GetDecisionRequest)(nil), // 8: authorization.v2.GetDecisionRequest + (*GetDecisionResponse)(nil), // 9: authorization.v2.GetDecisionResponse + (*GetDecisionBulkRequest)(nil), // 10: authorization.v2.GetDecisionBulkRequest + (*GetDecisionBulkResponse)(nil), // 11: authorization.v2.GetDecisionBulkResponse + (*GetEntitlementsRequest)(nil), // 12: authorization.v2.GetEntitlementsRequest + (*EntityEntitlements)(nil), // 13: authorization.v2.EntityEntitlements + (*Resource)(nil), // 14: authorization.v2.Resource + (*GetEntitlementsResponse)(nil), // 15: authorization.v2.GetEntitlementsResponse + (*TokenDecisionRequest)(nil), // 16: authorization.v2.TokenDecisionRequest + (*GetDecisionByTokenRequest)(nil), // 17: authorization.v2.GetDecisionByTokenRequest + (*GetDecisionByTokenResponse)(nil), // 18: authorization.v2.GetDecisionByTokenResponse + (*GetDecisionBulkByTokenRequest)(nil), // 19: authorization.v2.GetDecisionBulkByTokenRequest + (*GetDecisionBulkByTokenResponse)(nil), // 20: authorization.v2.GetDecisionBulkByTokenResponse + (*EntityEntitlements_ActionsList)(nil), // 21: authorization.v2.EntityEntitlements.ActionsList + nil, // 22: authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry + (*Resource_AttributeValues)(nil), // 23: authorization.v2.Resource.AttributeValues + (*anypb.Any)(nil), // 24: google.protobuf.Any + (*policy.Action)(nil), // 25: policy.Action } var file_authorization_v2_authorization_proto_depIdxs = []int32{ 24, // 0: authorization.v2.Entity.claims:type_name -> google.protobuf.Any @@ -1729,8 +1728,8 @@ var file_authorization_v2_authorization_proto_depIdxs = []int32{ 1, // 9: authorization.v2.DecisionResponse.decision:type_name -> authorization.v2.DecisionResponse.Decision 6, // 10: authorization.v2.GetDecisionRequest.decision_request:type_name -> authorization.v2.DecisionRequest 7, // 11: authorization.v2.GetDecisionResponse.decision_response:type_name -> authorization.v2.DecisionResponse - 6, // 12: authorization.v2.BulkGetDecisionsRequest.decision_requests:type_name -> authorization.v2.DecisionRequest - 7, // 13: authorization.v2.BulkGetDecisionsResponse.decision_responses:type_name -> authorization.v2.DecisionResponse + 6, // 12: authorization.v2.GetDecisionBulkRequest.decision_requests:type_name -> authorization.v2.DecisionRequest + 7, // 13: authorization.v2.GetDecisionBulkResponse.decision_responses:type_name -> authorization.v2.DecisionResponse 3, // 14: authorization.v2.GetEntitlementsRequest.entities:type_name -> authorization.v2.Entity 14, // 15: authorization.v2.GetEntitlementsRequest.scope:type_name -> authorization.v2.Resource 22, // 16: authorization.v2.EntityEntitlements.actions_per_attribute_value_fqn:type_name -> authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry @@ -1741,19 +1740,19 @@ var file_authorization_v2_authorization_proto_depIdxs = []int32{ 14, // 21: authorization.v2.TokenDecisionRequest.resource:type_name -> authorization.v2.Resource 16, // 22: authorization.v2.GetDecisionByTokenRequest.decision_request:type_name -> authorization.v2.TokenDecisionRequest 7, // 23: authorization.v2.GetDecisionByTokenResponse.decision_response:type_name -> authorization.v2.DecisionResponse - 16, // 24: authorization.v2.BulkGetDecisionsByTokenRequest.decision_requests:type_name -> authorization.v2.TokenDecisionRequest - 7, // 25: authorization.v2.BulkGetDecisionsByTokenResponse.decision_responses:type_name -> authorization.v2.DecisionResponse + 16, // 24: authorization.v2.GetDecisionBulkByTokenRequest.decision_requests:type_name -> authorization.v2.TokenDecisionRequest + 7, // 25: authorization.v2.GetDecisionBulkByTokenResponse.decision_responses:type_name -> authorization.v2.DecisionResponse 25, // 26: authorization.v2.EntityEntitlements.ActionsList.actions:type_name -> policy.Action 21, // 27: authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry.value:type_name -> authorization.v2.EntityEntitlements.ActionsList 8, // 28: authorization.v2.AuthorizationService.GetDecision:input_type -> authorization.v2.GetDecisionRequest - 10, // 29: authorization.v2.AuthorizationService.BulkGetDecisions:input_type -> authorization.v2.BulkGetDecisionsRequest - 19, // 30: authorization.v2.AuthorizationService.BulkGetDecisionsByToken:input_type -> authorization.v2.BulkGetDecisionsByTokenRequest - 17, // 31: authorization.v2.AuthorizationService.GetDecisionByToken:input_type -> authorization.v2.GetDecisionByTokenRequest + 10, // 29: authorization.v2.AuthorizationService.GetDecisionBulk:input_type -> authorization.v2.GetDecisionBulkRequest + 17, // 30: authorization.v2.AuthorizationService.GetDecisionByToken:input_type -> authorization.v2.GetDecisionByTokenRequest + 19, // 31: authorization.v2.AuthorizationService.GetDecisionBulkByToken:input_type -> authorization.v2.GetDecisionBulkByTokenRequest 12, // 32: authorization.v2.AuthorizationService.GetEntitlements:input_type -> authorization.v2.GetEntitlementsRequest 9, // 33: authorization.v2.AuthorizationService.GetDecision:output_type -> authorization.v2.GetDecisionResponse - 11, // 34: authorization.v2.AuthorizationService.BulkGetDecisions:output_type -> authorization.v2.BulkGetDecisionsResponse - 20, // 35: authorization.v2.AuthorizationService.BulkGetDecisionsByToken:output_type -> authorization.v2.BulkGetDecisionsByTokenResponse - 18, // 36: authorization.v2.AuthorizationService.GetDecisionByToken:output_type -> authorization.v2.GetDecisionByTokenResponse + 11, // 34: authorization.v2.AuthorizationService.GetDecisionBulk:output_type -> authorization.v2.GetDecisionBulkResponse + 18, // 35: authorization.v2.AuthorizationService.GetDecisionByToken:output_type -> authorization.v2.GetDecisionByTokenResponse + 20, // 36: authorization.v2.AuthorizationService.GetDecisionBulkByToken:output_type -> authorization.v2.GetDecisionBulkByTokenResponse 15, // 37: authorization.v2.AuthorizationService.GetEntitlements:output_type -> authorization.v2.GetEntitlementsResponse 33, // [33:38] is the sub-list for method output_type 28, // [28:33] is the sub-list for method input_type @@ -1865,7 +1864,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BulkGetDecisionsRequest); i { + switch v := v.(*GetDecisionBulkRequest); i { case 0: return &v.state case 1: @@ -1877,7 +1876,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BulkGetDecisionsResponse); i { + switch v := v.(*GetDecisionBulkResponse); i { case 0: return &v.state case 1: @@ -1973,7 +1972,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BulkGetDecisionsByTokenRequest); i { + switch v := v.(*GetDecisionBulkByTokenRequest); i { case 0: return &v.state case 1: @@ -1985,7 +1984,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BulkGetDecisionsByTokenResponse); i { + switch v := v.(*GetDecisionBulkByTokenResponse); i { case 0: return &v.state case 1: diff --git a/protocol/go/authorization/v2/authorization_grpc.pb.go b/protocol/go/authorization/v2/authorization_grpc.pb.go index 0823c02502..57b6b34457 100644 --- a/protocol/go/authorization/v2/authorization_grpc.pb.go +++ b/protocol/go/authorization/v2/authorization_grpc.pb.go @@ -19,11 +19,11 @@ import ( const _ = grpc.SupportPackageIsVersion7 const ( - AuthorizationService_GetDecision_FullMethodName = "/authorization.v2.AuthorizationService/GetDecision" - AuthorizationService_BulkGetDecisions_FullMethodName = "/authorization.v2.AuthorizationService/BulkGetDecisions" - AuthorizationService_BulkGetDecisionsByToken_FullMethodName = "/authorization.v2.AuthorizationService/BulkGetDecisionsByToken" - AuthorizationService_GetDecisionByToken_FullMethodName = "/authorization.v2.AuthorizationService/GetDecisionByToken" - AuthorizationService_GetEntitlements_FullMethodName = "/authorization.v2.AuthorizationService/GetEntitlements" + AuthorizationService_GetDecision_FullMethodName = "/authorization.v2.AuthorizationService/GetDecision" + AuthorizationService_GetDecisionBulk_FullMethodName = "/authorization.v2.AuthorizationService/GetDecisionBulk" + AuthorizationService_GetDecisionByToken_FullMethodName = "/authorization.v2.AuthorizationService/GetDecisionByToken" + AuthorizationService_GetDecisionBulkByToken_FullMethodName = "/authorization.v2.AuthorizationService/GetDecisionBulkByToken" + AuthorizationService_GetEntitlements_FullMethodName = "/authorization.v2.AuthorizationService/GetEntitlements" ) // AuthorizationServiceClient is the client API for AuthorizationService service. @@ -31,9 +31,9 @@ const ( // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. type AuthorizationServiceClient interface { GetDecision(ctx context.Context, in *GetDecisionRequest, opts ...grpc.CallOption) (*GetDecisionResponse, error) - BulkGetDecisions(ctx context.Context, in *BulkGetDecisionsRequest, opts ...grpc.CallOption) (*BulkGetDecisionsResponse, error) - BulkGetDecisionsByToken(ctx context.Context, in *BulkGetDecisionsByTokenRequest, opts ...grpc.CallOption) (*BulkGetDecisionsByTokenResponse, error) + GetDecisionBulk(ctx context.Context, in *GetDecisionBulkRequest, opts ...grpc.CallOption) (*GetDecisionBulkResponse, error) GetDecisionByToken(ctx context.Context, in *GetDecisionByTokenRequest, opts ...grpc.CallOption) (*GetDecisionByTokenResponse, error) + GetDecisionBulkByToken(ctx context.Context, in *GetDecisionBulkByTokenRequest, opts ...grpc.CallOption) (*GetDecisionBulkByTokenResponse, error) GetEntitlements(ctx context.Context, in *GetEntitlementsRequest, opts ...grpc.CallOption) (*GetEntitlementsResponse, error) } @@ -54,27 +54,27 @@ func (c *authorizationServiceClient) GetDecision(ctx context.Context, in *GetDec return out, nil } -func (c *authorizationServiceClient) BulkGetDecisions(ctx context.Context, in *BulkGetDecisionsRequest, opts ...grpc.CallOption) (*BulkGetDecisionsResponse, error) { - out := new(BulkGetDecisionsResponse) - err := c.cc.Invoke(ctx, AuthorizationService_BulkGetDecisions_FullMethodName, in, out, opts...) +func (c *authorizationServiceClient) GetDecisionBulk(ctx context.Context, in *GetDecisionBulkRequest, opts ...grpc.CallOption) (*GetDecisionBulkResponse, error) { + out := new(GetDecisionBulkResponse) + err := c.cc.Invoke(ctx, AuthorizationService_GetDecisionBulk_FullMethodName, in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *authorizationServiceClient) BulkGetDecisionsByToken(ctx context.Context, in *BulkGetDecisionsByTokenRequest, opts ...grpc.CallOption) (*BulkGetDecisionsByTokenResponse, error) { - out := new(BulkGetDecisionsByTokenResponse) - err := c.cc.Invoke(ctx, AuthorizationService_BulkGetDecisionsByToken_FullMethodName, in, out, opts...) +func (c *authorizationServiceClient) GetDecisionByToken(ctx context.Context, in *GetDecisionByTokenRequest, opts ...grpc.CallOption) (*GetDecisionByTokenResponse, error) { + out := new(GetDecisionByTokenResponse) + err := c.cc.Invoke(ctx, AuthorizationService_GetDecisionByToken_FullMethodName, in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *authorizationServiceClient) GetDecisionByToken(ctx context.Context, in *GetDecisionByTokenRequest, opts ...grpc.CallOption) (*GetDecisionByTokenResponse, error) { - out := new(GetDecisionByTokenResponse) - err := c.cc.Invoke(ctx, AuthorizationService_GetDecisionByToken_FullMethodName, in, out, opts...) +func (c *authorizationServiceClient) GetDecisionBulkByToken(ctx context.Context, in *GetDecisionBulkByTokenRequest, opts ...grpc.CallOption) (*GetDecisionBulkByTokenResponse, error) { + out := new(GetDecisionBulkByTokenResponse) + err := c.cc.Invoke(ctx, AuthorizationService_GetDecisionBulkByToken_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -95,9 +95,9 @@ func (c *authorizationServiceClient) GetEntitlements(ctx context.Context, in *Ge // for forward compatibility type AuthorizationServiceServer interface { GetDecision(context.Context, *GetDecisionRequest) (*GetDecisionResponse, error) - BulkGetDecisions(context.Context, *BulkGetDecisionsRequest) (*BulkGetDecisionsResponse, error) - BulkGetDecisionsByToken(context.Context, *BulkGetDecisionsByTokenRequest) (*BulkGetDecisionsByTokenResponse, error) + GetDecisionBulk(context.Context, *GetDecisionBulkRequest) (*GetDecisionBulkResponse, error) GetDecisionByToken(context.Context, *GetDecisionByTokenRequest) (*GetDecisionByTokenResponse, error) + GetDecisionBulkByToken(context.Context, *GetDecisionBulkByTokenRequest) (*GetDecisionBulkByTokenResponse, error) GetEntitlements(context.Context, *GetEntitlementsRequest) (*GetEntitlementsResponse, error) mustEmbedUnimplementedAuthorizationServiceServer() } @@ -109,15 +109,15 @@ type UnimplementedAuthorizationServiceServer struct { func (UnimplementedAuthorizationServiceServer) GetDecision(context.Context, *GetDecisionRequest) (*GetDecisionResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetDecision not implemented") } -func (UnimplementedAuthorizationServiceServer) BulkGetDecisions(context.Context, *BulkGetDecisionsRequest) (*BulkGetDecisionsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method BulkGetDecisions not implemented") -} -func (UnimplementedAuthorizationServiceServer) BulkGetDecisionsByToken(context.Context, *BulkGetDecisionsByTokenRequest) (*BulkGetDecisionsByTokenResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method BulkGetDecisionsByToken not implemented") +func (UnimplementedAuthorizationServiceServer) GetDecisionBulk(context.Context, *GetDecisionBulkRequest) (*GetDecisionBulkResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetDecisionBulk not implemented") } func (UnimplementedAuthorizationServiceServer) GetDecisionByToken(context.Context, *GetDecisionByTokenRequest) (*GetDecisionByTokenResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetDecisionByToken not implemented") } +func (UnimplementedAuthorizationServiceServer) GetDecisionBulkByToken(context.Context, *GetDecisionBulkByTokenRequest) (*GetDecisionBulkByTokenResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetDecisionBulkByToken not implemented") +} func (UnimplementedAuthorizationServiceServer) GetEntitlements(context.Context, *GetEntitlementsRequest) (*GetEntitlementsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetEntitlements not implemented") } @@ -152,56 +152,56 @@ func _AuthorizationService_GetDecision_Handler(srv interface{}, ctx context.Cont return interceptor(ctx, in, info, handler) } -func _AuthorizationService_BulkGetDecisions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(BulkGetDecisionsRequest) +func _AuthorizationService_GetDecisionBulk_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetDecisionBulkRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(AuthorizationServiceServer).BulkGetDecisions(ctx, in) + return srv.(AuthorizationServiceServer).GetDecisionBulk(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: AuthorizationService_BulkGetDecisions_FullMethodName, + FullMethod: AuthorizationService_GetDecisionBulk_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizationServiceServer).BulkGetDecisions(ctx, req.(*BulkGetDecisionsRequest)) + return srv.(AuthorizationServiceServer).GetDecisionBulk(ctx, req.(*GetDecisionBulkRequest)) } return interceptor(ctx, in, info, handler) } -func _AuthorizationService_BulkGetDecisionsByToken_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(BulkGetDecisionsByTokenRequest) +func _AuthorizationService_GetDecisionByToken_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetDecisionByTokenRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(AuthorizationServiceServer).BulkGetDecisionsByToken(ctx, in) + return srv.(AuthorizationServiceServer).GetDecisionByToken(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: AuthorizationService_BulkGetDecisionsByToken_FullMethodName, + FullMethod: AuthorizationService_GetDecisionByToken_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizationServiceServer).BulkGetDecisionsByToken(ctx, req.(*BulkGetDecisionsByTokenRequest)) + return srv.(AuthorizationServiceServer).GetDecisionByToken(ctx, req.(*GetDecisionByTokenRequest)) } return interceptor(ctx, in, info, handler) } -func _AuthorizationService_GetDecisionByToken_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetDecisionByTokenRequest) +func _AuthorizationService_GetDecisionBulkByToken_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetDecisionBulkByTokenRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(AuthorizationServiceServer).GetDecisionByToken(ctx, in) + return srv.(AuthorizationServiceServer).GetDecisionBulkByToken(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: AuthorizationService_GetDecisionByToken_FullMethodName, + FullMethod: AuthorizationService_GetDecisionBulkByToken_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizationServiceServer).GetDecisionByToken(ctx, req.(*GetDecisionByTokenRequest)) + return srv.(AuthorizationServiceServer).GetDecisionBulkByToken(ctx, req.(*GetDecisionBulkByTokenRequest)) } return interceptor(ctx, in, info, handler) } @@ -236,17 +236,17 @@ var AuthorizationService_ServiceDesc = grpc.ServiceDesc{ Handler: _AuthorizationService_GetDecision_Handler, }, { - MethodName: "BulkGetDecisions", - Handler: _AuthorizationService_BulkGetDecisions_Handler, - }, - { - MethodName: "BulkGetDecisionsByToken", - Handler: _AuthorizationService_BulkGetDecisionsByToken_Handler, + MethodName: "GetDecisionBulk", + Handler: _AuthorizationService_GetDecisionBulk_Handler, }, { MethodName: "GetDecisionByToken", Handler: _AuthorizationService_GetDecisionByToken_Handler, }, + { + MethodName: "GetDecisionBulkByToken", + Handler: _AuthorizationService_GetDecisionBulkByToken_Handler, + }, { MethodName: "GetEntitlements", Handler: _AuthorizationService_GetEntitlements_Handler, diff --git a/protocol/go/authorization/v2/authorizationv2connect/authorization.connect.go b/protocol/go/authorization/v2/authorizationv2connect/authorization.connect.go index b6807d0583..dd1818d71d 100644 --- a/protocol/go/authorization/v2/authorizationv2connect/authorization.connect.go +++ b/protocol/go/authorization/v2/authorizationv2connect/authorization.connect.go @@ -36,15 +36,15 @@ const ( // AuthorizationServiceGetDecisionProcedure is the fully-qualified name of the // AuthorizationService's GetDecision RPC. AuthorizationServiceGetDecisionProcedure = "/authorization.v2.AuthorizationService/GetDecision" - // AuthorizationServiceBulkGetDecisionsProcedure is the fully-qualified name of the - // AuthorizationService's BulkGetDecisions RPC. - AuthorizationServiceBulkGetDecisionsProcedure = "/authorization.v2.AuthorizationService/BulkGetDecisions" - // AuthorizationServiceBulkGetDecisionsByTokenProcedure is the fully-qualified name of the - // AuthorizationService's BulkGetDecisionsByToken RPC. - AuthorizationServiceBulkGetDecisionsByTokenProcedure = "/authorization.v2.AuthorizationService/BulkGetDecisionsByToken" + // AuthorizationServiceGetDecisionBulkProcedure is the fully-qualified name of the + // AuthorizationService's GetDecisionBulk RPC. + AuthorizationServiceGetDecisionBulkProcedure = "/authorization.v2.AuthorizationService/GetDecisionBulk" // AuthorizationServiceGetDecisionByTokenProcedure is the fully-qualified name of the // AuthorizationService's GetDecisionByToken RPC. AuthorizationServiceGetDecisionByTokenProcedure = "/authorization.v2.AuthorizationService/GetDecisionByToken" + // AuthorizationServiceGetDecisionBulkByTokenProcedure is the fully-qualified name of the + // AuthorizationService's GetDecisionBulkByToken RPC. + AuthorizationServiceGetDecisionBulkByTokenProcedure = "/authorization.v2.AuthorizationService/GetDecisionBulkByToken" // AuthorizationServiceGetEntitlementsProcedure is the fully-qualified name of the // AuthorizationService's GetEntitlements RPC. AuthorizationServiceGetEntitlementsProcedure = "/authorization.v2.AuthorizationService/GetEntitlements" @@ -52,20 +52,20 @@ const ( // These variables are the protoreflect.Descriptor objects for the RPCs defined in this package. var ( - authorizationServiceServiceDescriptor = v2.File_authorization_v2_authorization_proto.Services().ByName("AuthorizationService") - authorizationServiceGetDecisionMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetDecision") - authorizationServiceBulkGetDecisionsMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("BulkGetDecisions") - authorizationServiceBulkGetDecisionsByTokenMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("BulkGetDecisionsByToken") - authorizationServiceGetDecisionByTokenMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetDecisionByToken") - authorizationServiceGetEntitlementsMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetEntitlements") + authorizationServiceServiceDescriptor = v2.File_authorization_v2_authorization_proto.Services().ByName("AuthorizationService") + authorizationServiceGetDecisionMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetDecision") + authorizationServiceGetDecisionBulkMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetDecisionBulk") + authorizationServiceGetDecisionByTokenMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetDecisionByToken") + authorizationServiceGetDecisionBulkByTokenMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetDecisionBulkByToken") + authorizationServiceGetEntitlementsMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetEntitlements") ) // AuthorizationServiceClient is a client for the authorization.v2.AuthorizationService service. type AuthorizationServiceClient interface { GetDecision(context.Context, *connect.Request[v2.GetDecisionRequest]) (*connect.Response[v2.GetDecisionResponse], error) - BulkGetDecisions(context.Context, *connect.Request[v2.BulkGetDecisionsRequest]) (*connect.Response[v2.BulkGetDecisionsResponse], error) - BulkGetDecisionsByToken(context.Context, *connect.Request[v2.BulkGetDecisionsByTokenRequest]) (*connect.Response[v2.BulkGetDecisionsByTokenResponse], error) + GetDecisionBulk(context.Context, *connect.Request[v2.GetDecisionBulkRequest]) (*connect.Response[v2.GetDecisionBulkResponse], error) GetDecisionByToken(context.Context, *connect.Request[v2.GetDecisionByTokenRequest]) (*connect.Response[v2.GetDecisionByTokenResponse], error) + GetDecisionBulkByToken(context.Context, *connect.Request[v2.GetDecisionBulkByTokenRequest]) (*connect.Response[v2.GetDecisionBulkByTokenResponse], error) GetEntitlements(context.Context, *connect.Request[v2.GetEntitlementsRequest]) (*connect.Response[v2.GetEntitlementsResponse], error) } @@ -85,16 +85,10 @@ func NewAuthorizationServiceClient(httpClient connect.HTTPClient, baseURL string connect.WithSchema(authorizationServiceGetDecisionMethodDescriptor), connect.WithClientOptions(opts...), ), - bulkGetDecisions: connect.NewClient[v2.BulkGetDecisionsRequest, v2.BulkGetDecisionsResponse]( + getDecisionBulk: connect.NewClient[v2.GetDecisionBulkRequest, v2.GetDecisionBulkResponse]( httpClient, - baseURL+AuthorizationServiceBulkGetDecisionsProcedure, - connect.WithSchema(authorizationServiceBulkGetDecisionsMethodDescriptor), - connect.WithClientOptions(opts...), - ), - bulkGetDecisionsByToken: connect.NewClient[v2.BulkGetDecisionsByTokenRequest, v2.BulkGetDecisionsByTokenResponse]( - httpClient, - baseURL+AuthorizationServiceBulkGetDecisionsByTokenProcedure, - connect.WithSchema(authorizationServiceBulkGetDecisionsByTokenMethodDescriptor), + baseURL+AuthorizationServiceGetDecisionBulkProcedure, + connect.WithSchema(authorizationServiceGetDecisionBulkMethodDescriptor), connect.WithClientOptions(opts...), ), getDecisionByToken: connect.NewClient[v2.GetDecisionByTokenRequest, v2.GetDecisionByTokenResponse]( @@ -103,6 +97,12 @@ func NewAuthorizationServiceClient(httpClient connect.HTTPClient, baseURL string connect.WithSchema(authorizationServiceGetDecisionByTokenMethodDescriptor), connect.WithClientOptions(opts...), ), + getDecisionBulkByToken: connect.NewClient[v2.GetDecisionBulkByTokenRequest, v2.GetDecisionBulkByTokenResponse]( + httpClient, + baseURL+AuthorizationServiceGetDecisionBulkByTokenProcedure, + connect.WithSchema(authorizationServiceGetDecisionBulkByTokenMethodDescriptor), + connect.WithClientOptions(opts...), + ), getEntitlements: connect.NewClient[v2.GetEntitlementsRequest, v2.GetEntitlementsResponse]( httpClient, baseURL+AuthorizationServiceGetEntitlementsProcedure, @@ -114,11 +114,11 @@ func NewAuthorizationServiceClient(httpClient connect.HTTPClient, baseURL string // authorizationServiceClient implements AuthorizationServiceClient. type authorizationServiceClient struct { - getDecision *connect.Client[v2.GetDecisionRequest, v2.GetDecisionResponse] - bulkGetDecisions *connect.Client[v2.BulkGetDecisionsRequest, v2.BulkGetDecisionsResponse] - bulkGetDecisionsByToken *connect.Client[v2.BulkGetDecisionsByTokenRequest, v2.BulkGetDecisionsByTokenResponse] - getDecisionByToken *connect.Client[v2.GetDecisionByTokenRequest, v2.GetDecisionByTokenResponse] - getEntitlements *connect.Client[v2.GetEntitlementsRequest, v2.GetEntitlementsResponse] + getDecision *connect.Client[v2.GetDecisionRequest, v2.GetDecisionResponse] + getDecisionBulk *connect.Client[v2.GetDecisionBulkRequest, v2.GetDecisionBulkResponse] + getDecisionByToken *connect.Client[v2.GetDecisionByTokenRequest, v2.GetDecisionByTokenResponse] + getDecisionBulkByToken *connect.Client[v2.GetDecisionBulkByTokenRequest, v2.GetDecisionBulkByTokenResponse] + getEntitlements *connect.Client[v2.GetEntitlementsRequest, v2.GetEntitlementsResponse] } // GetDecision calls authorization.v2.AuthorizationService.GetDecision. @@ -126,14 +126,9 @@ func (c *authorizationServiceClient) GetDecision(ctx context.Context, req *conne return c.getDecision.CallUnary(ctx, req) } -// BulkGetDecisions calls authorization.v2.AuthorizationService.BulkGetDecisions. -func (c *authorizationServiceClient) BulkGetDecisions(ctx context.Context, req *connect.Request[v2.BulkGetDecisionsRequest]) (*connect.Response[v2.BulkGetDecisionsResponse], error) { - return c.bulkGetDecisions.CallUnary(ctx, req) -} - -// BulkGetDecisionsByToken calls authorization.v2.AuthorizationService.BulkGetDecisionsByToken. -func (c *authorizationServiceClient) BulkGetDecisionsByToken(ctx context.Context, req *connect.Request[v2.BulkGetDecisionsByTokenRequest]) (*connect.Response[v2.BulkGetDecisionsByTokenResponse], error) { - return c.bulkGetDecisionsByToken.CallUnary(ctx, req) +// GetDecisionBulk calls authorization.v2.AuthorizationService.GetDecisionBulk. +func (c *authorizationServiceClient) GetDecisionBulk(ctx context.Context, req *connect.Request[v2.GetDecisionBulkRequest]) (*connect.Response[v2.GetDecisionBulkResponse], error) { + return c.getDecisionBulk.CallUnary(ctx, req) } // GetDecisionByToken calls authorization.v2.AuthorizationService.GetDecisionByToken. @@ -141,6 +136,11 @@ func (c *authorizationServiceClient) GetDecisionByToken(ctx context.Context, req return c.getDecisionByToken.CallUnary(ctx, req) } +// GetDecisionBulkByToken calls authorization.v2.AuthorizationService.GetDecisionBulkByToken. +func (c *authorizationServiceClient) GetDecisionBulkByToken(ctx context.Context, req *connect.Request[v2.GetDecisionBulkByTokenRequest]) (*connect.Response[v2.GetDecisionBulkByTokenResponse], error) { + return c.getDecisionBulkByToken.CallUnary(ctx, req) +} + // GetEntitlements calls authorization.v2.AuthorizationService.GetEntitlements. func (c *authorizationServiceClient) GetEntitlements(ctx context.Context, req *connect.Request[v2.GetEntitlementsRequest]) (*connect.Response[v2.GetEntitlementsResponse], error) { return c.getEntitlements.CallUnary(ctx, req) @@ -150,9 +150,9 @@ func (c *authorizationServiceClient) GetEntitlements(ctx context.Context, req *c // service. type AuthorizationServiceHandler interface { GetDecision(context.Context, *connect.Request[v2.GetDecisionRequest]) (*connect.Response[v2.GetDecisionResponse], error) - BulkGetDecisions(context.Context, *connect.Request[v2.BulkGetDecisionsRequest]) (*connect.Response[v2.BulkGetDecisionsResponse], error) - BulkGetDecisionsByToken(context.Context, *connect.Request[v2.BulkGetDecisionsByTokenRequest]) (*connect.Response[v2.BulkGetDecisionsByTokenResponse], error) + GetDecisionBulk(context.Context, *connect.Request[v2.GetDecisionBulkRequest]) (*connect.Response[v2.GetDecisionBulkResponse], error) GetDecisionByToken(context.Context, *connect.Request[v2.GetDecisionByTokenRequest]) (*connect.Response[v2.GetDecisionByTokenResponse], error) + GetDecisionBulkByToken(context.Context, *connect.Request[v2.GetDecisionBulkByTokenRequest]) (*connect.Response[v2.GetDecisionBulkByTokenResponse], error) GetEntitlements(context.Context, *connect.Request[v2.GetEntitlementsRequest]) (*connect.Response[v2.GetEntitlementsResponse], error) } @@ -168,16 +168,10 @@ func NewAuthorizationServiceHandler(svc AuthorizationServiceHandler, opts ...con connect.WithSchema(authorizationServiceGetDecisionMethodDescriptor), connect.WithHandlerOptions(opts...), ) - authorizationServiceBulkGetDecisionsHandler := connect.NewUnaryHandler( - AuthorizationServiceBulkGetDecisionsProcedure, - svc.BulkGetDecisions, - connect.WithSchema(authorizationServiceBulkGetDecisionsMethodDescriptor), - connect.WithHandlerOptions(opts...), - ) - authorizationServiceBulkGetDecisionsByTokenHandler := connect.NewUnaryHandler( - AuthorizationServiceBulkGetDecisionsByTokenProcedure, - svc.BulkGetDecisionsByToken, - connect.WithSchema(authorizationServiceBulkGetDecisionsByTokenMethodDescriptor), + authorizationServiceGetDecisionBulkHandler := connect.NewUnaryHandler( + AuthorizationServiceGetDecisionBulkProcedure, + svc.GetDecisionBulk, + connect.WithSchema(authorizationServiceGetDecisionBulkMethodDescriptor), connect.WithHandlerOptions(opts...), ) authorizationServiceGetDecisionByTokenHandler := connect.NewUnaryHandler( @@ -186,6 +180,12 @@ func NewAuthorizationServiceHandler(svc AuthorizationServiceHandler, opts ...con connect.WithSchema(authorizationServiceGetDecisionByTokenMethodDescriptor), connect.WithHandlerOptions(opts...), ) + authorizationServiceGetDecisionBulkByTokenHandler := connect.NewUnaryHandler( + AuthorizationServiceGetDecisionBulkByTokenProcedure, + svc.GetDecisionBulkByToken, + connect.WithSchema(authorizationServiceGetDecisionBulkByTokenMethodDescriptor), + connect.WithHandlerOptions(opts...), + ) authorizationServiceGetEntitlementsHandler := connect.NewUnaryHandler( AuthorizationServiceGetEntitlementsProcedure, svc.GetEntitlements, @@ -196,12 +196,12 @@ func NewAuthorizationServiceHandler(svc AuthorizationServiceHandler, opts ...con switch r.URL.Path { case AuthorizationServiceGetDecisionProcedure: authorizationServiceGetDecisionHandler.ServeHTTP(w, r) - case AuthorizationServiceBulkGetDecisionsProcedure: - authorizationServiceBulkGetDecisionsHandler.ServeHTTP(w, r) - case AuthorizationServiceBulkGetDecisionsByTokenProcedure: - authorizationServiceBulkGetDecisionsByTokenHandler.ServeHTTP(w, r) + case AuthorizationServiceGetDecisionBulkProcedure: + authorizationServiceGetDecisionBulkHandler.ServeHTTP(w, r) case AuthorizationServiceGetDecisionByTokenProcedure: authorizationServiceGetDecisionByTokenHandler.ServeHTTP(w, r) + case AuthorizationServiceGetDecisionBulkByTokenProcedure: + authorizationServiceGetDecisionBulkByTokenHandler.ServeHTTP(w, r) case AuthorizationServiceGetEntitlementsProcedure: authorizationServiceGetEntitlementsHandler.ServeHTTP(w, r) default: @@ -217,18 +217,18 @@ func (UnimplementedAuthorizationServiceHandler) GetDecision(context.Context, *co return nil, connect.NewError(connect.CodeUnimplemented, errors.New("authorization.v2.AuthorizationService.GetDecision is not implemented")) } -func (UnimplementedAuthorizationServiceHandler) BulkGetDecisions(context.Context, *connect.Request[v2.BulkGetDecisionsRequest]) (*connect.Response[v2.BulkGetDecisionsResponse], error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("authorization.v2.AuthorizationService.BulkGetDecisions is not implemented")) -} - -func (UnimplementedAuthorizationServiceHandler) BulkGetDecisionsByToken(context.Context, *connect.Request[v2.BulkGetDecisionsByTokenRequest]) (*connect.Response[v2.BulkGetDecisionsByTokenResponse], error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("authorization.v2.AuthorizationService.BulkGetDecisionsByToken is not implemented")) +func (UnimplementedAuthorizationServiceHandler) GetDecisionBulk(context.Context, *connect.Request[v2.GetDecisionBulkRequest]) (*connect.Response[v2.GetDecisionBulkResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("authorization.v2.AuthorizationService.GetDecisionBulk is not implemented")) } func (UnimplementedAuthorizationServiceHandler) GetDecisionByToken(context.Context, *connect.Request[v2.GetDecisionByTokenRequest]) (*connect.Response[v2.GetDecisionByTokenResponse], error) { return nil, connect.NewError(connect.CodeUnimplemented, errors.New("authorization.v2.AuthorizationService.GetDecisionByToken is not implemented")) } +func (UnimplementedAuthorizationServiceHandler) GetDecisionBulkByToken(context.Context, *connect.Request[v2.GetDecisionBulkByTokenRequest]) (*connect.Response[v2.GetDecisionBulkByTokenResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("authorization.v2.AuthorizationService.GetDecisionBulkByToken is not implemented")) +} + func (UnimplementedAuthorizationServiceHandler) GetEntitlements(context.Context, *connect.Request[v2.GetEntitlementsRequest]) (*connect.Response[v2.GetEntitlementsResponse], error) { return nil, connect.NewError(connect.CodeUnimplemented, errors.New("authorization.v2.AuthorizationService.GetEntitlements is not implemented")) } diff --git a/service/authorization/v2/authorization.proto b/service/authorization/v2/authorization.proto index ac727bb33e..cded00c53d 100644 --- a/service/authorization/v2/authorization.proto +++ b/service/authorization/v2/authorization.proto @@ -82,10 +82,10 @@ message GetDecisionResponse { } // More performant bulk request for multiple decisions -message BulkGetDecisionsRequest { +message GetDecisionBulkRequest { repeated DecisionRequest decision_requests = 1; } -message BulkGetDecisionsResponse { +message GetDecisionBulkResponse { repeated DecisionResponse decision_responses = 1; } @@ -143,19 +143,19 @@ message GetDecisionByTokenResponse { } // More performant bulk request for multiple decisions -message BulkGetDecisionsByTokenRequest { +message GetDecisionBulkByTokenRequest { repeated TokenDecisionRequest decision_requests = 1; } -message BulkGetDecisionsByTokenResponse { +message GetDecisionBulkByTokenResponse { repeated DecisionResponse decision_responses = 1; } service AuthorizationService { rpc GetDecision(GetDecisionRequest) returns (GetDecisionResponse) {} - rpc BulkGetDecisions(BulkGetDecisionsRequest) returns (BulkGetDecisionsResponse) {} + rpc GetDecisionBulk(GetDecisionBulkRequest) returns (GetDecisionBulkResponse) {} - rpc BulkGetDecisionsByToken(BulkGetDecisionsByTokenRequest) returns (BulkGetDecisionsByTokenResponse) {} rpc GetDecisionByToken(GetDecisionByTokenRequest) returns (GetDecisionByTokenResponse) {} + rpc GetDecisionBulkByToken(GetDecisionBulkByTokenRequest) returns (GetDecisionBulkByTokenResponse) {} rpc GetEntitlements(GetEntitlementsRequest) returns (GetEntitlementsResponse) {} } From 2364f258a73fe5a00decc44b4a1c1fb9b08e3f97 Mon Sep 17 00:00:00 2001 From: jakedoublev Date: Wed, 30 Apr 2025 13:29:36 -0700 Subject: [PATCH 12/49] update protos per meeting outcome --- docs/grpc/index.html | 29 +- .../v2/authorization.swagger.json | 21 +- .../go/authorization/v2/authorization.pb.go | 1005 ++++++++--------- service/authorization/v2/authorization.proto | 65 +- 4 files changed, 518 insertions(+), 602 deletions(-) diff --git a/docs/grpc/index.html b/docs/grpc/index.html index b7aca4d923..202e5424b5 100644 --- a/docs/grpc/index.html +++ b/docs/grpc/index.html @@ -3690,7 +3690,7 @@

      authorization/v2/authorization.pro

      DecisionRequest

      -

      Can the entity (PE or NPE) represented by each entity chain take the provided action on the set of resources

      +

      Can the entity (PE or NPE) represented by each entity chain take the provided action on the each resource

      @@ -3714,9 +3714,9 @@

      DecisionRequest

      - + - + @@ -3806,27 +3806,6 @@

      Entity

      - - - - - - - - - - - - - - - - - - - - - @@ -3928,7 +3907,7 @@

      EntityEntitlements

      - + diff --git a/docs/openapi/authorization/v2/authorization.swagger.json b/docs/openapi/authorization/v2/authorization.swagger.json index 7257904fbf..1604c8a94a 100644 --- a/docs/openapi/authorization/v2/authorization.swagger.json +++ b/docs/openapi/authorization/v2/authorization.swagger.json @@ -59,11 +59,15 @@ "action": { "$ref": "#/definitions/policyAction" }, - "resource": { - "$ref": "#/definitions/v2Resource" + "resources": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v2Resource" + } } }, - "title": "Can the entity (PE or NPE) represented by each entity chain take the provided action on the set of resources" + "title": "Can the entity (PE or NPE) represented by each entity chain take the provided action on the each resource" }, "authorizationv2DecisionResponse": { "type": "object", @@ -111,15 +115,6 @@ "userName": { "type": "string" }, - "remoteClaimsUrl": { - "type": "string" - }, - "uuid": { - "type": "string" - }, - "claims": { - "$ref": "#/definitions/protobufAny" - }, "custom": { "$ref": "#/definitions/authorizationv2EntityCustom" }, @@ -173,7 +168,7 @@ "authorizationv2EntityEntitlements": { "type": "object", "properties": { - "entityId": { + "ephemeralId": { "type": "string" }, "actionsPerAttributeValueFqn": { diff --git a/protocol/go/authorization/v2/authorization.pb.go b/protocol/go/authorization/v2/authorization.pb.go index da42261312..f0c22b7d6c 100644 --- a/protocol/go/authorization/v2/authorization.pb.go +++ b/protocol/go/authorization/v2/authorization.pb.go @@ -117,7 +117,7 @@ func (x DecisionResponse_Decision) Number() protoreflect.EnumNumber { // Deprecated: Use DecisionResponse_Decision.Descriptor instead. func (DecisionResponse_Decision) EnumDescriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{5, 0} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{7, 0} } type Token struct { @@ -191,9 +191,6 @@ type Entity struct { // // *Entity_EmailAddress // *Entity_UserName - // *Entity_RemoteClaimsUrl - // *Entity_Uuid - // *Entity_Claims // *Entity_Custom // *Entity_ClientId // *Entity_RegisteredResourceValueFqn @@ -261,27 +258,6 @@ func (x *Entity) GetUserName() string { return "" } -func (x *Entity) GetRemoteClaimsUrl() string { - if x, ok := x.GetEntityType().(*Entity_RemoteClaimsUrl); ok { - return x.RemoteClaimsUrl - } - return "" -} - -func (x *Entity) GetUuid() string { - if x, ok := x.GetEntityType().(*Entity_Uuid); ok { - return x.Uuid - } - return "" -} - -func (x *Entity) GetClaims() *anypb.Any { - if x, ok := x.GetEntityType().(*Entity_Claims); ok { - return x.Claims - } - return nil -} - func (x *Entity) GetCustom() *EntityCustom { if x, ok := x.GetEntityType().(*Entity_Custom); ok { return x.Custom @@ -323,40 +299,22 @@ type Entity_UserName struct { UserName string `protobuf:"bytes,3,opt,name=user_name,json=userName,proto3,oneof"` } -type Entity_RemoteClaimsUrl struct { - RemoteClaimsUrl string `protobuf:"bytes,4,opt,name=remote_claims_url,json=remoteClaimsUrl,proto3,oneof"` -} - -type Entity_Uuid struct { - Uuid string `protobuf:"bytes,5,opt,name=uuid,proto3,oneof"` -} - -type Entity_Claims struct { - Claims *anypb.Any `protobuf:"bytes,6,opt,name=claims,proto3,oneof"` -} - type Entity_Custom struct { - Custom *EntityCustom `protobuf:"bytes,7,opt,name=custom,proto3,oneof"` + Custom *EntityCustom `protobuf:"bytes,4,opt,name=custom,proto3,oneof"` } type Entity_ClientId struct { - ClientId string `protobuf:"bytes,8,opt,name=client_id,json=clientId,proto3,oneof"` + ClientId string `protobuf:"bytes,5,opt,name=client_id,json=clientId,proto3,oneof"` } type Entity_RegisteredResourceValueFqn struct { - RegisteredResourceValueFqn string `protobuf:"bytes,10,opt,name=registered_resource_value_fqn,json=registeredResourceValueFqn,proto3,oneof"` + RegisteredResourceValueFqn string `protobuf:"bytes,6,opt,name=registered_resource_value_fqn,json=registeredResourceValueFqn,proto3,oneof"` } func (*Entity_EmailAddress) isEntity_EntityType() {} func (*Entity_UserName) isEntity_EntityType() {} -func (*Entity_RemoteClaimsUrl) isEntity_EntityType() {} - -func (*Entity_Uuid) isEntity_EntityType() {} - -func (*Entity_Claims) isEntity_EntityType() {} - func (*Entity_Custom) isEntity_EntityType() {} func (*Entity_ClientId) isEntity_EntityType() {} @@ -468,21 +426,168 @@ func (x *EntityChain) GetEntities() []*Entity { return nil } -// Can the entity (PE or NPE) represented by each entity chain take the provided action on the set of resources +// Entitlements for a given entity, mapping each attribute value FQN to any entitled actions[] +type EntityEntitlements struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + EphemeralId string `protobuf:"bytes,1,opt,name=ephemeral_id,json=ephemeralId,proto3" json:"ephemeral_id,omitempty"` + ActionsPerAttributeValueFqn map[string]*EntityEntitlements_ActionsList `protobuf:"bytes,2,rep,name=actions_per_attribute_value_fqn,json=actionsPerAttributeValueFqn,proto3" json:"actions_per_attribute_value_fqn,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *EntityEntitlements) Reset() { + *x = EntityEntitlements{} + if protoimpl.UnsafeEnabled { + mi := &file_authorization_v2_authorization_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EntityEntitlements) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EntityEntitlements) ProtoMessage() {} + +func (x *EntityEntitlements) ProtoReflect() protoreflect.Message { + mi := &file_authorization_v2_authorization_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EntityEntitlements.ProtoReflect.Descriptor instead. +func (*EntityEntitlements) Descriptor() ([]byte, []int) { + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{4} +} + +func (x *EntityEntitlements) GetEphemeralId() string { + if x != nil { + return x.EphemeralId + } + return "" +} + +func (x *EntityEntitlements) GetActionsPerAttributeValueFqn() map[string]*EntityEntitlements_ActionsList { + if x != nil { + return x.ActionsPerAttributeValueFqn + } + return nil +} + +// Either a registered resource or a set of attribute values +type Resource struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // ephemeral id for tracking between request and response + EphemeralId string `protobuf:"bytes,1,opt,name=ephemeral_id,json=ephemeralId,proto3" json:"ephemeral_id,omitempty"` + // Types that are assignable to Resource: + // + // *Resource_AttributeValues_ + // *Resource_RegisteredResourceValueFqn + Resource isResource_Resource `protobuf_oneof:"resource"` +} + +func (x *Resource) Reset() { + *x = Resource{} + if protoimpl.UnsafeEnabled { + mi := &file_authorization_v2_authorization_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Resource) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Resource) ProtoMessage() {} + +func (x *Resource) ProtoReflect() protoreflect.Message { + mi := &file_authorization_v2_authorization_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Resource.ProtoReflect.Descriptor instead. +func (*Resource) Descriptor() ([]byte, []int) { + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{5} +} + +func (x *Resource) GetEphemeralId() string { + if x != nil { + return x.EphemeralId + } + return "" +} + +func (m *Resource) GetResource() isResource_Resource { + if m != nil { + return m.Resource + } + return nil +} + +func (x *Resource) GetAttributeValues() *Resource_AttributeValues { + if x, ok := x.GetResource().(*Resource_AttributeValues_); ok { + return x.AttributeValues + } + return nil +} + +func (x *Resource) GetRegisteredResourceValueFqn() string { + if x, ok := x.GetResource().(*Resource_RegisteredResourceValueFqn); ok { + return x.RegisteredResourceValueFqn + } + return "" +} + +type isResource_Resource interface { + isResource_Resource() +} + +type Resource_AttributeValues_ struct { + AttributeValues *Resource_AttributeValues `protobuf:"bytes,2,opt,name=attribute_values,json=attributeValues,proto3,oneof"` +} + +type Resource_RegisteredResourceValueFqn struct { + RegisteredResourceValueFqn string `protobuf:"bytes,3,opt,name=registered_resource_value_fqn,json=registeredResourceValueFqn,proto3,oneof"` +} + +func (*Resource_AttributeValues_) isResource_Resource() {} + +func (*Resource_RegisteredResourceValueFqn) isResource_Resource() {} + +// Can the entity (PE or NPE) represented by each entity chain take the provided action on the each resource type DecisionRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Entity *EntityChain `protobuf:"bytes,1,opt,name=entity,proto3" json:"entity,omitempty"` - Action *policy.Action `protobuf:"bytes,2,opt,name=action,proto3" json:"action,omitempty"` - Resource *Resource `protobuf:"bytes,3,opt,name=resource,proto3" json:"resource,omitempty"` + Entity *EntityChain `protobuf:"bytes,1,opt,name=entity,proto3" json:"entity,omitempty"` + Action *policy.Action `protobuf:"bytes,2,opt,name=action,proto3" json:"action,omitempty"` + Resources []*Resource `protobuf:"bytes,3,rep,name=resources,proto3" json:"resources,omitempty"` } func (x *DecisionRequest) Reset() { *x = DecisionRequest{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[4] + mi := &file_authorization_v2_authorization_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -495,7 +600,7 @@ func (x *DecisionRequest) String() string { func (*DecisionRequest) ProtoMessage() {} func (x *DecisionRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[4] + mi := &file_authorization_v2_authorization_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -508,7 +613,7 @@ func (x *DecisionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DecisionRequest.ProtoReflect.Descriptor instead. func (*DecisionRequest) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{4} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{6} } func (x *DecisionRequest) GetEntity() *EntityChain { @@ -525,9 +630,9 @@ func (x *DecisionRequest) GetAction() *policy.Action { return nil } -func (x *DecisionRequest) GetResource() *Resource { +func (x *DecisionRequest) GetResources() []*Resource { if x != nil { - return x.Resource + return x.Resources } return nil } @@ -550,7 +655,7 @@ type DecisionResponse struct { func (x *DecisionResponse) Reset() { *x = DecisionResponse{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[5] + mi := &file_authorization_v2_authorization_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -563,7 +668,7 @@ func (x *DecisionResponse) String() string { func (*DecisionResponse) ProtoMessage() {} func (x *DecisionResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[5] + mi := &file_authorization_v2_authorization_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -576,7 +681,7 @@ func (x *DecisionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DecisionResponse.ProtoReflect.Descriptor instead. func (*DecisionResponse) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{5} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{7} } func (x *DecisionResponse) GetEphemeralEntityChainId() string { @@ -618,7 +723,7 @@ type GetDecisionRequest struct { func (x *GetDecisionRequest) Reset() { *x = GetDecisionRequest{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[6] + mi := &file_authorization_v2_authorization_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -631,7 +736,7 @@ func (x *GetDecisionRequest) String() string { func (*GetDecisionRequest) ProtoMessage() {} func (x *GetDecisionRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[6] + mi := &file_authorization_v2_authorization_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -644,7 +749,7 @@ func (x *GetDecisionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDecisionRequest.ProtoReflect.Descriptor instead. func (*GetDecisionRequest) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{6} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{8} } func (x *GetDecisionRequest) GetDecisionRequest() *DecisionRequest { @@ -665,7 +770,7 @@ type GetDecisionResponse struct { func (x *GetDecisionResponse) Reset() { *x = GetDecisionResponse{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[7] + mi := &file_authorization_v2_authorization_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -678,7 +783,7 @@ func (x *GetDecisionResponse) String() string { func (*GetDecisionResponse) ProtoMessage() {} func (x *GetDecisionResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[7] + mi := &file_authorization_v2_authorization_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -691,7 +796,7 @@ func (x *GetDecisionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDecisionResponse.ProtoReflect.Descriptor instead. func (*GetDecisionResponse) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{7} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{9} } func (x *GetDecisionResponse) GetDecisionResponse() *DecisionResponse { @@ -713,7 +818,7 @@ type GetDecisionBulkRequest struct { func (x *GetDecisionBulkRequest) Reset() { *x = GetDecisionBulkRequest{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[8] + mi := &file_authorization_v2_authorization_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -726,7 +831,7 @@ func (x *GetDecisionBulkRequest) String() string { func (*GetDecisionBulkRequest) ProtoMessage() {} func (x *GetDecisionBulkRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[8] + mi := &file_authorization_v2_authorization_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -739,7 +844,7 @@ func (x *GetDecisionBulkRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDecisionBulkRequest.ProtoReflect.Descriptor instead. func (*GetDecisionBulkRequest) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{8} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{10} } func (x *GetDecisionBulkRequest) GetDecisionRequests() []*DecisionRequest { @@ -760,7 +865,7 @@ type GetDecisionBulkResponse struct { func (x *GetDecisionBulkResponse) Reset() { *x = GetDecisionBulkResponse{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[9] + mi := &file_authorization_v2_authorization_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -773,7 +878,7 @@ func (x *GetDecisionBulkResponse) String() string { func (*GetDecisionBulkResponse) ProtoMessage() {} func (x *GetDecisionBulkResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[9] + mi := &file_authorization_v2_authorization_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -786,7 +891,7 @@ func (x *GetDecisionBulkResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDecisionBulkResponse.ProtoReflect.Descriptor instead. func (*GetDecisionBulkResponse) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{9} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{11} } func (x *GetDecisionBulkResponse) GetDecisionResponses() []*DecisionResponse { @@ -813,7 +918,7 @@ type GetEntitlementsRequest struct { func (x *GetEntitlementsRequest) Reset() { *x = GetEntitlementsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[10] + mi := &file_authorization_v2_authorization_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -826,7 +931,7 @@ func (x *GetEntitlementsRequest) String() string { func (*GetEntitlementsRequest) ProtoMessage() {} func (x *GetEntitlementsRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[10] + mi := &file_authorization_v2_authorization_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -839,7 +944,7 @@ func (x *GetEntitlementsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetEntitlementsRequest.ProtoReflect.Descriptor instead. func (*GetEntitlementsRequest) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{10} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{12} } func (x *GetEntitlementsRequest) GetEntities() []*Entity { @@ -863,153 +968,6 @@ func (x *GetEntitlementsRequest) GetWithComprehensiveHierarchy() bool { return false } -// Entitlements for a given entity, mapping each attribute value FQN to any entitled actions[] -type EntityEntitlements struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - EntityId string `protobuf:"bytes,1,opt,name=entity_id,json=entityId,proto3" json:"entity_id,omitempty"` - ActionsPerAttributeValueFqn map[string]*EntityEntitlements_ActionsList `protobuf:"bytes,2,rep,name=actions_per_attribute_value_fqn,json=actionsPerAttributeValueFqn,proto3" json:"actions_per_attribute_value_fqn,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` -} - -func (x *EntityEntitlements) Reset() { - *x = EntityEntitlements{} - if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *EntityEntitlements) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*EntityEntitlements) ProtoMessage() {} - -func (x *EntityEntitlements) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use EntityEntitlements.ProtoReflect.Descriptor instead. -func (*EntityEntitlements) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{11} -} - -func (x *EntityEntitlements) GetEntityId() string { - if x != nil { - return x.EntityId - } - return "" -} - -func (x *EntityEntitlements) GetActionsPerAttributeValueFqn() map[string]*EntityEntitlements_ActionsList { - if x != nil { - return x.ActionsPerAttributeValueFqn - } - return nil -} - -// Either a registered resource or a set of attribute values -type Resource struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // ephemeral id for tracking between request and response - EphemeralId string `protobuf:"bytes,1,opt,name=ephemeral_id,json=ephemeralId,proto3" json:"ephemeral_id,omitempty"` - // Types that are assignable to Resource: - // - // *Resource_AttributeValues_ - // *Resource_RegisteredResourceValueFqn - Resource isResource_Resource `protobuf_oneof:"resource"` -} - -func (x *Resource) Reset() { - *x = Resource{} - if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Resource) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Resource) ProtoMessage() {} - -func (x *Resource) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Resource.ProtoReflect.Descriptor instead. -func (*Resource) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{12} -} - -func (x *Resource) GetEphemeralId() string { - if x != nil { - return x.EphemeralId - } - return "" -} - -func (m *Resource) GetResource() isResource_Resource { - if m != nil { - return m.Resource - } - return nil -} - -func (x *Resource) GetAttributeValues() *Resource_AttributeValues { - if x, ok := x.GetResource().(*Resource_AttributeValues_); ok { - return x.AttributeValues - } - return nil -} - -func (x *Resource) GetRegisteredResourceValueFqn() string { - if x, ok := x.GetResource().(*Resource_RegisteredResourceValueFqn); ok { - return x.RegisteredResourceValueFqn - } - return "" -} - -type isResource_Resource interface { - isResource_Resource() -} - -type Resource_AttributeValues_ struct { - AttributeValues *Resource_AttributeValues `protobuf:"bytes,2,opt,name=attribute_values,json=attributeValues,proto3,oneof"` -} - -type Resource_RegisteredResourceValueFqn struct { - RegisteredResourceValueFqn string `protobuf:"bytes,3,opt,name=registered_resource_value_fqn,json=registeredResourceValueFqn,proto3,oneof"` -} - -func (*Resource_AttributeValues_) isResource_Resource() {} - -func (*Resource_RegisteredResourceValueFqn) isResource_Resource() {} - type GetEntitlementsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1347,7 +1305,7 @@ func (x *EntityEntitlements_ActionsList) ProtoReflect() protoreflect.Message { // Deprecated: Use EntityEntitlements_ActionsList.ProtoReflect.Descriptor instead. func (*EntityEntitlements_ActionsList) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{11, 0} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{4, 0} } func (x *EntityEntitlements_ActionsList) GetActions() []*policy.Action { @@ -1394,7 +1352,7 @@ func (x *Resource_AttributeValues) ProtoReflect() protoreflect.Message { // Deprecated: Use Resource_AttributeValues.ProtoReflect.Descriptor instead. func (*Resource_AttributeValues) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{12, 0} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{5, 0} } func (x *Resource_AttributeValues) GetFqns() []string { @@ -1417,260 +1375,253 @@ var file_authorization_v2_authorization_proto_rawDesc = []byte{ 0x65, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6a, 0x77, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6a, 0x77, 0x74, 0x22, 0xa7, 0x04, 0x0a, 0x06, 0x45, 0x6e, 0x74, 0x69, + 0x28, 0x09, 0x52, 0x03, 0x6a, 0x77, 0x74, 0x22, 0xb3, 0x03, 0x0a, 0x06, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0d, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0c, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1d, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, - 0x00, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x72, - 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x5f, 0x75, 0x72, 0x6c, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, - 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x55, 0x72, 0x6c, 0x12, 0x14, 0x0a, 0x04, 0x75, 0x75, 0x69, - 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, - 0x2e, 0x0a, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x48, 0x00, 0x52, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x12, - 0x38, 0x0a, 0x06, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1e, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, - 0x00, 0x52, 0x06, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x1d, 0x0a, 0x09, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, - 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x1d, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x48, - 0x00, 0x52, 0x1a, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x12, 0x3d, 0x0a, - 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x21, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, - 0x72, 0x79, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x22, 0x54, 0x0a, 0x08, - 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x41, 0x54, 0x45, - 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x53, - 0x55, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x41, 0x54, 0x45, - 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x45, 0x4e, 0x56, 0x49, 0x52, 0x4f, 0x4e, 0x4d, 0x45, 0x4e, 0x54, - 0x10, 0x02, 0x42, 0x0d, 0x0a, 0x0b, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x74, 0x79, 0x70, - 0x65, 0x22, 0x42, 0x0a, 0x0c, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x75, 0x73, 0x74, 0x6f, - 0x6d, 0x12, 0x32, 0x0a, 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x09, 0x65, 0x78, 0x74, 0x65, - 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x66, 0x0a, 0x0b, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, - 0x68, 0x61, 0x69, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, - 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, - 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0xa8, 0x01, - 0x0a, 0x0f, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x35, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, - 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x36, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0xc0, 0x02, 0x0a, 0x10, 0x44, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, - 0x19, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x16, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x45, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x15, 0x65, 0x70, 0x68, 0x65, - 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, - 0x61, 0x6c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x06, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x47, 0x0a, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x4c, 0x0a, - 0x08, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x14, 0x44, 0x45, 0x43, - 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, - 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, - 0x44, 0x45, 0x4e, 0x59, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, - 0x4f, 0x4e, 0x5f, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x22, 0x62, 0x0a, 0x12, 0x47, - 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x4c, 0x0a, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0f, - 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, - 0x66, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x68, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x44, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x4e, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, - 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, - 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x73, 0x22, 0x6c, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x12, - 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x11, 0x64, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22, - 0xf7, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x08, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, - 0x12, 0x35, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, 0x52, 0x05, 0x73, - 0x63, 0x6f, 0x70, 0x65, 0x88, 0x01, 0x01, 0x12, 0x45, 0x0a, 0x1c, 0x77, 0x69, 0x74, 0x68, 0x5f, - 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, - 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, - 0x1a, 0x77, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, - 0x76, 0x65, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x88, 0x01, 0x01, 0x42, 0x08, - 0x0a, 0x06, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x42, 0x1f, 0x0a, 0x1d, 0x5f, 0x77, 0x69, 0x74, - 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, - 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x22, 0xfb, 0x02, 0x0a, 0x12, 0x45, 0x6e, + 0x00, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x06, 0x63, + 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x00, 0x52, 0x06, 0x63, + 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x1d, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x1d, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, + 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x1a, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x12, 0x3d, 0x0a, 0x08, 0x63, 0x61, 0x74, + 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x08, + 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x22, 0x54, 0x0a, 0x08, 0x43, 0x61, 0x74, 0x65, + 0x67, 0x6f, 0x72, 0x79, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, + 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x14, + 0x0a, 0x10, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x53, 0x55, 0x42, 0x4a, 0x45, + 0x43, 0x54, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, + 0x5f, 0x45, 0x4e, 0x56, 0x49, 0x52, 0x4f, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x42, 0x0d, + 0x0a, 0x0b, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x42, 0x0a, + 0x0c, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x32, 0x0a, + 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, + 0x6e, 0x22, 0x66, 0x0a, 0x0b, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, + 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, + 0x6c, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, + 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0x81, 0x03, 0x0a, 0x12, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x12, 0x8b, 0x01, - 0x0a, 0x1f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x61, 0x74, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, - 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x1b, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x1a, 0x37, 0x0a, 0x0b, 0x41, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x80, 0x01, 0x0a, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x46, 0x71, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x46, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xfe, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, - 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, - 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x57, 0x0a, 0x10, 0x61, 0x74, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x41, 0x74, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x48, 0x00, 0x52, - 0x0f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, - 0x12, 0x43, 0x0a, 0x1d, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, - 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x1a, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x46, 0x71, 0x6e, 0x1a, 0x25, 0x0a, 0x0f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x6e, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, 0x6e, 0x73, 0x42, 0x0a, 0x0a, 0x08, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x63, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x45, - 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, - 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xa5, 0x01, - 0x0a, 0x14, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x05, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x36, 0x0a, - 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x6e, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x51, 0x0a, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, - 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x52, 0x0f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x6d, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, - 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, + 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, + 0x6c, 0x49, 0x64, 0x12, 0x8b, 0x01, 0x0a, 0x1f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, + 0x70, 0x65, 0x72, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, + 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x1b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, + 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, + 0x6e, 0x1a, 0x37, 0x0a, 0x0b, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, 0x74, + 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x80, 0x01, 0x0a, 0x20, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, + 0x79, 0x12, 0x46, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x30, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, + 0x73, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xfe, 0x01, + 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, + 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x57, 0x0a, + 0x10, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x73, 0x48, 0x00, 0x52, 0x0f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x43, 0x0a, 0x1d, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x65, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, + 0x1a, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x1a, 0x25, 0x0a, 0x0f, 0x41, + 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x12, + 0x0a, 0x04, 0x66, 0x71, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, + 0x6e, 0x73, 0x42, 0x0a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0xaa, + 0x01, 0x0a, 0x0f, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x35, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, + 0x6e, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x38, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x22, 0xc0, 0x02, 0x0a, 0x10, + 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x39, 0x0a, 0x19, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x16, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x45, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x15, 0x65, + 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x65, 0x70, 0x68, 0x65, + 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, + 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x47, 0x0a, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x22, 0x4c, 0x0a, 0x08, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x14, + 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, + 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4e, 0x59, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x45, 0x43, + 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x22, 0x62, + 0x0a, 0x12, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x74, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x53, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x52, 0x0f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x22, 0x66, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x11, 0x64, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x68, 0x0a, 0x16, 0x47, 0x65, + 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x4e, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x21, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x73, 0x22, 0x6c, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x51, 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, + 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x73, 0x22, 0xf7, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, + 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x18, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x69, 0x65, 0x73, 0x12, 0x35, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, + 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x88, 0x01, 0x01, 0x12, 0x45, 0x0a, 0x1c, 0x77, 0x69, + 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, + 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, + 0x48, 0x01, 0x52, 0x1a, 0x77, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, + 0x6e, 0x73, 0x69, 0x76, 0x65, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x88, 0x01, + 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x42, 0x1f, 0x0a, 0x1d, 0x5f, + 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, + 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x22, 0x63, 0x0a, 0x17, + 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, + 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x22, 0xa5, 0x01, 0x0a, 0x14, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x05, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x36, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, + 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x6e, 0x0a, 0x19, 0x47, 0x65, 0x74, + 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x51, 0x0a, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, 0x73, 0x0a, 0x1e, 0x47, 0x65, - 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x42, 0x79, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x12, - 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x11, 0x64, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x32, - 0xba, 0x04, 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5c, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x44, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x6d, 0x0a, 0x1a, 0x47, 0x65, 0x74, + 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x74, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x44, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x42, 0x79, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x53, 0x0a, 0x11, 0x64, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x10, 0x64, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, 0x73, + 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, + 0x6b, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x51, 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x73, 0x32, 0xba, 0x04, 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5c, 0x0a, 0x0b, + 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x2e, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, + 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x0f, 0x47, 0x65, + 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x12, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x12, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x71, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2b, 0x2e, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, + 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7d, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x44, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x12, 0x2f, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x42, 0x75, 0x6c, 0x6b, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, + 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, - 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x71, 0x75, + 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x71, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, - 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2b, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x7d, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2f, 0x2e, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, - 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, - 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, - 0x6b, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x68, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, - 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xd5, 0x01, 0x0a, - 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x42, 0x12, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x48, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2f, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x2f, 0x67, 0x6f, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x3b, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x76, 0x32, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x10, 0x41, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x32, 0xca, 0x02, - 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, - 0x32, 0xe2, 0x02, 0x1c, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5c, 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0xea, 0x02, 0x11, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x42, 0xd5, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x42, 0x12, 0x41, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, + 0x48, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, + 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, 0x6f, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x3b, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x32, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, + 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x56, 0x32, 0xca, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x1c, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1694,15 +1645,15 @@ var file_authorization_v2_authorization_proto_goTypes = []interface{}{ (*Entity)(nil), // 3: authorization.v2.Entity (*EntityCustom)(nil), // 4: authorization.v2.EntityCustom (*EntityChain)(nil), // 5: authorization.v2.EntityChain - (*DecisionRequest)(nil), // 6: authorization.v2.DecisionRequest - (*DecisionResponse)(nil), // 7: authorization.v2.DecisionResponse - (*GetDecisionRequest)(nil), // 8: authorization.v2.GetDecisionRequest - (*GetDecisionResponse)(nil), // 9: authorization.v2.GetDecisionResponse - (*GetDecisionBulkRequest)(nil), // 10: authorization.v2.GetDecisionBulkRequest - (*GetDecisionBulkResponse)(nil), // 11: authorization.v2.GetDecisionBulkResponse - (*GetEntitlementsRequest)(nil), // 12: authorization.v2.GetEntitlementsRequest - (*EntityEntitlements)(nil), // 13: authorization.v2.EntityEntitlements - (*Resource)(nil), // 14: authorization.v2.Resource + (*EntityEntitlements)(nil), // 6: authorization.v2.EntityEntitlements + (*Resource)(nil), // 7: authorization.v2.Resource + (*DecisionRequest)(nil), // 8: authorization.v2.DecisionRequest + (*DecisionResponse)(nil), // 9: authorization.v2.DecisionResponse + (*GetDecisionRequest)(nil), // 10: authorization.v2.GetDecisionRequest + (*GetDecisionResponse)(nil), // 11: authorization.v2.GetDecisionResponse + (*GetDecisionBulkRequest)(nil), // 12: authorization.v2.GetDecisionBulkRequest + (*GetDecisionBulkResponse)(nil), // 13: authorization.v2.GetDecisionBulkResponse + (*GetEntitlementsRequest)(nil), // 14: authorization.v2.GetEntitlementsRequest (*GetEntitlementsResponse)(nil), // 15: authorization.v2.GetEntitlementsResponse (*TokenDecisionRequest)(nil), // 16: authorization.v2.TokenDecisionRequest (*GetDecisionByTokenRequest)(nil), // 17: authorization.v2.GetDecisionByTokenRequest @@ -1716,49 +1667,48 @@ var file_authorization_v2_authorization_proto_goTypes = []interface{}{ (*policy.Action)(nil), // 25: policy.Action } var file_authorization_v2_authorization_proto_depIdxs = []int32{ - 24, // 0: authorization.v2.Entity.claims:type_name -> google.protobuf.Any - 4, // 1: authorization.v2.Entity.custom:type_name -> authorization.v2.EntityCustom - 0, // 2: authorization.v2.Entity.category:type_name -> authorization.v2.Entity.Category - 24, // 3: authorization.v2.EntityCustom.extension:type_name -> google.protobuf.Any - 3, // 4: authorization.v2.EntityChain.entities:type_name -> authorization.v2.Entity - 5, // 5: authorization.v2.DecisionRequest.entity:type_name -> authorization.v2.EntityChain - 25, // 6: authorization.v2.DecisionRequest.action:type_name -> policy.Action - 14, // 7: authorization.v2.DecisionRequest.resource:type_name -> authorization.v2.Resource - 25, // 8: authorization.v2.DecisionResponse.action:type_name -> policy.Action - 1, // 9: authorization.v2.DecisionResponse.decision:type_name -> authorization.v2.DecisionResponse.Decision - 6, // 10: authorization.v2.GetDecisionRequest.decision_request:type_name -> authorization.v2.DecisionRequest - 7, // 11: authorization.v2.GetDecisionResponse.decision_response:type_name -> authorization.v2.DecisionResponse - 6, // 12: authorization.v2.GetDecisionBulkRequest.decision_requests:type_name -> authorization.v2.DecisionRequest - 7, // 13: authorization.v2.GetDecisionBulkResponse.decision_responses:type_name -> authorization.v2.DecisionResponse - 3, // 14: authorization.v2.GetEntitlementsRequest.entities:type_name -> authorization.v2.Entity - 14, // 15: authorization.v2.GetEntitlementsRequest.scope:type_name -> authorization.v2.Resource - 22, // 16: authorization.v2.EntityEntitlements.actions_per_attribute_value_fqn:type_name -> authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry - 23, // 17: authorization.v2.Resource.attribute_values:type_name -> authorization.v2.Resource.AttributeValues - 13, // 18: authorization.v2.GetEntitlementsResponse.entitlements:type_name -> authorization.v2.EntityEntitlements - 2, // 19: authorization.v2.TokenDecisionRequest.token:type_name -> authorization.v2.Token - 25, // 20: authorization.v2.TokenDecisionRequest.action:type_name -> policy.Action - 14, // 21: authorization.v2.TokenDecisionRequest.resource:type_name -> authorization.v2.Resource - 16, // 22: authorization.v2.GetDecisionByTokenRequest.decision_request:type_name -> authorization.v2.TokenDecisionRequest - 7, // 23: authorization.v2.GetDecisionByTokenResponse.decision_response:type_name -> authorization.v2.DecisionResponse - 16, // 24: authorization.v2.GetDecisionBulkByTokenRequest.decision_requests:type_name -> authorization.v2.TokenDecisionRequest - 7, // 25: authorization.v2.GetDecisionBulkByTokenResponse.decision_responses:type_name -> authorization.v2.DecisionResponse - 25, // 26: authorization.v2.EntityEntitlements.ActionsList.actions:type_name -> policy.Action - 21, // 27: authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry.value:type_name -> authorization.v2.EntityEntitlements.ActionsList - 8, // 28: authorization.v2.AuthorizationService.GetDecision:input_type -> authorization.v2.GetDecisionRequest - 10, // 29: authorization.v2.AuthorizationService.GetDecisionBulk:input_type -> authorization.v2.GetDecisionBulkRequest - 17, // 30: authorization.v2.AuthorizationService.GetDecisionByToken:input_type -> authorization.v2.GetDecisionByTokenRequest - 19, // 31: authorization.v2.AuthorizationService.GetDecisionBulkByToken:input_type -> authorization.v2.GetDecisionBulkByTokenRequest - 12, // 32: authorization.v2.AuthorizationService.GetEntitlements:input_type -> authorization.v2.GetEntitlementsRequest - 9, // 33: authorization.v2.AuthorizationService.GetDecision:output_type -> authorization.v2.GetDecisionResponse - 11, // 34: authorization.v2.AuthorizationService.GetDecisionBulk:output_type -> authorization.v2.GetDecisionBulkResponse - 18, // 35: authorization.v2.AuthorizationService.GetDecisionByToken:output_type -> authorization.v2.GetDecisionByTokenResponse - 20, // 36: authorization.v2.AuthorizationService.GetDecisionBulkByToken:output_type -> authorization.v2.GetDecisionBulkByTokenResponse - 15, // 37: authorization.v2.AuthorizationService.GetEntitlements:output_type -> authorization.v2.GetEntitlementsResponse - 33, // [33:38] is the sub-list for method output_type - 28, // [28:33] is the sub-list for method input_type - 28, // [28:28] is the sub-list for extension type_name - 28, // [28:28] is the sub-list for extension extendee - 0, // [0:28] is the sub-list for field type_name + 4, // 0: authorization.v2.Entity.custom:type_name -> authorization.v2.EntityCustom + 0, // 1: authorization.v2.Entity.category:type_name -> authorization.v2.Entity.Category + 24, // 2: authorization.v2.EntityCustom.extension:type_name -> google.protobuf.Any + 3, // 3: authorization.v2.EntityChain.entities:type_name -> authorization.v2.Entity + 22, // 4: authorization.v2.EntityEntitlements.actions_per_attribute_value_fqn:type_name -> authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry + 23, // 5: authorization.v2.Resource.attribute_values:type_name -> authorization.v2.Resource.AttributeValues + 5, // 6: authorization.v2.DecisionRequest.entity:type_name -> authorization.v2.EntityChain + 25, // 7: authorization.v2.DecisionRequest.action:type_name -> policy.Action + 7, // 8: authorization.v2.DecisionRequest.resources:type_name -> authorization.v2.Resource + 25, // 9: authorization.v2.DecisionResponse.action:type_name -> policy.Action + 1, // 10: authorization.v2.DecisionResponse.decision:type_name -> authorization.v2.DecisionResponse.Decision + 8, // 11: authorization.v2.GetDecisionRequest.decision_request:type_name -> authorization.v2.DecisionRequest + 9, // 12: authorization.v2.GetDecisionResponse.decision_response:type_name -> authorization.v2.DecisionResponse + 8, // 13: authorization.v2.GetDecisionBulkRequest.decision_requests:type_name -> authorization.v2.DecisionRequest + 9, // 14: authorization.v2.GetDecisionBulkResponse.decision_responses:type_name -> authorization.v2.DecisionResponse + 3, // 15: authorization.v2.GetEntitlementsRequest.entities:type_name -> authorization.v2.Entity + 7, // 16: authorization.v2.GetEntitlementsRequest.scope:type_name -> authorization.v2.Resource + 6, // 17: authorization.v2.GetEntitlementsResponse.entitlements:type_name -> authorization.v2.EntityEntitlements + 2, // 18: authorization.v2.TokenDecisionRequest.token:type_name -> authorization.v2.Token + 25, // 19: authorization.v2.TokenDecisionRequest.action:type_name -> policy.Action + 7, // 20: authorization.v2.TokenDecisionRequest.resource:type_name -> authorization.v2.Resource + 16, // 21: authorization.v2.GetDecisionByTokenRequest.decision_request:type_name -> authorization.v2.TokenDecisionRequest + 9, // 22: authorization.v2.GetDecisionByTokenResponse.decision_response:type_name -> authorization.v2.DecisionResponse + 16, // 23: authorization.v2.GetDecisionBulkByTokenRequest.decision_requests:type_name -> authorization.v2.TokenDecisionRequest + 9, // 24: authorization.v2.GetDecisionBulkByTokenResponse.decision_responses:type_name -> authorization.v2.DecisionResponse + 25, // 25: authorization.v2.EntityEntitlements.ActionsList.actions:type_name -> policy.Action + 21, // 26: authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry.value:type_name -> authorization.v2.EntityEntitlements.ActionsList + 10, // 27: authorization.v2.AuthorizationService.GetDecision:input_type -> authorization.v2.GetDecisionRequest + 12, // 28: authorization.v2.AuthorizationService.GetDecisionBulk:input_type -> authorization.v2.GetDecisionBulkRequest + 17, // 29: authorization.v2.AuthorizationService.GetDecisionByToken:input_type -> authorization.v2.GetDecisionByTokenRequest + 19, // 30: authorization.v2.AuthorizationService.GetDecisionBulkByToken:input_type -> authorization.v2.GetDecisionBulkByTokenRequest + 14, // 31: authorization.v2.AuthorizationService.GetEntitlements:input_type -> authorization.v2.GetEntitlementsRequest + 11, // 32: authorization.v2.AuthorizationService.GetDecision:output_type -> authorization.v2.GetDecisionResponse + 13, // 33: authorization.v2.AuthorizationService.GetDecisionBulk:output_type -> authorization.v2.GetDecisionBulkResponse + 18, // 34: authorization.v2.AuthorizationService.GetDecisionByToken:output_type -> authorization.v2.GetDecisionByTokenResponse + 20, // 35: authorization.v2.AuthorizationService.GetDecisionBulkByToken:output_type -> authorization.v2.GetDecisionBulkByTokenResponse + 15, // 36: authorization.v2.AuthorizationService.GetEntitlements:output_type -> authorization.v2.GetEntitlementsResponse + 32, // [32:37] is the sub-list for method output_type + 27, // [27:32] is the sub-list for method input_type + 27, // [27:27] is the sub-list for extension type_name + 27, // [27:27] is the sub-list for extension extendee + 0, // [0:27] is the sub-list for field type_name } func init() { file_authorization_v2_authorization_proto_init() } @@ -1816,7 +1766,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DecisionRequest); i { + switch v := v.(*EntityEntitlements); i { case 0: return &v.state case 1: @@ -1828,7 +1778,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DecisionResponse); i { + switch v := v.(*Resource); i { case 0: return &v.state case 1: @@ -1840,7 +1790,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDecisionRequest); i { + switch v := v.(*DecisionRequest); i { case 0: return &v.state case 1: @@ -1852,7 +1802,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDecisionResponse); i { + switch v := v.(*DecisionResponse); i { case 0: return &v.state case 1: @@ -1864,7 +1814,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDecisionBulkRequest); i { + switch v := v.(*GetDecisionRequest); i { case 0: return &v.state case 1: @@ -1876,7 +1826,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDecisionBulkResponse); i { + switch v := v.(*GetDecisionResponse); i { case 0: return &v.state case 1: @@ -1888,7 +1838,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetEntitlementsRequest); i { + switch v := v.(*GetDecisionBulkRequest); i { case 0: return &v.state case 1: @@ -1900,7 +1850,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EntityEntitlements); i { + switch v := v.(*GetDecisionBulkResponse); i { case 0: return &v.state case 1: @@ -1912,7 +1862,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Resource); i { + switch v := v.(*GetEntitlementsRequest); i { case 0: return &v.state case 1: @@ -2023,18 +1973,15 @@ func file_authorization_v2_authorization_proto_init() { file_authorization_v2_authorization_proto_msgTypes[1].OneofWrappers = []interface{}{ (*Entity_EmailAddress)(nil), (*Entity_UserName)(nil), - (*Entity_RemoteClaimsUrl)(nil), - (*Entity_Uuid)(nil), - (*Entity_Claims)(nil), (*Entity_Custom)(nil), (*Entity_ClientId)(nil), (*Entity_RegisteredResourceValueFqn)(nil), } - file_authorization_v2_authorization_proto_msgTypes[10].OneofWrappers = []interface{}{} - file_authorization_v2_authorization_proto_msgTypes[12].OneofWrappers = []interface{}{ + file_authorization_v2_authorization_proto_msgTypes[5].OneofWrappers = []interface{}{ (*Resource_AttributeValues_)(nil), (*Resource_RegisteredResourceValueFqn)(nil), } + file_authorization_v2_authorization_proto_msgTypes[12].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ diff --git a/service/authorization/v2/authorization.proto b/service/authorization/v2/authorization.proto index cded00c53d..2c3ef043bf 100644 --- a/service/authorization/v2/authorization.proto +++ b/service/authorization/v2/authorization.proto @@ -21,12 +21,9 @@ message Entity { // one of the entity options must be set string email_address = 2; string user_name = 3; - string remote_claims_url = 4; - string uuid = 5; - google.protobuf.Any claims = 6; - EntityCustom custom = 7; - string client_id = 8; - string registered_resource_value_fqn = 10; + EntityCustom custom = 4; + string client_id = 5; + string registered_resource_value_fqn = 6; } enum Category { CATEGORY_UNSPECIFIED = 0; @@ -48,13 +45,37 @@ message EntityChain { repeated Entity entities = 2; } -// Can the entity (PE or NPE) represented by each entity chain take the provided action on the set of resources +// Entitlements for a given entity, mapping each attribute value FQN to any entitled actions[] +message EntityEntitlements { + message ActionsList { + repeated policy.Action actions = 1; + } + + string ephemeral_id = 1; + map actions_per_attribute_value_fqn = 2; +} + +// Either a registered resource or a set of attribute values +message Resource { + // ephemeral id for tracking between request and response + string ephemeral_id = 1; + + message AttributeValues { + repeated string fqns = 1; + } + + oneof resource { + AttributeValues attribute_values = 2; + string registered_resource_value_fqn = 3; + } +} + +// Can the entity (PE or NPE) represented by each entity chain take the provided action on the each resource message DecisionRequest { EntityChain entity = 1; policy.Action action = 2; - Resource resource = 3; + repeated Resource resources = 3; } - message DecisionResponse { enum Decision { DECISION_UNSPECIFIED = 0; @@ -98,32 +119,6 @@ message GetEntitlementsRequest { // optional parameter to return a full list of entitlements - returns lower hierarchy attributes optional bool with_comprehensive_hierarchy = 3; } - -// Entitlements for a given entity, mapping each attribute value FQN to any entitled actions[] -message EntityEntitlements { - message ActionsList { - repeated policy.Action actions = 1; - } - - string entity_id = 1; - map actions_per_attribute_value_fqn = 2; -} - -// Either a registered resource or a set of attribute values -message Resource { - // ephemeral id for tracking between request and response - string ephemeral_id = 1; - - message AttributeValues { - repeated string fqns = 1; - } - - oneof resource { - AttributeValues attribute_values = 2; - string registered_resource_value_fqn = 3; - } -} - message GetEntitlementsResponse { repeated EntityEntitlements entitlements = 1; } From c25a26f87a6454aa8c52e48313b37e984e7655e7 Mon Sep 17 00:00:00 2001 From: jakedoublev Date: Wed, 30 Apr 2025 14:14:44 -0700 Subject: [PATCH 13/49] cleanup --- docs/grpc/index.html | 50 +- .../v2/authorization.swagger.json | 34 +- .../go/authorization/v2/authorization.pb.go | 836 ++++++++---------- service/authorization/v2/authorization.proto | 24 +- 4 files changed, 428 insertions(+), 516 deletions(-) diff --git a/docs/grpc/index.html b/docs/grpc/index.html index 202e5424b5..b766dbe8a1 100644 --- a/docs/grpc/index.html +++ b/docs/grpc/index.html @@ -423,10 +423,6 @@

      Table of Contents

      MEntityChain -
    • - MEntityCustom -
    • -
    • MEntityEntitlements
    • @@ -3690,7 +3686,7 @@

      authorization/v2/authorization.pro

      DecisionRequest

      -

      Can the entity (PE or NPE) represented by each entity chain take the provided action on the each resource

      +

      Can the entity (PE or NPE) represented by one entity chain take the provided action on each resource

      resourceresources Resourcerepeated

      remote_claims_urlstring

      uuidstring

      claimsgoogle.protobuf.Any

      custom EntityCustom
      entity_idephemeral_id string

      @@ -3807,17 +3803,17 @@

      Entity

      - - + + - + - + @@ -3842,7 +3838,7 @@

      Entity

      EntityChain

      -

      A set of related PE and NPE

      +

      A set of related PE and NPE (i.e. authenticating client and user)

      customEntityCustomclaimsgoogle.protobuf.Any

      used by ERS claims mode

      client_id string

      EntityCustom custom = 5;

      @@ -3872,30 +3868,6 @@

      EntityChain

      -

      EntityCustom

      -

      Entity type for custom entities beyond the standard types

      - - -
      - - - - - - - - - - - - - -
      FieldTypeLabelDescription
      extensiongoogle.protobuf.Any

      - - - - -

      EntityEntitlements

      Entitlements for a given entity, mapping each attribute value FQN to any entitled actions[]

      @@ -3910,7 +3882,7 @@

      EntityEntitlements

      ephemeral_id string -

      +

      ephemeral id for tracking between request and response

      @@ -4175,7 +4147,7 @@

      GetDecisionResponse

      GetEntitlementsRequest

      -

      +

      What can the entity do, broken down as permitted actions on attribute value FQNs

      @@ -4238,7 +4210,7 @@

      GetEntitlementsResponse

      Resource

      -

      Either a registered resource or a set of attribute values

      +

      Either a set of attribute values (such as those on a TDF) or a registered resource value

      @@ -4355,9 +4327,9 @@

      TokenDecisionRequest

      - + - + diff --git a/docs/openapi/authorization/v2/authorization.swagger.json b/docs/openapi/authorization/v2/authorization.swagger.json index 1604c8a94a..7c0a4d372a 100644 --- a/docs/openapi/authorization/v2/authorization.swagger.json +++ b/docs/openapi/authorization/v2/authorization.swagger.json @@ -67,7 +67,7 @@ } } }, - "title": "Can the entity (PE or NPE) represented by each entity chain take the provided action on the each resource" + "title": "Can the entity (PE or NPE) represented by one entity chain take the provided action on each resource" }, "authorizationv2DecisionResponse": { "type": "object", @@ -115,11 +115,13 @@ "userName": { "type": "string" }, - "custom": { - "$ref": "#/definitions/authorizationv2EntityCustom" + "claims": { + "$ref": "#/definitions/protobufAny", + "title": "used by ERS claims mode" }, "clientId": { - "type": "string" + "type": "string", + "title": "EntityCustom custom = 5;" }, "registeredResourceValueFqn": { "type": "string" @@ -154,22 +156,14 @@ } } }, - "title": "A set of related PE and NPE" - }, - "authorizationv2EntityCustom": { - "type": "object", - "properties": { - "extension": { - "$ref": "#/definitions/protobufAny" - } - }, - "title": "Entity type for custom entities beyond the standard types" + "title": "A set of related PE and NPE (i.e. authenticating client and user)" }, "authorizationv2EntityEntitlements": { "type": "object", "properties": { "ephemeralId": { - "type": "string" + "type": "string", + "title": "ephemeral id for tracking between request and response" }, "actionsPerAttributeValueFqn": { "type": "object", @@ -214,8 +208,12 @@ "action": { "$ref": "#/definitions/policyAction" }, - "resource": { - "$ref": "#/definitions/v2Resource" + "resources": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v2Resource" + } } }, "title": "Can the entity (PE or NPE) represented by this token take the provided action on the set of resources" @@ -351,7 +349,7 @@ "type": "string" } }, - "title": "Either a registered resource or a set of attribute values" + "title": "Either a set of attribute values (such as those on a TDF) or a registered resource value" } } } diff --git a/protocol/go/authorization/v2/authorization.pb.go b/protocol/go/authorization/v2/authorization.pb.go index f0c22b7d6c..35e222b0be 100644 --- a/protocol/go/authorization/v2/authorization.pb.go +++ b/protocol/go/authorization/v2/authorization.pb.go @@ -117,7 +117,7 @@ func (x DecisionResponse_Decision) Number() protoreflect.EnumNumber { // Deprecated: Use DecisionResponse_Decision.Descriptor instead. func (DecisionResponse_Decision) EnumDescriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{7, 0} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{6, 0} } type Token struct { @@ -191,7 +191,7 @@ type Entity struct { // // *Entity_EmailAddress // *Entity_UserName - // *Entity_Custom + // *Entity_Claims // *Entity_ClientId // *Entity_RegisteredResourceValueFqn EntityType isEntity_EntityType `protobuf_oneof:"entity_type"` @@ -258,9 +258,9 @@ func (x *Entity) GetUserName() string { return "" } -func (x *Entity) GetCustom() *EntityCustom { - if x, ok := x.GetEntityType().(*Entity_Custom); ok { - return x.Custom +func (x *Entity) GetClaims() *anypb.Any { + if x, ok := x.GetEntityType().(*Entity_Claims); ok { + return x.Claims } return nil } @@ -299,77 +299,31 @@ type Entity_UserName struct { UserName string `protobuf:"bytes,3,opt,name=user_name,json=userName,proto3,oneof"` } -type Entity_Custom struct { - Custom *EntityCustom `protobuf:"bytes,4,opt,name=custom,proto3,oneof"` +type Entity_Claims struct { + // used by ERS claims mode + Claims *anypb.Any `protobuf:"bytes,4,opt,name=claims,proto3,oneof"` } type Entity_ClientId struct { - ClientId string `protobuf:"bytes,5,opt,name=client_id,json=clientId,proto3,oneof"` + // EntityCustom custom = 5; + ClientId string `protobuf:"bytes,6,opt,name=client_id,json=clientId,proto3,oneof"` } type Entity_RegisteredResourceValueFqn struct { - RegisteredResourceValueFqn string `protobuf:"bytes,6,opt,name=registered_resource_value_fqn,json=registeredResourceValueFqn,proto3,oneof"` + RegisteredResourceValueFqn string `protobuf:"bytes,7,opt,name=registered_resource_value_fqn,json=registeredResourceValueFqn,proto3,oneof"` } func (*Entity_EmailAddress) isEntity_EntityType() {} func (*Entity_UserName) isEntity_EntityType() {} -func (*Entity_Custom) isEntity_EntityType() {} +func (*Entity_Claims) isEntity_EntityType() {} func (*Entity_ClientId) isEntity_EntityType() {} func (*Entity_RegisteredResourceValueFqn) isEntity_EntityType() {} -// Entity type for custom entities beyond the standard types -type EntityCustom struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Extension *anypb.Any `protobuf:"bytes,1,opt,name=extension,proto3" json:"extension,omitempty"` -} - -func (x *EntityCustom) Reset() { - *x = EntityCustom{} - if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *EntityCustom) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*EntityCustom) ProtoMessage() {} - -func (x *EntityCustom) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use EntityCustom.ProtoReflect.Descriptor instead. -func (*EntityCustom) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{2} -} - -func (x *EntityCustom) GetExtension() *anypb.Any { - if x != nil { - return x.Extension - } - return nil -} - -// A set of related PE and NPE +// A set of related PE and NPE (i.e. authenticating client and user) type EntityChain struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -383,7 +337,7 @@ type EntityChain struct { func (x *EntityChain) Reset() { *x = EntityChain{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[3] + mi := &file_authorization_v2_authorization_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -396,7 +350,7 @@ func (x *EntityChain) String() string { func (*EntityChain) ProtoMessage() {} func (x *EntityChain) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[3] + mi := &file_authorization_v2_authorization_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -409,7 +363,7 @@ func (x *EntityChain) ProtoReflect() protoreflect.Message { // Deprecated: Use EntityChain.ProtoReflect.Descriptor instead. func (*EntityChain) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{3} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{2} } func (x *EntityChain) GetEphemeralId() string { @@ -432,6 +386,7 @@ type EntityEntitlements struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // ephemeral id for tracking between request and response EphemeralId string `protobuf:"bytes,1,opt,name=ephemeral_id,json=ephemeralId,proto3" json:"ephemeral_id,omitempty"` ActionsPerAttributeValueFqn map[string]*EntityEntitlements_ActionsList `protobuf:"bytes,2,rep,name=actions_per_attribute_value_fqn,json=actionsPerAttributeValueFqn,proto3" json:"actions_per_attribute_value_fqn,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } @@ -439,7 +394,7 @@ type EntityEntitlements struct { func (x *EntityEntitlements) Reset() { *x = EntityEntitlements{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[4] + mi := &file_authorization_v2_authorization_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -452,7 +407,7 @@ func (x *EntityEntitlements) String() string { func (*EntityEntitlements) ProtoMessage() {} func (x *EntityEntitlements) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[4] + mi := &file_authorization_v2_authorization_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -465,7 +420,7 @@ func (x *EntityEntitlements) ProtoReflect() protoreflect.Message { // Deprecated: Use EntityEntitlements.ProtoReflect.Descriptor instead. func (*EntityEntitlements) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{4} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{3} } func (x *EntityEntitlements) GetEphemeralId() string { @@ -482,7 +437,7 @@ func (x *EntityEntitlements) GetActionsPerAttributeValueFqn() map[string]*Entity return nil } -// Either a registered resource or a set of attribute values +// Either a set of attribute values (such as those on a TDF) or a registered resource value type Resource struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -500,7 +455,7 @@ type Resource struct { func (x *Resource) Reset() { *x = Resource{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[5] + mi := &file_authorization_v2_authorization_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -513,7 +468,7 @@ func (x *Resource) String() string { func (*Resource) ProtoMessage() {} func (x *Resource) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[5] + mi := &file_authorization_v2_authorization_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -526,7 +481,7 @@ func (x *Resource) ProtoReflect() protoreflect.Message { // Deprecated: Use Resource.ProtoReflect.Descriptor instead. func (*Resource) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{5} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{4} } func (x *Resource) GetEphemeralId() string { @@ -573,7 +528,7 @@ func (*Resource_AttributeValues_) isResource_Resource() {} func (*Resource_RegisteredResourceValueFqn) isResource_Resource() {} -// Can the entity (PE or NPE) represented by each entity chain take the provided action on the each resource +// Can the entity (PE or NPE) represented by one entity chain take the provided action on each resource type DecisionRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -587,7 +542,7 @@ type DecisionRequest struct { func (x *DecisionRequest) Reset() { *x = DecisionRequest{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[6] + mi := &file_authorization_v2_authorization_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -600,7 +555,7 @@ func (x *DecisionRequest) String() string { func (*DecisionRequest) ProtoMessage() {} func (x *DecisionRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[6] + mi := &file_authorization_v2_authorization_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -613,7 +568,7 @@ func (x *DecisionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DecisionRequest.ProtoReflect.Descriptor instead. func (*DecisionRequest) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{6} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{5} } func (x *DecisionRequest) GetEntity() *EntityChain { @@ -655,7 +610,7 @@ type DecisionResponse struct { func (x *DecisionResponse) Reset() { *x = DecisionResponse{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[7] + mi := &file_authorization_v2_authorization_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -668,7 +623,7 @@ func (x *DecisionResponse) String() string { func (*DecisionResponse) ProtoMessage() {} func (x *DecisionResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[7] + mi := &file_authorization_v2_authorization_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -681,7 +636,7 @@ func (x *DecisionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DecisionResponse.ProtoReflect.Descriptor instead. func (*DecisionResponse) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{7} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{6} } func (x *DecisionResponse) GetEphemeralEntityChainId() string { @@ -723,7 +678,7 @@ type GetDecisionRequest struct { func (x *GetDecisionRequest) Reset() { *x = GetDecisionRequest{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[8] + mi := &file_authorization_v2_authorization_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -736,7 +691,7 @@ func (x *GetDecisionRequest) String() string { func (*GetDecisionRequest) ProtoMessage() {} func (x *GetDecisionRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[8] + mi := &file_authorization_v2_authorization_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -749,7 +704,7 @@ func (x *GetDecisionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDecisionRequest.ProtoReflect.Descriptor instead. func (*GetDecisionRequest) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{8} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{7} } func (x *GetDecisionRequest) GetDecisionRequest() *DecisionRequest { @@ -770,7 +725,7 @@ type GetDecisionResponse struct { func (x *GetDecisionResponse) Reset() { *x = GetDecisionResponse{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[9] + mi := &file_authorization_v2_authorization_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -783,7 +738,7 @@ func (x *GetDecisionResponse) String() string { func (*GetDecisionResponse) ProtoMessage() {} func (x *GetDecisionResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[9] + mi := &file_authorization_v2_authorization_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -796,7 +751,7 @@ func (x *GetDecisionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDecisionResponse.ProtoReflect.Descriptor instead. func (*GetDecisionResponse) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{9} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{8} } func (x *GetDecisionResponse) GetDecisionResponse() *DecisionResponse { @@ -818,7 +773,7 @@ type GetDecisionBulkRequest struct { func (x *GetDecisionBulkRequest) Reset() { *x = GetDecisionBulkRequest{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[10] + mi := &file_authorization_v2_authorization_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -831,7 +786,7 @@ func (x *GetDecisionBulkRequest) String() string { func (*GetDecisionBulkRequest) ProtoMessage() {} func (x *GetDecisionBulkRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[10] + mi := &file_authorization_v2_authorization_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -844,7 +799,7 @@ func (x *GetDecisionBulkRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDecisionBulkRequest.ProtoReflect.Descriptor instead. func (*GetDecisionBulkRequest) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{10} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{9} } func (x *GetDecisionBulkRequest) GetDecisionRequests() []*DecisionRequest { @@ -865,7 +820,7 @@ type GetDecisionBulkResponse struct { func (x *GetDecisionBulkResponse) Reset() { *x = GetDecisionBulkResponse{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[11] + mi := &file_authorization_v2_authorization_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -878,7 +833,7 @@ func (x *GetDecisionBulkResponse) String() string { func (*GetDecisionBulkResponse) ProtoMessage() {} func (x *GetDecisionBulkResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[11] + mi := &file_authorization_v2_authorization_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -891,7 +846,7 @@ func (x *GetDecisionBulkResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDecisionBulkResponse.ProtoReflect.Descriptor instead. func (*GetDecisionBulkResponse) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{11} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{10} } func (x *GetDecisionBulkResponse) GetDecisionResponses() []*DecisionResponse { @@ -901,6 +856,7 @@ func (x *GetDecisionBulkResponse) GetDecisionResponses() []*DecisionResponse { return nil } +// What can the entity do, broken down as permitted actions on attribute value FQNs type GetEntitlementsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -918,7 +874,7 @@ type GetEntitlementsRequest struct { func (x *GetEntitlementsRequest) Reset() { *x = GetEntitlementsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[12] + mi := &file_authorization_v2_authorization_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -931,7 +887,7 @@ func (x *GetEntitlementsRequest) String() string { func (*GetEntitlementsRequest) ProtoMessage() {} func (x *GetEntitlementsRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[12] + mi := &file_authorization_v2_authorization_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -944,7 +900,7 @@ func (x *GetEntitlementsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetEntitlementsRequest.ProtoReflect.Descriptor instead. func (*GetEntitlementsRequest) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{12} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{11} } func (x *GetEntitlementsRequest) GetEntities() []*Entity { @@ -979,7 +935,7 @@ type GetEntitlementsResponse struct { func (x *GetEntitlementsResponse) Reset() { *x = GetEntitlementsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[13] + mi := &file_authorization_v2_authorization_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -992,7 +948,7 @@ func (x *GetEntitlementsResponse) String() string { func (*GetEntitlementsResponse) ProtoMessage() {} func (x *GetEntitlementsResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[13] + mi := &file_authorization_v2_authorization_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1005,7 +961,7 @@ func (x *GetEntitlementsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetEntitlementsResponse.ProtoReflect.Descriptor instead. func (*GetEntitlementsResponse) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{13} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{12} } func (x *GetEntitlementsResponse) GetEntitlements() []*EntityEntitlements { @@ -1021,15 +977,15 @@ type TokenDecisionRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Token *Token `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` - Action *policy.Action `protobuf:"bytes,2,opt,name=action,proto3" json:"action,omitempty"` - Resource *Resource `protobuf:"bytes,3,opt,name=resource,proto3" json:"resource,omitempty"` + Token *Token `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` + Action *policy.Action `protobuf:"bytes,2,opt,name=action,proto3" json:"action,omitempty"` + Resources []*Resource `protobuf:"bytes,3,rep,name=resources,proto3" json:"resources,omitempty"` } func (x *TokenDecisionRequest) Reset() { *x = TokenDecisionRequest{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[14] + mi := &file_authorization_v2_authorization_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1042,7 +998,7 @@ func (x *TokenDecisionRequest) String() string { func (*TokenDecisionRequest) ProtoMessage() {} func (x *TokenDecisionRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[14] + mi := &file_authorization_v2_authorization_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1055,7 +1011,7 @@ func (x *TokenDecisionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TokenDecisionRequest.ProtoReflect.Descriptor instead. func (*TokenDecisionRequest) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{14} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{13} } func (x *TokenDecisionRequest) GetToken() *Token { @@ -1072,9 +1028,9 @@ func (x *TokenDecisionRequest) GetAction() *policy.Action { return nil } -func (x *TokenDecisionRequest) GetResource() *Resource { +func (x *TokenDecisionRequest) GetResources() []*Resource { if x != nil { - return x.Resource + return x.Resources } return nil } @@ -1090,7 +1046,7 @@ type GetDecisionByTokenRequest struct { func (x *GetDecisionByTokenRequest) Reset() { *x = GetDecisionByTokenRequest{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[15] + mi := &file_authorization_v2_authorization_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1103,7 +1059,7 @@ func (x *GetDecisionByTokenRequest) String() string { func (*GetDecisionByTokenRequest) ProtoMessage() {} func (x *GetDecisionByTokenRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[15] + mi := &file_authorization_v2_authorization_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1116,7 +1072,7 @@ func (x *GetDecisionByTokenRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDecisionByTokenRequest.ProtoReflect.Descriptor instead. func (*GetDecisionByTokenRequest) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{15} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{14} } func (x *GetDecisionByTokenRequest) GetDecisionRequest() *TokenDecisionRequest { @@ -1137,7 +1093,7 @@ type GetDecisionByTokenResponse struct { func (x *GetDecisionByTokenResponse) Reset() { *x = GetDecisionByTokenResponse{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[16] + mi := &file_authorization_v2_authorization_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1150,7 +1106,7 @@ func (x *GetDecisionByTokenResponse) String() string { func (*GetDecisionByTokenResponse) ProtoMessage() {} func (x *GetDecisionByTokenResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[16] + mi := &file_authorization_v2_authorization_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1163,7 +1119,7 @@ func (x *GetDecisionByTokenResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDecisionByTokenResponse.ProtoReflect.Descriptor instead. func (*GetDecisionByTokenResponse) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{16} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{15} } func (x *GetDecisionByTokenResponse) GetDecisionResponse() *DecisionResponse { @@ -1185,7 +1141,7 @@ type GetDecisionBulkByTokenRequest struct { func (x *GetDecisionBulkByTokenRequest) Reset() { *x = GetDecisionBulkByTokenRequest{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[17] + mi := &file_authorization_v2_authorization_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1198,7 +1154,7 @@ func (x *GetDecisionBulkByTokenRequest) String() string { func (*GetDecisionBulkByTokenRequest) ProtoMessage() {} func (x *GetDecisionBulkByTokenRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[17] + mi := &file_authorization_v2_authorization_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1211,7 +1167,7 @@ func (x *GetDecisionBulkByTokenRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDecisionBulkByTokenRequest.ProtoReflect.Descriptor instead. func (*GetDecisionBulkByTokenRequest) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{17} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{16} } func (x *GetDecisionBulkByTokenRequest) GetDecisionRequests() []*TokenDecisionRequest { @@ -1232,7 +1188,7 @@ type GetDecisionBulkByTokenResponse struct { func (x *GetDecisionBulkByTokenResponse) Reset() { *x = GetDecisionBulkByTokenResponse{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[18] + mi := &file_authorization_v2_authorization_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1245,7 +1201,7 @@ func (x *GetDecisionBulkByTokenResponse) String() string { func (*GetDecisionBulkByTokenResponse) ProtoMessage() {} func (x *GetDecisionBulkByTokenResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[18] + mi := &file_authorization_v2_authorization_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1258,7 +1214,7 @@ func (x *GetDecisionBulkByTokenResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDecisionBulkByTokenResponse.ProtoReflect.Descriptor instead. func (*GetDecisionBulkByTokenResponse) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{18} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{17} } func (x *GetDecisionBulkByTokenResponse) GetDecisionResponses() []*DecisionResponse { @@ -1279,7 +1235,7 @@ type EntityEntitlements_ActionsList struct { func (x *EntityEntitlements_ActionsList) Reset() { *x = EntityEntitlements_ActionsList{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[19] + mi := &file_authorization_v2_authorization_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1292,7 +1248,7 @@ func (x *EntityEntitlements_ActionsList) String() string { func (*EntityEntitlements_ActionsList) ProtoMessage() {} func (x *EntityEntitlements_ActionsList) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[19] + mi := &file_authorization_v2_authorization_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1305,7 +1261,7 @@ func (x *EntityEntitlements_ActionsList) ProtoReflect() protoreflect.Message { // Deprecated: Use EntityEntitlements_ActionsList.ProtoReflect.Descriptor instead. func (*EntityEntitlements_ActionsList) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{4, 0} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{3, 0} } func (x *EntityEntitlements_ActionsList) GetActions() []*policy.Action { @@ -1326,7 +1282,7 @@ type Resource_AttributeValues struct { func (x *Resource_AttributeValues) Reset() { *x = Resource_AttributeValues{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[21] + mi := &file_authorization_v2_authorization_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1339,7 +1295,7 @@ func (x *Resource_AttributeValues) String() string { func (*Resource_AttributeValues) ProtoMessage() {} func (x *Resource_AttributeValues) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[21] + mi := &file_authorization_v2_authorization_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1352,7 +1308,7 @@ func (x *Resource_AttributeValues) ProtoReflect() protoreflect.Message { // Deprecated: Use Resource_AttributeValues.ProtoReflect.Descriptor instead. func (*Resource_AttributeValues) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{5, 0} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{4, 0} } func (x *Resource_AttributeValues) GetFqns() []string { @@ -1375,253 +1331,249 @@ var file_authorization_v2_authorization_proto_rawDesc = []byte{ 0x65, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6a, 0x77, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6a, 0x77, 0x74, 0x22, 0xb3, 0x03, 0x0a, 0x06, 0x45, 0x6e, 0x74, 0x69, + 0x28, 0x09, 0x52, 0x03, 0x6a, 0x77, 0x74, 0x22, 0xa9, 0x03, 0x0a, 0x06, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0d, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0c, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1d, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, - 0x00, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x06, 0x63, - 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x00, 0x52, 0x06, 0x63, - 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x1d, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x1d, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, - 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x1a, 0x72, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x12, 0x3d, 0x0a, 0x08, 0x63, 0x61, 0x74, - 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x08, - 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x22, 0x54, 0x0a, 0x08, 0x43, 0x61, 0x74, 0x65, - 0x67, 0x6f, 0x72, 0x79, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, - 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x14, - 0x0a, 0x10, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x53, 0x55, 0x42, 0x4a, 0x45, - 0x43, 0x54, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, - 0x5f, 0x45, 0x4e, 0x56, 0x49, 0x52, 0x4f, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x42, 0x0d, - 0x0a, 0x0b, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x42, 0x0a, - 0x0c, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x32, 0x0a, - 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, - 0x6e, 0x22, 0x66, 0x0a, 0x0b, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, - 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, - 0x6c, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, - 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0x81, 0x03, 0x0a, 0x12, 0x45, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, - 0x6c, 0x49, 0x64, 0x12, 0x8b, 0x01, 0x0a, 0x1f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, - 0x70, 0x65, 0x72, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x1b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, + 0x00, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x06, 0x63, + 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, + 0x79, 0x48, 0x00, 0x52, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x12, 0x1d, 0x0a, 0x09, 0x63, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, + 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x1d, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x09, 0x48, 0x00, 0x52, 0x1a, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x12, + 0x3d, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x21, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x43, 0x61, 0x74, 0x65, + 0x67, 0x6f, 0x72, 0x79, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x22, 0x54, + 0x0a, 0x08, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x41, + 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, + 0x45, 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, + 0x5f, 0x53, 0x55, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x41, + 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x45, 0x4e, 0x56, 0x49, 0x52, 0x4f, 0x4e, 0x4d, 0x45, + 0x4e, 0x54, 0x10, 0x02, 0x42, 0x0d, 0x0a, 0x0b, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x22, 0x66, 0x0a, 0x0b, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, + 0x69, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, + 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0x81, 0x03, 0x0a, 0x12, + 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, + 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x8b, 0x01, 0x0a, 0x1f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x45, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, - 0x6e, 0x1a, 0x37, 0x0a, 0x0b, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, 0x74, - 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x1b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, + 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x46, 0x71, 0x6e, 0x1a, 0x37, 0x0a, 0x0b, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, + 0x73, 0x74, 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x80, 0x01, 0x0a, + 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x46, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, + 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0xfe, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, + 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, + 0x57, 0x0a, 0x10, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x73, 0x48, 0x00, 0x52, 0x0f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x43, 0x0a, 0x1d, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, + 0x00, 0x52, 0x1a, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x1a, 0x25, 0x0a, + 0x0f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, + 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, + 0x66, 0x71, 0x6e, 0x73, 0x42, 0x0a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x22, 0xaa, 0x01, 0x0a, 0x0f, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x35, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, + 0x61, 0x69, 0x6e, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x26, 0x0a, 0x06, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x22, 0xc0, 0x02, + 0x0a, 0x10, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, + 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x32, 0x0a, + 0x15, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x65, 0x70, + 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, + 0x64, 0x12, 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x80, 0x01, 0x0a, 0x20, 0x41, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x46, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x30, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xfe, 0x01, - 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, - 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x57, 0x0a, - 0x10, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x73, 0x48, 0x00, 0x52, 0x0f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x43, 0x0a, 0x1d, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x65, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, - 0x1a, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x1a, 0x25, 0x0a, 0x0f, 0x41, - 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x12, - 0x0a, 0x04, 0x66, 0x71, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, - 0x6e, 0x73, 0x42, 0x0a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0xaa, - 0x01, 0x0a, 0x0f, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x35, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, - 0x6e, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x38, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x22, 0xc0, 0x02, 0x0a, 0x10, - 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x39, 0x0a, 0x19, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x16, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x45, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x15, 0x65, - 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x65, 0x70, 0x68, 0x65, - 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, - 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x47, 0x0a, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x22, 0x4c, 0x0a, 0x08, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x14, - 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, - 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, - 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4e, 0x59, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x45, 0x43, - 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x22, 0x62, - 0x0a, 0x12, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, - 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x52, 0x0f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x22, 0x66, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x11, 0x64, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x68, 0x0a, 0x16, 0x47, 0x65, - 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x4e, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x21, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x73, 0x22, 0x6c, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x51, 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, + 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x47, 0x0a, 0x08, 0x64, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, - 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x73, 0x22, 0xf7, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, - 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x18, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x69, 0x65, 0x73, 0x12, 0x35, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x00, - 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x88, 0x01, 0x01, 0x12, 0x45, 0x0a, 0x1c, 0x77, 0x69, - 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, - 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, - 0x48, 0x01, 0x52, 0x1a, 0x77, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, - 0x6e, 0x73, 0x69, 0x76, 0x65, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x88, 0x01, - 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x42, 0x1f, 0x0a, 0x1d, 0x5f, - 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, - 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x22, 0x63, 0x0a, 0x17, - 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x22, 0xa5, 0x01, 0x0a, 0x14, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x05, 0x74, 0x6f, - 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x36, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, - 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x6e, 0x0a, 0x19, 0x47, 0x65, 0x74, - 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x51, 0x0a, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, + 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x22, 0x4c, 0x0a, 0x08, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, + 0x0a, 0x14, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, + 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x45, 0x43, 0x49, + 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4e, 0x59, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x44, + 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x54, 0x10, 0x02, + 0x22, 0x62, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x26, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x6d, 0x0a, 0x1a, 0x47, 0x65, 0x74, - 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x74, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x44, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x42, 0x79, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x53, 0x0a, 0x11, 0x64, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x32, 0x21, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x52, 0x0f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x22, 0x66, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x11, 0x64, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x68, 0x0a, 0x16, + 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4e, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, 0x6c, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x51, 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, + 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x73, 0x22, 0xf7, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, + 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x34, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x35, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x48, 0x00, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x88, 0x01, 0x01, 0x12, 0x45, 0x0a, 0x1c, + 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, + 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x08, 0x48, 0x01, 0x52, 0x1a, 0x77, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, + 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, + 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x42, 0x1f, 0x0a, + 0x1d, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, + 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x22, 0x63, + 0x0a, 0x17, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0c, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x22, 0xa7, 0x01, 0x0a, 0x14, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x05, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x26, 0x0a, 0x06, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x22, 0x6e, 0x0a, + 0x19, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x51, 0x0a, 0x10, 0x64, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x10, 0x64, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, 0x73, - 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, - 0x6b, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x51, 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, - 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x73, 0x32, 0xba, 0x04, 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5c, 0x0a, 0x0b, - 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, - 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0f, 0x64, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x6d, 0x0a, + 0x1a, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x11, 0x64, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x74, 0x0a, 0x1d, + 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x42, + 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x53, 0x0a, + 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x73, 0x22, 0x73, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x32, 0xba, 0x04, 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x12, 0x5c, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, + 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, + 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, + 0x6b, 0x12, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, + 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x71, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x44, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2b, + 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, + 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7d, 0x0a, 0x16, 0x47, + 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x42, 0x79, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2f, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x0f, 0x47, 0x65, - 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x12, 0x28, 0x2e, + 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, + 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x71, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2b, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, - 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7d, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x44, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x12, 0x2f, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x42, 0x75, 0x6c, 0x6b, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, - 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x42, 0xd5, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x42, 0x12, 0x41, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, - 0x48, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, - 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, 0x6f, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x3b, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x32, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, - 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x56, 0x32, 0xca, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x1c, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, + 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x42, 0xd5, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x42, 0x12, 0x41, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x50, 0x01, 0x5a, 0x48, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, 0x6f, 0x2f, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x3b, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x32, 0xa2, 0x02, 0x03, + 0x41, 0x58, 0x58, 0xaa, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x1c, 0x41, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x41, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1637,78 +1589,76 @@ func file_authorization_v2_authorization_proto_rawDescGZIP() []byte { } var file_authorization_v2_authorization_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_authorization_v2_authorization_proto_msgTypes = make([]protoimpl.MessageInfo, 22) +var file_authorization_v2_authorization_proto_msgTypes = make([]protoimpl.MessageInfo, 21) var file_authorization_v2_authorization_proto_goTypes = []interface{}{ (Entity_Category)(0), // 0: authorization.v2.Entity.Category (DecisionResponse_Decision)(0), // 1: authorization.v2.DecisionResponse.Decision (*Token)(nil), // 2: authorization.v2.Token (*Entity)(nil), // 3: authorization.v2.Entity - (*EntityCustom)(nil), // 4: authorization.v2.EntityCustom - (*EntityChain)(nil), // 5: authorization.v2.EntityChain - (*EntityEntitlements)(nil), // 6: authorization.v2.EntityEntitlements - (*Resource)(nil), // 7: authorization.v2.Resource - (*DecisionRequest)(nil), // 8: authorization.v2.DecisionRequest - (*DecisionResponse)(nil), // 9: authorization.v2.DecisionResponse - (*GetDecisionRequest)(nil), // 10: authorization.v2.GetDecisionRequest - (*GetDecisionResponse)(nil), // 11: authorization.v2.GetDecisionResponse - (*GetDecisionBulkRequest)(nil), // 12: authorization.v2.GetDecisionBulkRequest - (*GetDecisionBulkResponse)(nil), // 13: authorization.v2.GetDecisionBulkResponse - (*GetEntitlementsRequest)(nil), // 14: authorization.v2.GetEntitlementsRequest - (*GetEntitlementsResponse)(nil), // 15: authorization.v2.GetEntitlementsResponse - (*TokenDecisionRequest)(nil), // 16: authorization.v2.TokenDecisionRequest - (*GetDecisionByTokenRequest)(nil), // 17: authorization.v2.GetDecisionByTokenRequest - (*GetDecisionByTokenResponse)(nil), // 18: authorization.v2.GetDecisionByTokenResponse - (*GetDecisionBulkByTokenRequest)(nil), // 19: authorization.v2.GetDecisionBulkByTokenRequest - (*GetDecisionBulkByTokenResponse)(nil), // 20: authorization.v2.GetDecisionBulkByTokenResponse - (*EntityEntitlements_ActionsList)(nil), // 21: authorization.v2.EntityEntitlements.ActionsList - nil, // 22: authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry - (*Resource_AttributeValues)(nil), // 23: authorization.v2.Resource.AttributeValues - (*anypb.Any)(nil), // 24: google.protobuf.Any - (*policy.Action)(nil), // 25: policy.Action + (*EntityChain)(nil), // 4: authorization.v2.EntityChain + (*EntityEntitlements)(nil), // 5: authorization.v2.EntityEntitlements + (*Resource)(nil), // 6: authorization.v2.Resource + (*DecisionRequest)(nil), // 7: authorization.v2.DecisionRequest + (*DecisionResponse)(nil), // 8: authorization.v2.DecisionResponse + (*GetDecisionRequest)(nil), // 9: authorization.v2.GetDecisionRequest + (*GetDecisionResponse)(nil), // 10: authorization.v2.GetDecisionResponse + (*GetDecisionBulkRequest)(nil), // 11: authorization.v2.GetDecisionBulkRequest + (*GetDecisionBulkResponse)(nil), // 12: authorization.v2.GetDecisionBulkResponse + (*GetEntitlementsRequest)(nil), // 13: authorization.v2.GetEntitlementsRequest + (*GetEntitlementsResponse)(nil), // 14: authorization.v2.GetEntitlementsResponse + (*TokenDecisionRequest)(nil), // 15: authorization.v2.TokenDecisionRequest + (*GetDecisionByTokenRequest)(nil), // 16: authorization.v2.GetDecisionByTokenRequest + (*GetDecisionByTokenResponse)(nil), // 17: authorization.v2.GetDecisionByTokenResponse + (*GetDecisionBulkByTokenRequest)(nil), // 18: authorization.v2.GetDecisionBulkByTokenRequest + (*GetDecisionBulkByTokenResponse)(nil), // 19: authorization.v2.GetDecisionBulkByTokenResponse + (*EntityEntitlements_ActionsList)(nil), // 20: authorization.v2.EntityEntitlements.ActionsList + nil, // 21: authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry + (*Resource_AttributeValues)(nil), // 22: authorization.v2.Resource.AttributeValues + (*anypb.Any)(nil), // 23: google.protobuf.Any + (*policy.Action)(nil), // 24: policy.Action } var file_authorization_v2_authorization_proto_depIdxs = []int32{ - 4, // 0: authorization.v2.Entity.custom:type_name -> authorization.v2.EntityCustom + 23, // 0: authorization.v2.Entity.claims:type_name -> google.protobuf.Any 0, // 1: authorization.v2.Entity.category:type_name -> authorization.v2.Entity.Category - 24, // 2: authorization.v2.EntityCustom.extension:type_name -> google.protobuf.Any - 3, // 3: authorization.v2.EntityChain.entities:type_name -> authorization.v2.Entity - 22, // 4: authorization.v2.EntityEntitlements.actions_per_attribute_value_fqn:type_name -> authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry - 23, // 5: authorization.v2.Resource.attribute_values:type_name -> authorization.v2.Resource.AttributeValues - 5, // 6: authorization.v2.DecisionRequest.entity:type_name -> authorization.v2.EntityChain - 25, // 7: authorization.v2.DecisionRequest.action:type_name -> policy.Action - 7, // 8: authorization.v2.DecisionRequest.resources:type_name -> authorization.v2.Resource - 25, // 9: authorization.v2.DecisionResponse.action:type_name -> policy.Action - 1, // 10: authorization.v2.DecisionResponse.decision:type_name -> authorization.v2.DecisionResponse.Decision - 8, // 11: authorization.v2.GetDecisionRequest.decision_request:type_name -> authorization.v2.DecisionRequest - 9, // 12: authorization.v2.GetDecisionResponse.decision_response:type_name -> authorization.v2.DecisionResponse - 8, // 13: authorization.v2.GetDecisionBulkRequest.decision_requests:type_name -> authorization.v2.DecisionRequest - 9, // 14: authorization.v2.GetDecisionBulkResponse.decision_responses:type_name -> authorization.v2.DecisionResponse - 3, // 15: authorization.v2.GetEntitlementsRequest.entities:type_name -> authorization.v2.Entity - 7, // 16: authorization.v2.GetEntitlementsRequest.scope:type_name -> authorization.v2.Resource - 6, // 17: authorization.v2.GetEntitlementsResponse.entitlements:type_name -> authorization.v2.EntityEntitlements - 2, // 18: authorization.v2.TokenDecisionRequest.token:type_name -> authorization.v2.Token - 25, // 19: authorization.v2.TokenDecisionRequest.action:type_name -> policy.Action - 7, // 20: authorization.v2.TokenDecisionRequest.resource:type_name -> authorization.v2.Resource - 16, // 21: authorization.v2.GetDecisionByTokenRequest.decision_request:type_name -> authorization.v2.TokenDecisionRequest - 9, // 22: authorization.v2.GetDecisionByTokenResponse.decision_response:type_name -> authorization.v2.DecisionResponse - 16, // 23: authorization.v2.GetDecisionBulkByTokenRequest.decision_requests:type_name -> authorization.v2.TokenDecisionRequest - 9, // 24: authorization.v2.GetDecisionBulkByTokenResponse.decision_responses:type_name -> authorization.v2.DecisionResponse - 25, // 25: authorization.v2.EntityEntitlements.ActionsList.actions:type_name -> policy.Action - 21, // 26: authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry.value:type_name -> authorization.v2.EntityEntitlements.ActionsList - 10, // 27: authorization.v2.AuthorizationService.GetDecision:input_type -> authorization.v2.GetDecisionRequest - 12, // 28: authorization.v2.AuthorizationService.GetDecisionBulk:input_type -> authorization.v2.GetDecisionBulkRequest - 17, // 29: authorization.v2.AuthorizationService.GetDecisionByToken:input_type -> authorization.v2.GetDecisionByTokenRequest - 19, // 30: authorization.v2.AuthorizationService.GetDecisionBulkByToken:input_type -> authorization.v2.GetDecisionBulkByTokenRequest - 14, // 31: authorization.v2.AuthorizationService.GetEntitlements:input_type -> authorization.v2.GetEntitlementsRequest - 11, // 32: authorization.v2.AuthorizationService.GetDecision:output_type -> authorization.v2.GetDecisionResponse - 13, // 33: authorization.v2.AuthorizationService.GetDecisionBulk:output_type -> authorization.v2.GetDecisionBulkResponse - 18, // 34: authorization.v2.AuthorizationService.GetDecisionByToken:output_type -> authorization.v2.GetDecisionByTokenResponse - 20, // 35: authorization.v2.AuthorizationService.GetDecisionBulkByToken:output_type -> authorization.v2.GetDecisionBulkByTokenResponse - 15, // 36: authorization.v2.AuthorizationService.GetEntitlements:output_type -> authorization.v2.GetEntitlementsResponse - 32, // [32:37] is the sub-list for method output_type - 27, // [27:32] is the sub-list for method input_type - 27, // [27:27] is the sub-list for extension type_name - 27, // [27:27] is the sub-list for extension extendee - 0, // [0:27] is the sub-list for field type_name + 3, // 2: authorization.v2.EntityChain.entities:type_name -> authorization.v2.Entity + 21, // 3: authorization.v2.EntityEntitlements.actions_per_attribute_value_fqn:type_name -> authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry + 22, // 4: authorization.v2.Resource.attribute_values:type_name -> authorization.v2.Resource.AttributeValues + 4, // 5: authorization.v2.DecisionRequest.entity:type_name -> authorization.v2.EntityChain + 24, // 6: authorization.v2.DecisionRequest.action:type_name -> policy.Action + 6, // 7: authorization.v2.DecisionRequest.resources:type_name -> authorization.v2.Resource + 24, // 8: authorization.v2.DecisionResponse.action:type_name -> policy.Action + 1, // 9: authorization.v2.DecisionResponse.decision:type_name -> authorization.v2.DecisionResponse.Decision + 7, // 10: authorization.v2.GetDecisionRequest.decision_request:type_name -> authorization.v2.DecisionRequest + 8, // 11: authorization.v2.GetDecisionResponse.decision_response:type_name -> authorization.v2.DecisionResponse + 7, // 12: authorization.v2.GetDecisionBulkRequest.decision_requests:type_name -> authorization.v2.DecisionRequest + 8, // 13: authorization.v2.GetDecisionBulkResponse.decision_responses:type_name -> authorization.v2.DecisionResponse + 3, // 14: authorization.v2.GetEntitlementsRequest.entities:type_name -> authorization.v2.Entity + 6, // 15: authorization.v2.GetEntitlementsRequest.scope:type_name -> authorization.v2.Resource + 5, // 16: authorization.v2.GetEntitlementsResponse.entitlements:type_name -> authorization.v2.EntityEntitlements + 2, // 17: authorization.v2.TokenDecisionRequest.token:type_name -> authorization.v2.Token + 24, // 18: authorization.v2.TokenDecisionRequest.action:type_name -> policy.Action + 6, // 19: authorization.v2.TokenDecisionRequest.resources:type_name -> authorization.v2.Resource + 15, // 20: authorization.v2.GetDecisionByTokenRequest.decision_request:type_name -> authorization.v2.TokenDecisionRequest + 8, // 21: authorization.v2.GetDecisionByTokenResponse.decision_response:type_name -> authorization.v2.DecisionResponse + 15, // 22: authorization.v2.GetDecisionBulkByTokenRequest.decision_requests:type_name -> authorization.v2.TokenDecisionRequest + 8, // 23: authorization.v2.GetDecisionBulkByTokenResponse.decision_responses:type_name -> authorization.v2.DecisionResponse + 24, // 24: authorization.v2.EntityEntitlements.ActionsList.actions:type_name -> policy.Action + 20, // 25: authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry.value:type_name -> authorization.v2.EntityEntitlements.ActionsList + 9, // 26: authorization.v2.AuthorizationService.GetDecision:input_type -> authorization.v2.GetDecisionRequest + 11, // 27: authorization.v2.AuthorizationService.GetDecisionBulk:input_type -> authorization.v2.GetDecisionBulkRequest + 16, // 28: authorization.v2.AuthorizationService.GetDecisionByToken:input_type -> authorization.v2.GetDecisionByTokenRequest + 18, // 29: authorization.v2.AuthorizationService.GetDecisionBulkByToken:input_type -> authorization.v2.GetDecisionBulkByTokenRequest + 13, // 30: authorization.v2.AuthorizationService.GetEntitlements:input_type -> authorization.v2.GetEntitlementsRequest + 10, // 31: authorization.v2.AuthorizationService.GetDecision:output_type -> authorization.v2.GetDecisionResponse + 12, // 32: authorization.v2.AuthorizationService.GetDecisionBulk:output_type -> authorization.v2.GetDecisionBulkResponse + 17, // 33: authorization.v2.AuthorizationService.GetDecisionByToken:output_type -> authorization.v2.GetDecisionByTokenResponse + 19, // 34: authorization.v2.AuthorizationService.GetDecisionBulkByToken:output_type -> authorization.v2.GetDecisionBulkByTokenResponse + 14, // 35: authorization.v2.AuthorizationService.GetEntitlements:output_type -> authorization.v2.GetEntitlementsResponse + 31, // [31:36] is the sub-list for method output_type + 26, // [26:31] is the sub-list for method input_type + 26, // [26:26] is the sub-list for extension type_name + 26, // [26:26] is the sub-list for extension extendee + 0, // [0:26] is the sub-list for field type_name } func init() { file_authorization_v2_authorization_proto_init() } @@ -1742,18 +1692,6 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EntityCustom); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_authorization_v2_authorization_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EntityChain); i { case 0: return &v.state @@ -1765,7 +1703,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EntityEntitlements); i { case 0: return &v.state @@ -1777,7 +1715,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Resource); i { case 0: return &v.state @@ -1789,7 +1727,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DecisionRequest); i { case 0: return &v.state @@ -1801,7 +1739,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DecisionResponse); i { case 0: return &v.state @@ -1813,7 +1751,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetDecisionRequest); i { case 0: return &v.state @@ -1825,7 +1763,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetDecisionResponse); i { case 0: return &v.state @@ -1837,7 +1775,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetDecisionBulkRequest); i { case 0: return &v.state @@ -1849,7 +1787,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetDecisionBulkResponse); i { case 0: return &v.state @@ -1861,7 +1799,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetEntitlementsRequest); i { case 0: return &v.state @@ -1873,7 +1811,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetEntitlementsResponse); i { case 0: return &v.state @@ -1885,7 +1823,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TokenDecisionRequest); i { case 0: return &v.state @@ -1897,7 +1835,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetDecisionByTokenRequest); i { case 0: return &v.state @@ -1909,7 +1847,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetDecisionByTokenResponse); i { case 0: return &v.state @@ -1921,7 +1859,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetDecisionBulkByTokenRequest); i { case 0: return &v.state @@ -1933,7 +1871,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetDecisionBulkByTokenResponse); i { case 0: return &v.state @@ -1945,7 +1883,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EntityEntitlements_ActionsList); i { case 0: return &v.state @@ -1957,7 +1895,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Resource_AttributeValues); i { case 0: return &v.state @@ -1973,22 +1911,22 @@ func file_authorization_v2_authorization_proto_init() { file_authorization_v2_authorization_proto_msgTypes[1].OneofWrappers = []interface{}{ (*Entity_EmailAddress)(nil), (*Entity_UserName)(nil), - (*Entity_Custom)(nil), + (*Entity_Claims)(nil), (*Entity_ClientId)(nil), (*Entity_RegisteredResourceValueFqn)(nil), } - file_authorization_v2_authorization_proto_msgTypes[5].OneofWrappers = []interface{}{ + file_authorization_v2_authorization_proto_msgTypes[4].OneofWrappers = []interface{}{ (*Resource_AttributeValues_)(nil), (*Resource_RegisteredResourceValueFqn)(nil), } - file_authorization_v2_authorization_proto_msgTypes[12].OneofWrappers = []interface{}{} + file_authorization_v2_authorization_proto_msgTypes[11].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_authorization_v2_authorization_proto_rawDesc, NumEnums: 2, - NumMessages: 22, + NumMessages: 21, NumExtensions: 0, NumServices: 1, }, diff --git a/service/authorization/v2/authorization.proto b/service/authorization/v2/authorization.proto index 2c3ef043bf..b42073c769 100644 --- a/service/authorization/v2/authorization.proto +++ b/service/authorization/v2/authorization.proto @@ -21,9 +21,11 @@ message Entity { // one of the entity options must be set string email_address = 2; string user_name = 3; - EntityCustom custom = 4; - string client_id = 5; - string registered_resource_value_fqn = 6; + // used by ERS claims mode + google.protobuf.Any claims = 4; + // EntityCustom custom = 5; + string client_id = 6; + string registered_resource_value_fqn = 7; } enum Category { CATEGORY_UNSPECIFIED = 0; @@ -34,11 +36,11 @@ message Entity { } // Entity type for custom entities beyond the standard types -message EntityCustom { - google.protobuf.Any extension = 1; -} +// message EntityCustom { +// google.protobuf.Any extension = 1; +// } -// A set of related PE and NPE +// A set of related PE and NPE (i.e. authenticating client and user) message EntityChain { // ephemeral id for tracking between request and response string ephemeral_id = 1; @@ -51,11 +53,12 @@ message EntityEntitlements { repeated policy.Action actions = 1; } + // ephemeral id for tracking between request and response string ephemeral_id = 1; map actions_per_attribute_value_fqn = 2; } -// Either a registered resource or a set of attribute values +// Either a set of attribute values (such as those on a TDF) or a registered resource value message Resource { // ephemeral id for tracking between request and response string ephemeral_id = 1; @@ -70,7 +73,7 @@ message Resource { } } -// Can the entity (PE or NPE) represented by each entity chain take the provided action on the each resource +// Can the entity (PE or NPE) represented by one entity chain take the provided action on each resource message DecisionRequest { EntityChain entity = 1; policy.Action action = 2; @@ -110,6 +113,7 @@ message GetDecisionBulkResponse { repeated DecisionResponse decision_responses = 1; } +// What can the entity do, broken down as permitted actions on attribute value FQNs message GetEntitlementsRequest { // list of requested entities // todo: should this be an entity chain? @@ -127,7 +131,7 @@ message GetEntitlementsResponse { message TokenDecisionRequest { Token token = 1; policy.Action action = 2; - Resource resource = 3; + repeated Resource resources = 3; } message GetDecisionByTokenRequest { From 03651a8545fce786cc49e7baf2173a191539e616 Mon Sep 17 00:00:00 2001 From: jakedoublev Date: Sun, 4 May 2025 22:59:09 -0700 Subject: [PATCH 14/49] ERS should take new authv2 entity proto --- docs/grpc/index.html | 7 + .../entity_resolution.swagger.json | 48 ++++ .../entityresolution/entity_resolution.pb.go | 214 ++++++++++-------- .../entityresolution/entity_resolution.proto | 10 +- 4 files changed, 177 insertions(+), 102 deletions(-) diff --git a/docs/grpc/index.html b/docs/grpc/index.html index 9acb01456d..31689fd5eb 100644 --- a/docs/grpc/index.html +++ b/docs/grpc/index.html @@ -4981,6 +4981,13 @@

      ResolveEntitiesRequest

      + + + + + + + diff --git a/docs/openapi/entityresolution/entity_resolution.swagger.json b/docs/openapi/entityresolution/entity_resolution.swagger.json index 8e179b635f..7101003cf0 100644 --- a/docs/openapi/entityresolution/entity_resolution.swagger.json +++ b/docs/openapi/entityresolution/entity_resolution.swagger.json @@ -165,6 +165,46 @@ } } }, + "authorizationv2Entity": { + "type": "object", + "properties": { + "ephemeralId": { + "type": "string", + "title": "ephemeral id for tracking between request and response" + }, + "emailAddress": { + "type": "string", + "title": "one of the entity options must be set" + }, + "userName": { + "type": "string" + }, + "claims": { + "$ref": "#/definitions/protobufAny", + "title": "used by ERS claims mode" + }, + "clientId": { + "type": "string", + "title": "EntityCustom custom = 5;" + }, + "registeredResourceValueFqn": { + "type": "string" + }, + "category": { + "$ref": "#/definitions/authorizationv2EntityCategory" + } + }, + "title": "PE (Person Entity) or NPE (Non-Person Entity)" + }, + "authorizationv2EntityCategory": { + "type": "string", + "enum": [ + "CATEGORY_UNSPECIFIED", + "CATEGORY_SUBJECT", + "CATEGORY_ENVIRONMENT" + ], + "default": "CATEGORY_UNSPECIFIED" + }, "entityresolutionCreateEntityChainFromJwtRequest": { "type": "object", "properties": { @@ -214,6 +254,14 @@ "items": { "type": "object", "$ref": "#/definitions/authorizationEntity" + }, + "title": "either v1 or v2 authorization entities are permitted, but not both" + }, + "entitiesV2": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/authorizationv2Entity" } } }, diff --git a/protocol/go/entityresolution/entity_resolution.pb.go b/protocol/go/entityresolution/entity_resolution.pb.go index afc990717c..77187d7bd7 100644 --- a/protocol/go/entityresolution/entity_resolution.pb.go +++ b/protocol/go/entityresolution/entity_resolution.pb.go @@ -8,6 +8,7 @@ package entityresolution import ( authorization "github.com/opentdf/platform/protocol/go/authorization" + v2 "github.com/opentdf/platform/protocol/go/authorization/v2" _ "google.golang.org/genproto/googleapis/api/annotations" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" @@ -42,7 +43,9 @@ type ResolveEntitiesRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Entities []*authorization.Entity `protobuf:"bytes,1,rep,name=entities,proto3" json:"entities,omitempty"` + // either v1 or v2 authorization entities are permitted, but not both + Entities []*authorization.Entity `protobuf:"bytes,1,rep,name=entities,proto3" json:"entities,omitempty"` + EntitiesV2 []*v2.Entity `protobuf:"bytes,2,rep,name=entities_v2,json=entitiesV2,proto3" json:"entities_v2,omitempty"` } func (x *ResolveEntitiesRequest) Reset() { @@ -84,6 +87,13 @@ func (x *ResolveEntitiesRequest) GetEntities() []*authorization.Entity { return nil } +func (x *ResolveEntitiesRequest) GetEntitiesV2() []*v2.Entity { + if x != nil { + return x.EntitiesV2 + } + return nil +} + type EntityRepresentation struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -402,87 +412,93 @@ var file_entityresolution_entity_resolution_proto_rawDesc = []byte{ 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x21, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, - 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, - 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x4b, 0x0a, 0x16, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, - 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x31, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x69, 0x65, 0x73, 0x22, 0x7b, 0x0a, 0x14, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x70, - 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x42, 0x0a, 0x10, 0x61, - 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0f, - 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x73, 0x12, - 0x1f, 0x0a, 0x0b, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x49, 0x64, - 0x22, 0x78, 0x0a, 0x17, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, - 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x16, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x70, 0x72, 0x65, - 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x8b, 0x01, 0x0a, 0x13, 0x45, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x12, 0x2e, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, - 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x4f, 0x0a, 0x1f, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, - 0x6d, 0x4a, 0x77, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x06, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x52, 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x22, 0x63, 0x0a, 0x20, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, - 0x6f, 0x6d, 0x4a, 0x77, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, - 0x0d, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, - 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x32, 0xd6, - 0x02, 0x0a, 0x17, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8c, 0x01, 0x0a, 0x0f, 0x52, - 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x28, - 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x73, 0x6f, - 0x6c, 0x76, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x01, 0x2a, 0x22, 0x19, - 0x2f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, - 0x6e, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x12, 0xab, 0x01, 0x0a, 0x18, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, - 0x72, 0x6f, 0x6d, 0x4a, 0x77, 0x74, 0x12, 0x31, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, - 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x4a, - 0x77, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, - 0x6f, 0x6d, 0x4a, 0x77, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x3a, 0x01, 0x2a, 0x22, 0x1d, 0x2f, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x42, 0xc7, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, + 0x24, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, + 0x32, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, + 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x86, 0x01, 0x0a, + 0x16, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x39, 0x0a, 0x0b, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x5f, 0x76, 0x32, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x18, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x69, 0x65, 0x73, 0x56, 0x32, 0x22, 0x7b, 0x0a, 0x14, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, + 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x42, 0x0a, + 0x10, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x70, 0x72, 0x6f, 0x70, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, + 0x52, 0x0f, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, + 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, + 0x49, 0x64, 0x22, 0x78, 0x0a, 0x17, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x45, 0x6e, 0x74, + 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, + 0x16, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x42, 0x15, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x38, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, - 0x67, 0x6f, 0x2f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0xa2, 0x02, 0x03, 0x45, 0x58, 0x58, 0xaa, 0x02, 0x10, 0x45, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0xca, 0x02, 0x10, 0x45, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0xe2, - 0x02, 0x1c, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, + 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x70, + 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x8b, 0x01, 0x0a, + 0x13, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x2e, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x03, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x4f, 0x0a, 0x1f, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, + 0x72, 0x6f, 0x6d, 0x4a, 0x77, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, + 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x52, 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x22, 0x63, 0x0a, 0x20, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, + 0x46, 0x72, 0x6f, 0x6d, 0x4a, 0x77, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x3f, 0x0a, 0x0d, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, + 0x69, 0x6e, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x73, + 0x32, 0xd6, 0x02, 0x0a, 0x17, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x6c, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8c, 0x01, 0x0a, + 0x0f, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, + 0x12, 0x28, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, + 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, + 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x01, 0x2a, + 0x22, 0x19, 0x2f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, + 0x69, 0x6f, 0x6e, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x12, 0xab, 0x01, 0x0a, 0x18, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, + 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x4a, 0x77, 0x74, 0x12, 0x31, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, + 0x6d, 0x4a, 0x77, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, + 0x46, 0x72, 0x6f, 0x6d, 0x4a, 0x77, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x3a, 0x01, 0x2a, 0x22, 0x1d, 0x2f, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x42, 0xc7, 0x01, 0x0a, 0x14, 0x63, 0x6f, + 0x6d, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, + 0x6f, 0x6e, 0x42, 0x15, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x38, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2f, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x6c, 0x2f, 0x67, 0x6f, 0x2f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0xa2, 0x02, 0x03, 0x45, 0x58, 0x58, 0xaa, 0x02, 0x10, 0x45, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0xca, 0x02, 0x10, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, - 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6e, 0xe2, 0x02, 0x1c, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, + 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0xea, 0x02, 0x10, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, + 0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -506,27 +522,29 @@ var file_entityresolution_entity_resolution_proto_goTypes = []interface{}{ (*CreateEntityChainFromJwtRequest)(nil), // 4: entityresolution.CreateEntityChainFromJwtRequest (*CreateEntityChainFromJwtResponse)(nil), // 5: entityresolution.CreateEntityChainFromJwtResponse (*authorization.Entity)(nil), // 6: authorization.Entity - (*structpb.Struct)(nil), // 7: google.protobuf.Struct - (*anypb.Any)(nil), // 8: google.protobuf.Any - (*authorization.Token)(nil), // 9: authorization.Token - (*authorization.EntityChain)(nil), // 10: authorization.EntityChain + (*v2.Entity)(nil), // 7: authorization.v2.Entity + (*structpb.Struct)(nil), // 8: google.protobuf.Struct + (*anypb.Any)(nil), // 9: google.protobuf.Any + (*authorization.Token)(nil), // 10: authorization.Token + (*authorization.EntityChain)(nil), // 11: authorization.EntityChain } var file_entityresolution_entity_resolution_proto_depIdxs = []int32{ 6, // 0: entityresolution.ResolveEntitiesRequest.entities:type_name -> authorization.Entity - 7, // 1: entityresolution.EntityRepresentation.additional_props:type_name -> google.protobuf.Struct - 1, // 2: entityresolution.ResolveEntitiesResponse.entity_representations:type_name -> entityresolution.EntityRepresentation - 8, // 3: entityresolution.EntityNotFoundError.details:type_name -> google.protobuf.Any - 9, // 4: entityresolution.CreateEntityChainFromJwtRequest.tokens:type_name -> authorization.Token - 10, // 5: entityresolution.CreateEntityChainFromJwtResponse.entity_chains:type_name -> authorization.EntityChain - 0, // 6: entityresolution.EntityResolutionService.ResolveEntities:input_type -> entityresolution.ResolveEntitiesRequest - 4, // 7: entityresolution.EntityResolutionService.CreateEntityChainFromJwt:input_type -> entityresolution.CreateEntityChainFromJwtRequest - 2, // 8: entityresolution.EntityResolutionService.ResolveEntities:output_type -> entityresolution.ResolveEntitiesResponse - 5, // 9: entityresolution.EntityResolutionService.CreateEntityChainFromJwt:output_type -> entityresolution.CreateEntityChainFromJwtResponse - 8, // [8:10] is the sub-list for method output_type - 6, // [6:8] is the sub-list for method input_type - 6, // [6:6] is the sub-list for extension type_name - 6, // [6:6] is the sub-list for extension extendee - 0, // [0:6] is the sub-list for field type_name + 7, // 1: entityresolution.ResolveEntitiesRequest.entities_v2:type_name -> authorization.v2.Entity + 8, // 2: entityresolution.EntityRepresentation.additional_props:type_name -> google.protobuf.Struct + 1, // 3: entityresolution.ResolveEntitiesResponse.entity_representations:type_name -> entityresolution.EntityRepresentation + 9, // 4: entityresolution.EntityNotFoundError.details:type_name -> google.protobuf.Any + 10, // 5: entityresolution.CreateEntityChainFromJwtRequest.tokens:type_name -> authorization.Token + 11, // 6: entityresolution.CreateEntityChainFromJwtResponse.entity_chains:type_name -> authorization.EntityChain + 0, // 7: entityresolution.EntityResolutionService.ResolveEntities:input_type -> entityresolution.ResolveEntitiesRequest + 4, // 8: entityresolution.EntityResolutionService.CreateEntityChainFromJwt:input_type -> entityresolution.CreateEntityChainFromJwtRequest + 2, // 9: entityresolution.EntityResolutionService.ResolveEntities:output_type -> entityresolution.ResolveEntitiesResponse + 5, // 10: entityresolution.EntityResolutionService.CreateEntityChainFromJwt:output_type -> entityresolution.CreateEntityChainFromJwtResponse + 9, // [9:11] is the sub-list for method output_type + 7, // [7:9] is the sub-list for method input_type + 7, // [7:7] is the sub-list for extension type_name + 7, // [7:7] is the sub-list for extension extendee + 0, // [0:7] is the sub-list for field type_name } func init() { file_entityresolution_entity_resolution_proto_init() } diff --git a/service/entityresolution/entity_resolution.proto b/service/entityresolution/entity_resolution.proto index bbccdef37a..5e04c2788c 100644 --- a/service/entityresolution/entity_resolution.proto +++ b/service/entityresolution/entity_resolution.proto @@ -3,9 +3,10 @@ syntax = "proto3"; package entityresolution; import "authorization/authorization.proto"; -import "google/protobuf/struct.proto"; -import "google/protobuf/any.proto"; +import "authorization/v2/authorization.proto"; import "google/api/annotations.proto"; +import "google/protobuf/any.proto"; +import "google/protobuf/struct.proto"; /* Example: Get idp attributes for bob and alice (both represented using an email address @@ -24,10 +25,11 @@ import "google/api/annotations.proto"; */ message ResolveEntitiesRequest { - repeated authorization.Entity entities = 1; + // either v1 or v2 authorization entities are permitted, but not both + repeated authorization.Entity entities = 1; + repeated authorization.v2.Entity entities_v2 = 2; } - message EntityRepresentation { repeated google.protobuf.Struct additional_props = 1; string original_id = 2; // ephemeral entity id from the request From 999428f562463f1c3f726ee5c9da286668fd52f0 Mon Sep 17 00:00:00 2001 From: Ryan Yanulites Date: Tue, 6 May 2025 09:03:41 -0600 Subject: [PATCH 15/49] auth v2 service scaffold and versioned registration/sdk --- sdk/sdk.go | 14 +++-- service/authorization/v2/authorization.go | 67 +++++++++++++++++++++++ service/pkg/server/services.go | 3 + 3 files changed, 79 insertions(+), 5 deletions(-) create mode 100644 service/authorization/v2/authorization.go diff --git a/sdk/sdk.go b/sdk/sdk.go index dd4bfcc851..596e4b94ca 100644 --- a/sdk/sdk.go +++ b/sdk/sdk.go @@ -16,6 +16,7 @@ import ( "github.com/opentdf/platform/lib/ocrypto" "github.com/opentdf/platform/protocol/go/authorization" + authorizationv2 "github.com/opentdf/platform/protocol/go/authorization/v2" "github.com/opentdf/platform/protocol/go/entityresolution" "github.com/opentdf/platform/protocol/go/policy" "github.com/opentdf/platform/protocol/go/policy/actions" @@ -64,12 +65,14 @@ type SDK struct { config *kasKeyCache *collectionStore - conn *grpc.ClientConn - dialOptions []grpc.DialOption - tokenSource auth.AccessTokenSource - Actions actions.ActionServiceClient - Attributes attributes.AttributesServiceClient + conn *grpc.ClientConn + dialOptions []grpc.DialOption + tokenSource auth.AccessTokenSource + Actions actions.ActionServiceClient + Attributes attributes.AttributesServiceClient + // Deprecated: Migrate to AuthorizationV2 methods Authorization authorization.AuthorizationServiceClient + AuthorizationV2 authorizationv2.AuthorizationServiceClient EntityResoution entityresolution.EntityResolutionServiceClient KeyAccessServerRegistry kasregistry.KeyAccessServerRegistryServiceClient Namespaces namespaces.NamespaceServiceClient @@ -213,6 +216,7 @@ func New(platformEndpoint string, opts ...Option) (*SDK, error) { Unsafe: unsafe.NewUnsafeServiceClient(platformConn), KeyAccessServerRegistry: kasregistry.NewKeyAccessServerRegistryServiceClient(platformConn), Authorization: authorization.NewAuthorizationServiceClient(platformConn), + AuthorizationV2: authorizationv2.NewAuthorizationServiceClient(platformConn), EntityResoution: entityresolution.NewEntityResolutionServiceClient(ersConn), KeyManagement: keymanagement.NewKeyManagementServiceClient(platformConn), wellknownConfiguration: wellknownconfiguration.NewWellKnownServiceClient(platformConn), diff --git a/service/authorization/v2/authorization.go b/service/authorization/v2/authorization.go new file mode 100644 index 0000000000..755c30f37b --- /dev/null +++ b/service/authorization/v2/authorization.go @@ -0,0 +1,67 @@ +package v2 + +import ( + "context" + + "connectrpc.com/connect" + authorizationv2 "github.com/opentdf/platform/protocol/go/authorization/v2" + "github.com/opentdf/platform/protocol/go/authorization/v2/authorizationv2connect" + "github.com/opentdf/platform/service/logger" + "github.com/opentdf/platform/service/pkg/config" + "github.com/opentdf/platform/service/pkg/serviceregistry" +) + +type AuthorizationService struct { + // TODO: add rest of struct dependencies from V1 AuthorizationService + logger *logger.Logger +} + +func OnConfigUpdate(as *AuthorizationService) serviceregistry.OnConfigUpdateHook { + return func(_ context.Context, cfg config.ServiceConfig) error { + // TODO: implement logic from V1 AuthorizationService + + as.logger.Info("AuthorizationService V2 config updated") + + return nil + } +} + +func NewRegistration() *serviceregistry.Service[authorizationv2connect.AuthorizationServiceHandler] { + as := new(AuthorizationService) + onUpdateConfig := OnConfigUpdate(as) + + return &serviceregistry.Service[authorizationv2connect.AuthorizationServiceHandler]{ + ServiceOptions: serviceregistry.ServiceOptions[authorizationv2connect.AuthorizationServiceHandler]{ + Namespace: "authorization", + ServiceDesc: &authorizationv2.AuthorizationService_ServiceDesc, + ConnectRPCFunc: authorizationv2connect.NewAuthorizationServiceHandler, + OnConfigUpdate: onUpdateConfig, + RegisterFunc: func(srp serviceregistry.RegistrationParams) (authorizationv2connect.AuthorizationServiceHandler, serviceregistry.HandlerServer) { + // TODO: add registration logic from V1 AuthorizationService + return as, nil + }, + }, + } +} + +// TODO: implement RPC methods + +func (a *AuthorizationService) GetDecision(context.Context, *connect.Request[authorizationv2.GetDecisionRequest]) (*connect.Response[authorizationv2.GetDecisionResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, nil) +} + +func (a *AuthorizationService) GetDecisionBulk(context.Context, *connect.Request[authorizationv2.GetDecisionBulkRequest]) (*connect.Response[authorizationv2.GetDecisionBulkResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, nil) +} + +func (a *AuthorizationService) GetDecisionBulkByToken(context.Context, *connect.Request[authorizationv2.GetDecisionBulkByTokenRequest]) (*connect.Response[authorizationv2.GetDecisionBulkByTokenResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, nil) +} + +func (a *AuthorizationService) GetDecisionByToken(context.Context, *connect.Request[authorizationv2.GetDecisionByTokenRequest]) (*connect.Response[authorizationv2.GetDecisionByTokenResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, nil) +} + +func (a *AuthorizationService) GetEntitlements(context.Context, *connect.Request[authorizationv2.GetEntitlementsRequest]) (*connect.Response[authorizationv2.GetEntitlementsResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, nil) +} diff --git a/service/pkg/server/services.go b/service/pkg/server/services.go index 6f9eed1616..31d3e9774c 100644 --- a/service/pkg/server/services.go +++ b/service/pkg/server/services.go @@ -11,6 +11,7 @@ import ( "github.com/go-viper/mapstructure/v2" "github.com/opentdf/platform/sdk" "github.com/opentdf/platform/service/authorization" + authorizationv2 "github.com/opentdf/platform/service/authorization/v2" "github.com/opentdf/platform/service/entityresolution" "github.com/opentdf/platform/service/health" "github.com/opentdf/platform/service/internal/server" @@ -69,6 +70,7 @@ func registerCoreServices(reg serviceregistry.Registry, mode []string) ([]string registeredServices = append(registeredServices, []string{servicePolicy, serviceAuthorization, serviceKAS, serviceWellKnown, serviceEntityResolution}...) services = append(services, []serviceregistry.IService{ authorization.NewRegistration(), + authorizationv2.NewRegistration(), kas.NewRegistration(), wellknown.NewRegistration(), entityresolution.NewRegistration(), @@ -78,6 +80,7 @@ func registerCoreServices(reg serviceregistry.Registry, mode []string) ([]string registeredServices = append(registeredServices, []string{servicePolicy, serviceAuthorization, serviceWellKnown}...) services = append(services, []serviceregistry.IService{ authorization.NewRegistration(), + authorizationv2.NewRegistration(), wellknown.NewRegistration(), }...) services = append(services, policy.NewRegistrations()...) From 095d515b47371727515b49def19e5c651b27eae4 Mon Sep 17 00:00:00 2001 From: Ryan Yanulites Date: Tue, 6 May 2025 09:14:14 -0600 Subject: [PATCH 16/49] add proper deprecated comments --- docs/grpc/index.html | 6 +++--- docs/openapi/authorization/authorization.swagger.json | 3 +++ protocol/go/authorization/authorization_grpc.pb.go | 6 ++++++ .../authorizationconnect/authorization.connect.go | 6 ++++++ sdk/sdk.go | 2 +- service/authorization/authorization.proto | 3 +++ 6 files changed, 22 insertions(+), 4 deletions(-) diff --git a/docs/grpc/index.html b/docs/grpc/index.html index 31689fd5eb..bc34843e7e 100644 --- a/docs/grpc/index.html +++ b/docs/grpc/index.html @@ -3992,21 +3992,21 @@

      AuthorizationService

      - + - + - + diff --git a/docs/openapi/authorization/authorization.swagger.json b/docs/openapi/authorization/authorization.swagger.json index 5f9b787c93..58443ba5dd 100644 --- a/docs/openapi/authorization/authorization.swagger.json +++ b/docs/openapi/authorization/authorization.swagger.json @@ -18,6 +18,7 @@ "paths": { "/v1/authorization": { "post": { + "summary": "Deprecated: Use AuthorizationV2.GetDecisionBulk method instead", "operationId": "AuthorizationService_GetDecisions", "responses": { "200": { @@ -50,6 +51,7 @@ }, "/v1/entitlements": { "post": { + "summary": "Deprecated: Use AuthorizationV2.GetEntitlements method instead", "operationId": "AuthorizationService_GetEntitlements", "responses": { "200": { @@ -83,6 +85,7 @@ }, "/v1/token/authorization": { "post": { + "summary": "Deprecated: Use AuthorizationV2.GetDecisionBulkByToken method instead", "operationId": "AuthorizationService_GetDecisionsByToken", "responses": { "200": { diff --git a/protocol/go/authorization/authorization_grpc.pb.go b/protocol/go/authorization/authorization_grpc.pb.go index ec4e9c9dce..9943bb5f07 100644 --- a/protocol/go/authorization/authorization_grpc.pb.go +++ b/protocol/go/authorization/authorization_grpc.pb.go @@ -28,8 +28,11 @@ const ( // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. type AuthorizationServiceClient interface { + // Deprecated: Use AuthorizationV2.GetDecisionBulk method instead GetDecisions(ctx context.Context, in *GetDecisionsRequest, opts ...grpc.CallOption) (*GetDecisionsResponse, error) + // Deprecated: Use AuthorizationV2.GetDecisionBulkByToken method instead GetDecisionsByToken(ctx context.Context, in *GetDecisionsByTokenRequest, opts ...grpc.CallOption) (*GetDecisionsByTokenResponse, error) + // Deprecated: Use AuthorizationV2.GetEntitlements method instead GetEntitlements(ctx context.Context, in *GetEntitlementsRequest, opts ...grpc.CallOption) (*GetEntitlementsResponse, error) } @@ -72,8 +75,11 @@ func (c *authorizationServiceClient) GetEntitlements(ctx context.Context, in *Ge // All implementations must embed UnimplementedAuthorizationServiceServer // for forward compatibility type AuthorizationServiceServer interface { + // Deprecated: Use AuthorizationV2.GetDecisionBulk method instead GetDecisions(context.Context, *GetDecisionsRequest) (*GetDecisionsResponse, error) + // Deprecated: Use AuthorizationV2.GetDecisionBulkByToken method instead GetDecisionsByToken(context.Context, *GetDecisionsByTokenRequest) (*GetDecisionsByTokenResponse, error) + // Deprecated: Use AuthorizationV2.GetEntitlements method instead GetEntitlements(context.Context, *GetEntitlementsRequest) (*GetEntitlementsResponse, error) mustEmbedUnimplementedAuthorizationServiceServer() } diff --git a/protocol/go/authorization/authorizationconnect/authorization.connect.go b/protocol/go/authorization/authorizationconnect/authorization.connect.go index dd5efadb4d..8b2eba51f9 100644 --- a/protocol/go/authorization/authorizationconnect/authorization.connect.go +++ b/protocol/go/authorization/authorizationconnect/authorization.connect.go @@ -54,8 +54,11 @@ var ( // AuthorizationServiceClient is a client for the authorization.AuthorizationService service. type AuthorizationServiceClient interface { + // Deprecated: Use AuthorizationV2.GetDecisionBulk method instead GetDecisions(context.Context, *connect.Request[authorization.GetDecisionsRequest]) (*connect.Response[authorization.GetDecisionsResponse], error) + // Deprecated: Use AuthorizationV2.GetDecisionBulkByToken method instead GetDecisionsByToken(context.Context, *connect.Request[authorization.GetDecisionsByTokenRequest]) (*connect.Response[authorization.GetDecisionsByTokenResponse], error) + // Deprecated: Use AuthorizationV2.GetEntitlements method instead GetEntitlements(context.Context, *connect.Request[authorization.GetEntitlementsRequest]) (*connect.Response[authorization.GetEntitlementsResponse], error) } @@ -115,8 +118,11 @@ func (c *authorizationServiceClient) GetEntitlements(ctx context.Context, req *c // AuthorizationServiceHandler is an implementation of the authorization.AuthorizationService // service. type AuthorizationServiceHandler interface { + // Deprecated: Use AuthorizationV2.GetDecisionBulk method instead GetDecisions(context.Context, *connect.Request[authorization.GetDecisionsRequest]) (*connect.Response[authorization.GetDecisionsResponse], error) + // Deprecated: Use AuthorizationV2.GetDecisionBulkByToken method instead GetDecisionsByToken(context.Context, *connect.Request[authorization.GetDecisionsByTokenRequest]) (*connect.Response[authorization.GetDecisionsByTokenResponse], error) + // Deprecated: Use AuthorizationV2.GetEntitlements method instead GetEntitlements(context.Context, *connect.Request[authorization.GetEntitlementsRequest]) (*connect.Response[authorization.GetEntitlementsResponse], error) } diff --git a/sdk/sdk.go b/sdk/sdk.go index 596e4b94ca..11bfd415db 100644 --- a/sdk/sdk.go +++ b/sdk/sdk.go @@ -70,7 +70,7 @@ type SDK struct { tokenSource auth.AccessTokenSource Actions actions.ActionServiceClient Attributes attributes.AttributesServiceClient - // Deprecated: Migrate to AuthorizationV2 methods + // Deprecated: Use AuthorizationV2 methods instead Authorization authorization.AuthorizationServiceClient AuthorizationV2 authorizationv2.AuthorizationServiceClient EntityResoution entityresolution.EntityResolutionServiceClient diff --git a/service/authorization/authorization.proto b/service/authorization/authorization.proto index 058f1f18f3..a1d0343d8d 100644 --- a/service/authorization/authorization.proto +++ b/service/authorization/authorization.proto @@ -287,15 +287,18 @@ message GetDecisionsByTokenResponse { } service AuthorizationService { + // Deprecated: Use AuthorizationV2.GetDecisionBulk method instead rpc GetDecisions(GetDecisionsRequest) returns (GetDecisionsResponse) { option (google.api.http) = { post: "/v1/authorization" body: "*" }; } + // Deprecated: Use AuthorizationV2.GetDecisionBulkByToken method instead rpc GetDecisionsByToken(GetDecisionsByTokenRequest) returns (GetDecisionsByTokenResponse) { option (google.api.http) = {post: "/v1/token/authorization"}; } + // Deprecated: Use AuthorizationV2.GetEntitlements method instead rpc GetEntitlements(GetEntitlementsRequest) returns (GetEntitlementsResponse) { option (google.api.http) = { post: "/v1/entitlements" From aade0d6e1d177fe3cf0542bd3376d0738029e5c1 Mon Sep 17 00:00:00 2001 From: Ryan Yanulites Date: Tue, 6 May 2025 09:39:33 -0600 Subject: [PATCH 17/49] remove non-proto changes moved to separate branch --- sdk/sdk.go | 14 ++--- service/authorization/v2/authorization.go | 67 ----------------------- service/pkg/server/services.go | 3 - 3 files changed, 5 insertions(+), 79 deletions(-) delete mode 100644 service/authorization/v2/authorization.go diff --git a/sdk/sdk.go b/sdk/sdk.go index 11bfd415db..dd4bfcc851 100644 --- a/sdk/sdk.go +++ b/sdk/sdk.go @@ -16,7 +16,6 @@ import ( "github.com/opentdf/platform/lib/ocrypto" "github.com/opentdf/platform/protocol/go/authorization" - authorizationv2 "github.com/opentdf/platform/protocol/go/authorization/v2" "github.com/opentdf/platform/protocol/go/entityresolution" "github.com/opentdf/platform/protocol/go/policy" "github.com/opentdf/platform/protocol/go/policy/actions" @@ -65,14 +64,12 @@ type SDK struct { config *kasKeyCache *collectionStore - conn *grpc.ClientConn - dialOptions []grpc.DialOption - tokenSource auth.AccessTokenSource - Actions actions.ActionServiceClient - Attributes attributes.AttributesServiceClient - // Deprecated: Use AuthorizationV2 methods instead + conn *grpc.ClientConn + dialOptions []grpc.DialOption + tokenSource auth.AccessTokenSource + Actions actions.ActionServiceClient + Attributes attributes.AttributesServiceClient Authorization authorization.AuthorizationServiceClient - AuthorizationV2 authorizationv2.AuthorizationServiceClient EntityResoution entityresolution.EntityResolutionServiceClient KeyAccessServerRegistry kasregistry.KeyAccessServerRegistryServiceClient Namespaces namespaces.NamespaceServiceClient @@ -216,7 +213,6 @@ func New(platformEndpoint string, opts ...Option) (*SDK, error) { Unsafe: unsafe.NewUnsafeServiceClient(platformConn), KeyAccessServerRegistry: kasregistry.NewKeyAccessServerRegistryServiceClient(platformConn), Authorization: authorization.NewAuthorizationServiceClient(platformConn), - AuthorizationV2: authorizationv2.NewAuthorizationServiceClient(platformConn), EntityResoution: entityresolution.NewEntityResolutionServiceClient(ersConn), KeyManagement: keymanagement.NewKeyManagementServiceClient(platformConn), wellknownConfiguration: wellknownconfiguration.NewWellKnownServiceClient(platformConn), diff --git a/service/authorization/v2/authorization.go b/service/authorization/v2/authorization.go deleted file mode 100644 index 755c30f37b..0000000000 --- a/service/authorization/v2/authorization.go +++ /dev/null @@ -1,67 +0,0 @@ -package v2 - -import ( - "context" - - "connectrpc.com/connect" - authorizationv2 "github.com/opentdf/platform/protocol/go/authorization/v2" - "github.com/opentdf/platform/protocol/go/authorization/v2/authorizationv2connect" - "github.com/opentdf/platform/service/logger" - "github.com/opentdf/platform/service/pkg/config" - "github.com/opentdf/platform/service/pkg/serviceregistry" -) - -type AuthorizationService struct { - // TODO: add rest of struct dependencies from V1 AuthorizationService - logger *logger.Logger -} - -func OnConfigUpdate(as *AuthorizationService) serviceregistry.OnConfigUpdateHook { - return func(_ context.Context, cfg config.ServiceConfig) error { - // TODO: implement logic from V1 AuthorizationService - - as.logger.Info("AuthorizationService V2 config updated") - - return nil - } -} - -func NewRegistration() *serviceregistry.Service[authorizationv2connect.AuthorizationServiceHandler] { - as := new(AuthorizationService) - onUpdateConfig := OnConfigUpdate(as) - - return &serviceregistry.Service[authorizationv2connect.AuthorizationServiceHandler]{ - ServiceOptions: serviceregistry.ServiceOptions[authorizationv2connect.AuthorizationServiceHandler]{ - Namespace: "authorization", - ServiceDesc: &authorizationv2.AuthorizationService_ServiceDesc, - ConnectRPCFunc: authorizationv2connect.NewAuthorizationServiceHandler, - OnConfigUpdate: onUpdateConfig, - RegisterFunc: func(srp serviceregistry.RegistrationParams) (authorizationv2connect.AuthorizationServiceHandler, serviceregistry.HandlerServer) { - // TODO: add registration logic from V1 AuthorizationService - return as, nil - }, - }, - } -} - -// TODO: implement RPC methods - -func (a *AuthorizationService) GetDecision(context.Context, *connect.Request[authorizationv2.GetDecisionRequest]) (*connect.Response[authorizationv2.GetDecisionResponse], error) { - return nil, connect.NewError(connect.CodeUnimplemented, nil) -} - -func (a *AuthorizationService) GetDecisionBulk(context.Context, *connect.Request[authorizationv2.GetDecisionBulkRequest]) (*connect.Response[authorizationv2.GetDecisionBulkResponse], error) { - return nil, connect.NewError(connect.CodeUnimplemented, nil) -} - -func (a *AuthorizationService) GetDecisionBulkByToken(context.Context, *connect.Request[authorizationv2.GetDecisionBulkByTokenRequest]) (*connect.Response[authorizationv2.GetDecisionBulkByTokenResponse], error) { - return nil, connect.NewError(connect.CodeUnimplemented, nil) -} - -func (a *AuthorizationService) GetDecisionByToken(context.Context, *connect.Request[authorizationv2.GetDecisionByTokenRequest]) (*connect.Response[authorizationv2.GetDecisionByTokenResponse], error) { - return nil, connect.NewError(connect.CodeUnimplemented, nil) -} - -func (a *AuthorizationService) GetEntitlements(context.Context, *connect.Request[authorizationv2.GetEntitlementsRequest]) (*connect.Response[authorizationv2.GetEntitlementsResponse], error) { - return nil, connect.NewError(connect.CodeUnimplemented, nil) -} diff --git a/service/pkg/server/services.go b/service/pkg/server/services.go index 31d3e9774c..6f9eed1616 100644 --- a/service/pkg/server/services.go +++ b/service/pkg/server/services.go @@ -11,7 +11,6 @@ import ( "github.com/go-viper/mapstructure/v2" "github.com/opentdf/platform/sdk" "github.com/opentdf/platform/service/authorization" - authorizationv2 "github.com/opentdf/platform/service/authorization/v2" "github.com/opentdf/platform/service/entityresolution" "github.com/opentdf/platform/service/health" "github.com/opentdf/platform/service/internal/server" @@ -70,7 +69,6 @@ func registerCoreServices(reg serviceregistry.Registry, mode []string) ([]string registeredServices = append(registeredServices, []string{servicePolicy, serviceAuthorization, serviceKAS, serviceWellKnown, serviceEntityResolution}...) services = append(services, []serviceregistry.IService{ authorization.NewRegistration(), - authorizationv2.NewRegistration(), kas.NewRegistration(), wellknown.NewRegistration(), entityresolution.NewRegistration(), @@ -80,7 +78,6 @@ func registerCoreServices(reg serviceregistry.Registry, mode []string) ([]string registeredServices = append(registeredServices, []string{servicePolicy, serviceAuthorization, serviceWellKnown}...) services = append(services, []serviceregistry.IService{ authorization.NewRegistration(), - authorizationv2.NewRegistration(), wellknown.NewRegistration(), }...) services = append(services, policy.NewRegistrations()...) From 944a7a82e53832110f1d52b414fe986d756c8687 Mon Sep 17 00:00:00 2001 From: jakedoublev Date: Thu, 8 May 2025 10:39:53 -0700 Subject: [PATCH 18/49] drop scope from GetEntitlements --- docs/grpc/index.html | 11 +- .../go/authorization/v2/authorization.pb.go | 269 +++++++++--------- service/authorization/v2/authorization.proto | 7 +- 3 files changed, 135 insertions(+), 152 deletions(-) diff --git a/docs/grpc/index.html b/docs/grpc/index.html index e5361bab0f..bb0ac3b397 100644 --- a/docs/grpc/index.html +++ b/docs/grpc/index.html @@ -4566,7 +4566,7 @@

      GetDecisionResponse

      GetEntitlementsRequest

      -

      What can the entity do, broken down as permitted actions on attribute value FQNs

      +

      What can the entity do, broken down as permitted actions on attribute value FQNs

      Note: the v1 API parameter 'scope' has been dropped, and it is recommended to use

      GetDecision if the resource is known

      resourceresources Resourcerepeated

      entities authorization.Entity repeated

      either v1 or v2 authorization entities are permitted, but not both

      entities_v2authorization.v2.Entityrepeated

      GetDecisions GetDecisionsRequest GetDecisionsResponse

      Deprecated: Use AuthorizationV2.GetDecisionBulk method instead

      GetDecisionsByToken GetDecisionsByTokenRequest GetDecisionsByTokenResponse

      Deprecated: Use AuthorizationV2.GetDecisionBulkByToken method instead

      GetEntitlements GetEntitlementsRequest GetEntitlementsResponse

      Deprecated: Use AuthorizationV2.GetEntitlements method instead

      @@ -4583,18 +4583,11 @@

      GetEntitlementsRequest

      todo: should this be an entity chain?

      - - - - - - - - + diff --git a/protocol/go/authorization/v2/authorization.pb.go b/protocol/go/authorization/v2/authorization.pb.go index 35e222b0be..79f643d08f 100644 --- a/protocol/go/authorization/v2/authorization.pb.go +++ b/protocol/go/authorization/v2/authorization.pb.go @@ -857,6 +857,9 @@ func (x *GetDecisionBulkResponse) GetDecisionResponses() []*DecisionResponse { } // What can the entity do, broken down as permitted actions on attribute value FQNs +// +// Note: the v1 API parameter 'scope' has been dropped, and it is recommended to use +// GetDecision if the resource is known type GetEntitlementsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -865,9 +868,7 @@ type GetEntitlementsRequest struct { // list of requested entities // todo: should this be an entity chain? Entities []*Entity `protobuf:"bytes,1,rep,name=entities,proto3" json:"entities,omitempty"` - // optional resource as a scope - Scope *Resource `protobuf:"bytes,2,opt,name=scope,proto3,oneof" json:"scope,omitempty"` - // optional parameter to return a full list of entitlements - returns lower hierarchy attributes + // optional parameter to return all entitled values for attribute definitions with hierarchy rules WithComprehensiveHierarchy *bool `protobuf:"varint,3,opt,name=with_comprehensive_hierarchy,json=withComprehensiveHierarchy,proto3,oneof" json:"with_comprehensive_hierarchy,omitempty"` } @@ -910,13 +911,6 @@ func (x *GetEntitlementsRequest) GetEntities() []*Entity { return nil } -func (x *GetEntitlementsRequest) GetScope() *Resource { - if x != nil { - return x.Scope - } - return nil -} - func (x *GetEntitlementsRequest) GetWithComprehensiveHierarchy() bool { if x != nil && x.WithComprehensiveHierarchy != nil { return *x.WithComprehensiveHierarchy @@ -1462,118 +1456,114 @@ var file_authorization_v2_authorization_proto_rawDesc = []byte{ 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x73, 0x22, 0xf7, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, + 0x6e, 0x73, 0x65, 0x73, 0x22, 0xb6, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x34, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x35, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x48, 0x00, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x88, 0x01, 0x01, 0x12, 0x45, 0x0a, 0x1c, - 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, - 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x08, 0x48, 0x01, 0x52, 0x1a, 0x77, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, - 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, - 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x42, 0x1f, 0x0a, - 0x1d, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, - 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x22, 0x63, - 0x0a, 0x17, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0c, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x22, 0xa7, 0x01, 0x0a, 0x14, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x05, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x26, 0x0a, 0x06, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x22, 0x6e, 0x0a, - 0x19, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x51, 0x0a, 0x10, 0x64, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0f, 0x64, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x6d, 0x0a, - 0x1a, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x11, 0x64, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x74, 0x0a, 0x1d, - 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x42, - 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x53, 0x0a, - 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x73, 0x22, 0x73, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x32, 0xba, 0x04, 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x12, 0x5c, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, - 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, - 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, - 0x6b, 0x12, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, - 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x71, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x44, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2b, + 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x1c, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, + 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, + 0x61, 0x72, 0x63, 0x68, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x1a, 0x77, + 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, + 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x88, 0x01, 0x01, 0x42, 0x1f, 0x0a, 0x1d, + 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, + 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x22, 0x63, 0x0a, + 0x17, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, - 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7d, 0x0a, 0x16, 0x47, + 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x22, 0xa7, 0x01, 0x0a, 0x14, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x05, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x26, 0x0a, 0x06, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x22, 0x6e, 0x0a, 0x19, + 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x51, 0x0a, 0x10, 0x64, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0f, 0x64, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x6d, 0x0a, 0x1a, + 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x11, 0x64, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x74, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x42, 0x79, - 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2f, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x53, 0x0a, 0x11, + 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, + 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x73, 0x22, 0x73, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x42, 0x75, 0x6c, 0x6b, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, + 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x32, 0xba, 0x04, 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, + 0x5c, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, + 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, + 0x0f, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, + 0x12, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, + 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, + 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x71, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x44, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2b, 0x2e, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, + 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, + 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7d, 0x0a, 0x16, 0x47, 0x65, + 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x42, 0x79, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2f, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x0f, 0x47, 0x65, - 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x28, 0x2e, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, - 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x42, 0xd5, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x42, 0x12, 0x41, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x50, 0x01, 0x5a, 0x48, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, 0x6f, 0x2f, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x3b, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x32, 0xa2, 0x02, 0x03, - 0x41, 0x58, 0x58, 0xaa, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x1c, 0x41, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x41, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x0f, 0x47, 0x65, 0x74, + 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x28, 0x2e, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, + 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x42, 0xd5, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x42, 0x12, 0x41, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x50, 0x01, 0x5a, 0x48, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, + 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, 0x6f, 0x2f, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x3b, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x32, 0xa2, 0x02, 0x03, 0x41, + 0x58, 0x58, 0xaa, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x1c, 0x41, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( @@ -1633,32 +1623,31 @@ var file_authorization_v2_authorization_proto_depIdxs = []int32{ 7, // 12: authorization.v2.GetDecisionBulkRequest.decision_requests:type_name -> authorization.v2.DecisionRequest 8, // 13: authorization.v2.GetDecisionBulkResponse.decision_responses:type_name -> authorization.v2.DecisionResponse 3, // 14: authorization.v2.GetEntitlementsRequest.entities:type_name -> authorization.v2.Entity - 6, // 15: authorization.v2.GetEntitlementsRequest.scope:type_name -> authorization.v2.Resource - 5, // 16: authorization.v2.GetEntitlementsResponse.entitlements:type_name -> authorization.v2.EntityEntitlements - 2, // 17: authorization.v2.TokenDecisionRequest.token:type_name -> authorization.v2.Token - 24, // 18: authorization.v2.TokenDecisionRequest.action:type_name -> policy.Action - 6, // 19: authorization.v2.TokenDecisionRequest.resources:type_name -> authorization.v2.Resource - 15, // 20: authorization.v2.GetDecisionByTokenRequest.decision_request:type_name -> authorization.v2.TokenDecisionRequest - 8, // 21: authorization.v2.GetDecisionByTokenResponse.decision_response:type_name -> authorization.v2.DecisionResponse - 15, // 22: authorization.v2.GetDecisionBulkByTokenRequest.decision_requests:type_name -> authorization.v2.TokenDecisionRequest - 8, // 23: authorization.v2.GetDecisionBulkByTokenResponse.decision_responses:type_name -> authorization.v2.DecisionResponse - 24, // 24: authorization.v2.EntityEntitlements.ActionsList.actions:type_name -> policy.Action - 20, // 25: authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry.value:type_name -> authorization.v2.EntityEntitlements.ActionsList - 9, // 26: authorization.v2.AuthorizationService.GetDecision:input_type -> authorization.v2.GetDecisionRequest - 11, // 27: authorization.v2.AuthorizationService.GetDecisionBulk:input_type -> authorization.v2.GetDecisionBulkRequest - 16, // 28: authorization.v2.AuthorizationService.GetDecisionByToken:input_type -> authorization.v2.GetDecisionByTokenRequest - 18, // 29: authorization.v2.AuthorizationService.GetDecisionBulkByToken:input_type -> authorization.v2.GetDecisionBulkByTokenRequest - 13, // 30: authorization.v2.AuthorizationService.GetEntitlements:input_type -> authorization.v2.GetEntitlementsRequest - 10, // 31: authorization.v2.AuthorizationService.GetDecision:output_type -> authorization.v2.GetDecisionResponse - 12, // 32: authorization.v2.AuthorizationService.GetDecisionBulk:output_type -> authorization.v2.GetDecisionBulkResponse - 17, // 33: authorization.v2.AuthorizationService.GetDecisionByToken:output_type -> authorization.v2.GetDecisionByTokenResponse - 19, // 34: authorization.v2.AuthorizationService.GetDecisionBulkByToken:output_type -> authorization.v2.GetDecisionBulkByTokenResponse - 14, // 35: authorization.v2.AuthorizationService.GetEntitlements:output_type -> authorization.v2.GetEntitlementsResponse - 31, // [31:36] is the sub-list for method output_type - 26, // [26:31] is the sub-list for method input_type - 26, // [26:26] is the sub-list for extension type_name - 26, // [26:26] is the sub-list for extension extendee - 0, // [0:26] is the sub-list for field type_name + 5, // 15: authorization.v2.GetEntitlementsResponse.entitlements:type_name -> authorization.v2.EntityEntitlements + 2, // 16: authorization.v2.TokenDecisionRequest.token:type_name -> authorization.v2.Token + 24, // 17: authorization.v2.TokenDecisionRequest.action:type_name -> policy.Action + 6, // 18: authorization.v2.TokenDecisionRequest.resources:type_name -> authorization.v2.Resource + 15, // 19: authorization.v2.GetDecisionByTokenRequest.decision_request:type_name -> authorization.v2.TokenDecisionRequest + 8, // 20: authorization.v2.GetDecisionByTokenResponse.decision_response:type_name -> authorization.v2.DecisionResponse + 15, // 21: authorization.v2.GetDecisionBulkByTokenRequest.decision_requests:type_name -> authorization.v2.TokenDecisionRequest + 8, // 22: authorization.v2.GetDecisionBulkByTokenResponse.decision_responses:type_name -> authorization.v2.DecisionResponse + 24, // 23: authorization.v2.EntityEntitlements.ActionsList.actions:type_name -> policy.Action + 20, // 24: authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry.value:type_name -> authorization.v2.EntityEntitlements.ActionsList + 9, // 25: authorization.v2.AuthorizationService.GetDecision:input_type -> authorization.v2.GetDecisionRequest + 11, // 26: authorization.v2.AuthorizationService.GetDecisionBulk:input_type -> authorization.v2.GetDecisionBulkRequest + 16, // 27: authorization.v2.AuthorizationService.GetDecisionByToken:input_type -> authorization.v2.GetDecisionByTokenRequest + 18, // 28: authorization.v2.AuthorizationService.GetDecisionBulkByToken:input_type -> authorization.v2.GetDecisionBulkByTokenRequest + 13, // 29: authorization.v2.AuthorizationService.GetEntitlements:input_type -> authorization.v2.GetEntitlementsRequest + 10, // 30: authorization.v2.AuthorizationService.GetDecision:output_type -> authorization.v2.GetDecisionResponse + 12, // 31: authorization.v2.AuthorizationService.GetDecisionBulk:output_type -> authorization.v2.GetDecisionBulkResponse + 17, // 32: authorization.v2.AuthorizationService.GetDecisionByToken:output_type -> authorization.v2.GetDecisionByTokenResponse + 19, // 33: authorization.v2.AuthorizationService.GetDecisionBulkByToken:output_type -> authorization.v2.GetDecisionBulkByTokenResponse + 14, // 34: authorization.v2.AuthorizationService.GetEntitlements:output_type -> authorization.v2.GetEntitlementsResponse + 30, // [30:35] is the sub-list for method output_type + 25, // [25:30] is the sub-list for method input_type + 25, // [25:25] is the sub-list for extension type_name + 25, // [25:25] is the sub-list for extension extendee + 0, // [0:25] is the sub-list for field type_name } func init() { file_authorization_v2_authorization_proto_init() } diff --git a/service/authorization/v2/authorization.proto b/service/authorization/v2/authorization.proto index b42073c769..c9f31d82c3 100644 --- a/service/authorization/v2/authorization.proto +++ b/service/authorization/v2/authorization.proto @@ -114,13 +114,14 @@ message GetDecisionBulkResponse { } // What can the entity do, broken down as permitted actions on attribute value FQNs +// +// Note: the v1 API parameter 'scope' has been dropped, and it is recommended to use +// GetDecision if the resource is known message GetEntitlementsRequest { // list of requested entities // todo: should this be an entity chain? repeated Entity entities = 1; - // optional resource as a scope - optional Resource scope = 2; - // optional parameter to return a full list of entitlements - returns lower hierarchy attributes + // optional parameter to return all entitled values for attribute definitions with hierarchy rules optional bool with_comprehensive_hierarchy = 3; } message GetEntitlementsResponse { From ab1fc4fd57414b028b71e423aedd9ccdeb840b2a Mon Sep 17 00:00:00 2001 From: jakedoublev Date: Thu, 8 May 2025 10:41:20 -0700 Subject: [PATCH 19/49] comment clarity --- docs/grpc/index.html | 3 ++- protocol/go/authorization/v2/authorization.pb.go | 3 ++- service/authorization/v2/authorization.proto | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/docs/grpc/index.html b/docs/grpc/index.html index bb0ac3b397..ba85509558 100644 --- a/docs/grpc/index.html +++ b/docs/grpc/index.html @@ -4587,7 +4587,8 @@

      GetEntitlementsRequest

      - + diff --git a/protocol/go/authorization/v2/authorization.pb.go b/protocol/go/authorization/v2/authorization.pb.go index 79f643d08f..4f2ee9517e 100644 --- a/protocol/go/authorization/v2/authorization.pb.go +++ b/protocol/go/authorization/v2/authorization.pb.go @@ -868,7 +868,8 @@ type GetEntitlementsRequest struct { // list of requested entities // todo: should this be an entity chain? Entities []*Entity `protobuf:"bytes,1,rep,name=entities,proto3" json:"entities,omitempty"` - // optional parameter to return all entitled values for attribute definitions with hierarchy rules + // optional parameter to return all entitled values for attribute definitions with hierarchy rules, propagating + // down the hierarchical values instead of returning solely the value that is directly entitled WithComprehensiveHierarchy *bool `protobuf:"varint,3,opt,name=with_comprehensive_hierarchy,json=withComprehensiveHierarchy,proto3,oneof" json:"with_comprehensive_hierarchy,omitempty"` } diff --git a/service/authorization/v2/authorization.proto b/service/authorization/v2/authorization.proto index c9f31d82c3..0b0f79eed2 100644 --- a/service/authorization/v2/authorization.proto +++ b/service/authorization/v2/authorization.proto @@ -121,7 +121,8 @@ message GetEntitlementsRequest { // list of requested entities // todo: should this be an entity chain? repeated Entity entities = 1; - // optional parameter to return all entitled values for attribute definitions with hierarchy rules + // optional parameter to return all entitled values for attribute definitions with hierarchy rules, propagating + // down the hierarchical values instead of returning solely the value that is directly entitled optional bool with_comprehensive_hierarchy = 3; } message GetEntitlementsResponse { From 6cfb545a7fab897b15a96d59967106c2c16b61aa Mon Sep 17 00:00:00 2001 From: jakedoublev Date: Tue, 13 May 2025 10:35:17 -0700 Subject: [PATCH 20/49] update protos --- docs/grpc/index.html | 298 +++-- .../authorization/authorization.swagger.json | 3 +- .../v2/authorization.swagger.json | 142 +- .../policy/actions/actions.swagger.json | 3 +- .../policy/attributes/attributes.swagger.json | 3 +- .../resource_mapping.swagger.json | 3 +- .../subject_mapping.swagger.json | 3 +- .../openapi/policy/unsafe/unsafe.swagger.json | 3 +- .../go/authorization/v2/authorization.pb.go | 1145 +++++++++-------- .../authorization/v2/authorization_grpc.pb.go | 76 +- .../authorization.connect.go | 78 +- protocol/go/policy/objects.pb.go | 722 +++++------ service/authorization/v2/authorization.proto | 115 +- service/policy/objects.proto | 6 +- 14 files changed, 1358 insertions(+), 1242 deletions(-) diff --git a/docs/grpc/index.html b/docs/grpc/index.html index a2ced48a2b..3bc027cf39 100644 --- a/docs/grpc/index.html +++ b/docs/grpc/index.html @@ -443,14 +443,6 @@

      Table of Contents

      authorization/v2/authorization.proto
      - + @@ -4196,92 +4192,6 @@

      authorization/v2/authorization.pro

      -

      DecisionRequest

      -

      Can the entity (PE or NPE) represented by one entity chain take the provided action on each resource

      - - -
      scopeResourceoptional

      optional resource as a scope

      with_comprehensive_hierarchy bool optional

      optional parameter to return a full list of entitlements - returns lower hierarchy attributes

      optional parameter to return all entitled values for attribute definitions with hierarchy rules

      with_comprehensive_hierarchy bool optional

      optional parameter to return all entitled values for attribute definitions with hierarchy rules

      optional parameter to return all entitled values for attribute definitions with hierarchy rules, propagating +down the hierarchical values instead of returning solely the value that is directly entitled

      name string

      Name is required to be set whenever an action is passed in an RPC

      - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      FieldTypeLabelDescription
      entityEntityChain

      actionpolicy.Action

      resourcesResourcerepeated

      - - - - - -

      DecisionResponse

      -

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      FieldTypeLabelDescription
      ephemeral_entity_chain_idstring

      ephemeral id for tracking between request and response

      ephemeral_resource_idstring

      ephemeral id for tracking between request and response

      actionpolicy.Action

      action that was requested

      decisionDecisionResponse.Decision

      the decision response - -optional list of obligations represented in URI format -repeated string obligations = 5;

      - - - - -

      Entity

      PE (Person Entity) or NPE (Non-Person Entity)

      @@ -4465,8 +4375,8 @@

      En -

      GetDecisionBulkByTokenRequest

      -

      More performant bulk request for multiple decisions

      +

      GetDecisionBulkRequest

      +

      Can the entities (PE or NPE) access?

      1. Multiplexing of a Decision request

      This is a more performant bulk request for complex decisioning (multiple entity chains or actions on

      multiple resource decisions)

      @@ -4477,7 +4387,7 @@

      GetDecisionBulkByTokenRe

      - + @@ -4489,7 +4399,7 @@

      GetDecisionBulkByTokenRe -

      GetDecisionBulkByTokenResponse

      +

      GetDecisionBulkResponse

      @@ -4501,7 +4411,7 @@

      GetDecisionBulkByTokenR

      - + @@ -4513,8 +4423,8 @@

      GetDecisionBulkByTokenR -

      GetDecisionBulkRequest

      -

      More performant bulk request for multiple decisions

      +

      GetDecisionByTokenRequest

      +

      decision_requestsTokenDecisionRequestGetDecisionMultiResourceRequest repeated

      decision_responsesDecisionResponseGetDecisionMultiResourceResponse repeated

      @@ -4524,9 +4434,9 @@

      GetDecisionBulkRequest

      - - - + + + @@ -4537,7 +4447,7 @@

      GetDecisionBulkRequest

      -

      GetDecisionBulkResponse

      +

      GetDecisionByTokenResponse

      @@ -4548,9 +4458,9 @@

      GetDecisionBulkResponse

      - - - + + + @@ -4561,8 +4471,8 @@

      GetDecisionBulkResponse

      -

      GetDecisionByTokenRequest

      -

      +

      GetDecisionMultiResourceRequest

      +

      Can the entity (PE or NPE) access?

      1. one entity chain

      2. one action

      3. multiple resources

      Note: this is a more performant bulk request for multiple resource decisions

      decision_requestsDecisionRequestrepeateddecision_requestTokenDecisionRequest

      decision_responsesDecisionResponserepeateddecision_responseGetDecisionResponse

      @@ -4572,9 +4482,23 @@

      GetDecisionByTokenRequest

      - - + + + + + + + + + + + + + + + + @@ -4585,7 +4509,7 @@

      GetDecisionByTokenRequestGetDecisionByTokenResponse

      +

      GetDecisionMultiResourceResponse

      @@ -4596,10 +4520,31 @@

      GetDecisionByTokenResponse<

      - - + + - + + + + + + + + + + + + + + + + + + + + + + @@ -4610,7 +4555,7 @@

      GetDecisionByTokenResponse<

      GetDecisionRequest

      -

      +

      Can the entity (PE or NPE) access?

      1. one entity chain

      2. one action

      3. one resource

      decision_requestTokenDecisionRequestentityEntityChain

      The entity chain must be defined

      actionpolicy.Action

      name on action is required

      resourcesResourcerepeated

      decision_responseDecisionResponseephemeral_entity_chain_idstring

      ephemeral id for tracking between request and response

      actionpolicy.Action

      name on action is required

      all_permittedgoogle.protobuf.BoolValue

      convenience flag indicating global resource decisions result (permit/deny)

      resource_decisionsResourceDecisionrepeated

      individual resource decisions

      @@ -4620,8 +4565,22 @@

      GetDecisionRequest

      - - + + + + + + + + + + + + + + + + @@ -4644,10 +4603,34 @@

      GetDecisionResponse

      - - + + - + + + + + + + + + + + + + + + + + + + + + + @@ -4776,6 +4759,37 @@

      Resource.AttributeValues

      +

      ResourceDecision

      +

      + + +
      decision_requestDecisionRequestentityEntityChain

      actionpolicy.Action

      name on action is required

      resourceResource

      decision_responseDecisionResponseephemeral_entity_chain_idstring

      ephemeral id for tracking between request and response

      ephemeral_resource_idstring

      ephemeral id for tracking between request and response

      actionpolicy.Action

      name on action is required

      decisionResourceDecision

      the decision on the resource + +optional list of obligations represented in URI format +repeated string obligations = 5;

      + + + + + + + + + + + + + + + + + + + + +
      FieldTypeLabelDescription
      ephemeral_resource_idstring

      ephemeral id for tracking between request and response

      decisionDecision

      the decision result

      + + + + +

      Token

      @@ -4808,7 +4822,7 @@

      Token

      TokenDecisionRequest

      -

      Can the entity (PE or NPE) represented by this token take the provided action on the set of resources

      +

      Can the entity (PE or NPE) represented by this token take the provided action on the single resource

      @@ -4828,13 +4842,13 @@

      TokenDecisionRequest

      - + - + - + @@ -4847,7 +4861,7 @@

      TokenDecisionRequest

      -

      DecisionResponse.Decision

      +

      Decision

      action policy.Action

      name on action is required

      resourcesresource Resourcerepeated

      @@ -4924,6 +4938,13 @@

      AuthorizationService

      + + + + + + + @@ -4938,13 +4959,6 @@

      AuthorizationService

      - - - - - - - diff --git a/docs/openapi/authorization/authorization.swagger.json b/docs/openapi/authorization/authorization.swagger.json index 58443ba5dd..e49df30e93 100644 --- a/docs/openapi/authorization/authorization.swagger.json +++ b/docs/openapi/authorization/authorization.swagger.json @@ -437,7 +437,8 @@ "title": "Deprecated" }, "name": { - "type": "string" + "type": "string", + "title": "Name is required to be set whenever an action is passed in an RPC" }, "metadata": { "$ref": "#/definitions/commonMetadata" diff --git a/docs/openapi/authorization/v2/authorization.swagger.json b/docs/openapi/authorization/v2/authorization.swagger.json index 7c0a4d372a..083bea8146 100644 --- a/docs/openapi/authorization/v2/authorization.swagger.json +++ b/docs/openapi/authorization/v2/authorization.swagger.json @@ -50,48 +50,7 @@ } } }, - "authorizationv2DecisionRequest": { - "type": "object", - "properties": { - "entity": { - "$ref": "#/definitions/authorizationv2EntityChain" - }, - "action": { - "$ref": "#/definitions/policyAction" - }, - "resources": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v2Resource" - } - } - }, - "title": "Can the entity (PE or NPE) represented by one entity chain take the provided action on each resource" - }, - "authorizationv2DecisionResponse": { - "type": "object", - "properties": { - "ephemeralEntityChainId": { - "type": "string", - "title": "ephemeral id for tracking between request and response" - }, - "ephemeralResourceId": { - "type": "string", - "title": "ephemeral id for tracking between request and response" - }, - "action": { - "$ref": "#/definitions/policyAction", - "title": "action that was requested" - }, - "decision": { - "$ref": "#/definitions/authorizationv2DecisionResponseDecision", - "description": "optional list of obligations represented in URI format\n repeated string obligations = 5;", - "title": "the decision response" - } - } - }, - "authorizationv2DecisionResponseDecision": { + "authorizationv2Decision": { "type": "string", "enum": [ "DECISION_UNSPECIFIED", @@ -206,17 +165,14 @@ "$ref": "#/definitions/authorizationv2Token" }, "action": { - "$ref": "#/definitions/policyAction" + "$ref": "#/definitions/policyAction", + "title": "name on action is required" }, - "resources": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v2Resource" - } + "resource": { + "$ref": "#/definitions/v2Resource" } }, - "title": "Can the entity (PE or NPE) represented by this token take the provided action on the set of resources" + "title": "Can the entity (PE or NPE) represented by this token take the provided action on the single resource" }, "commonMetadata": { "type": "object", @@ -257,7 +213,8 @@ "title": "Deprecated" }, "name": { - "type": "string" + "type": "string", + "title": "Name is required to be set whenever an action is passed in an RPC" }, "metadata": { "$ref": "#/definitions/commonMetadata" @@ -295,43 +252,91 @@ } } }, - "v2GetDecisionBulkByTokenResponse": { + "v2GetDecisionBulkResponse": { "type": "object", "properties": { "decisionResponses": { "type": "array", "items": { "type": "object", - "$ref": "#/definitions/authorizationv2DecisionResponse" + "$ref": "#/definitions/v2GetDecisionMultiResourceResponse" } } } }, - "v2GetDecisionBulkResponse": { + "v2GetDecisionByTokenResponse": { "type": "object", "properties": { - "decisionResponses": { + "decisionResponse": { + "$ref": "#/definitions/v2GetDecisionResponse" + } + } + }, + "v2GetDecisionMultiResourceRequest": { + "type": "object", + "properties": { + "entity": { + "$ref": "#/definitions/authorizationv2EntityChain", + "title": "The entity chain must be defined" + }, + "action": { + "$ref": "#/definitions/policyAction", + "title": "name on action is required" + }, + "resources": { "type": "array", "items": { "type": "object", - "$ref": "#/definitions/authorizationv2DecisionResponse" + "$ref": "#/definitions/v2Resource" } } - } + }, + "title": "Can the entity (PE or NPE) access?\n1. one entity chain\n2. one action\n3. multiple resources\nNote: this is a more performant bulk request for multiple resource decisions" }, - "v2GetDecisionByTokenResponse": { + "v2GetDecisionMultiResourceResponse": { "type": "object", "properties": { - "decisionResponse": { - "$ref": "#/definitions/authorizationv2DecisionResponse" + "ephemeralEntityChainId": { + "type": "string", + "title": "ephemeral id for tracking between request and response" + }, + "action": { + "$ref": "#/definitions/policyAction", + "title": "name on action is required" + }, + "allPermitted": { + "type": "boolean", + "title": "convenience flag indicating global resource decisions result (permit/deny)" + }, + "resourceDecisions": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v2ResourceDecision" + }, + "title": "individual resource decisions" } } }, "v2GetDecisionResponse": { "type": "object", "properties": { - "decisionResponse": { - "$ref": "#/definitions/authorizationv2DecisionResponse" + "ephemeralEntityChainId": { + "type": "string", + "title": "ephemeral id for tracking between request and response" + }, + "ephemeralResourceId": { + "type": "string", + "title": "ephemeral id for tracking between request and response" + }, + "action": { + "$ref": "#/definitions/policyAction", + "title": "name on action is required" + }, + "decision": { + "$ref": "#/definitions/v2ResourceDecision", + "description": "optional list of obligations represented in URI format\n repeated string obligations = 5;", + "title": "the decision on the resource" } } }, @@ -350,6 +355,19 @@ } }, "title": "Either a set of attribute values (such as those on a TDF) or a registered resource value" + }, + "v2ResourceDecision": { + "type": "object", + "properties": { + "ephemeralResourceId": { + "type": "string", + "title": "ephemeral id for tracking between request and response" + }, + "decision": { + "$ref": "#/definitions/authorizationv2Decision", + "title": "the decision result" + } + } } } } diff --git a/docs/openapi/policy/actions/actions.swagger.json b/docs/openapi/policy/actions/actions.swagger.json index 7d40140586..452fb3b0fb 100644 --- a/docs/openapi/policy/actions/actions.swagger.json +++ b/docs/openapi/policy/actions/actions.swagger.json @@ -150,7 +150,8 @@ "title": "Deprecated" }, "name": { - "type": "string" + "type": "string", + "title": "Name is required to be set whenever an action is passed in an RPC" }, "metadata": { "$ref": "#/definitions/commonMetadata" diff --git a/docs/openapi/policy/attributes/attributes.swagger.json b/docs/openapi/policy/attributes/attributes.swagger.json index cc164b7bcd..759137a722 100644 --- a/docs/openapi/policy/attributes/attributes.swagger.json +++ b/docs/openapi/policy/attributes/attributes.swagger.json @@ -1007,7 +1007,8 @@ "title": "Deprecated" }, "name": { - "type": "string" + "type": "string", + "title": "Name is required to be set whenever an action is passed in an RPC" }, "metadata": { "$ref": "#/definitions/commonMetadata" diff --git a/docs/openapi/policy/resourcemapping/resource_mapping.swagger.json b/docs/openapi/policy/resourcemapping/resource_mapping.swagger.json index 6815a6b315..4f6279bdf8 100644 --- a/docs/openapi/policy/resourcemapping/resource_mapping.swagger.json +++ b/docs/openapi/policy/resourcemapping/resource_mapping.swagger.json @@ -513,7 +513,8 @@ "title": "Deprecated" }, "name": { - "type": "string" + "type": "string", + "title": "Name is required to be set whenever an action is passed in an RPC" }, "metadata": { "$ref": "#/definitions/commonMetadata" diff --git a/docs/openapi/policy/subjectmapping/subject_mapping.swagger.json b/docs/openapi/policy/subjectmapping/subject_mapping.swagger.json index 3e64f0da2b..1df0919469 100644 --- a/docs/openapi/policy/subjectmapping/subject_mapping.swagger.json +++ b/docs/openapi/policy/subjectmapping/subject_mapping.swagger.json @@ -520,7 +520,8 @@ "title": "Deprecated" }, "name": { - "type": "string" + "type": "string", + "title": "Name is required to be set whenever an action is passed in an RPC" }, "metadata": { "$ref": "#/definitions/commonMetadata" diff --git a/docs/openapi/policy/unsafe/unsafe.swagger.json b/docs/openapi/policy/unsafe/unsafe.swagger.json index d58a667072..1b42a788e3 100644 --- a/docs/openapi/policy/unsafe/unsafe.swagger.json +++ b/docs/openapi/policy/unsafe/unsafe.swagger.json @@ -410,7 +410,8 @@ "title": "Deprecated" }, "name": { - "type": "string" + "type": "string", + "title": "Name is required to be set whenever an action is passed in an RPC" }, "metadata": { "$ref": "#/definitions/commonMetadata" diff --git a/protocol/go/authorization/v2/authorization.pb.go b/protocol/go/authorization/v2/authorization.pb.go index 4f2ee9517e..f47d0276ee 100644 --- a/protocol/go/authorization/v2/authorization.pb.go +++ b/protocol/go/authorization/v2/authorization.pb.go @@ -7,10 +7,12 @@ package authorizationv2 import ( + _ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate" policy "github.com/opentdf/platform/protocol/go/policy" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" anypb "google.golang.org/protobuf/types/known/anypb" + wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" reflect "reflect" sync "sync" ) @@ -22,102 +24,102 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -type Entity_Category int32 +type Decision int32 const ( - Entity_CATEGORY_UNSPECIFIED Entity_Category = 0 - Entity_CATEGORY_SUBJECT Entity_Category = 1 - Entity_CATEGORY_ENVIRONMENT Entity_Category = 2 + Decision_DECISION_UNSPECIFIED Decision = 0 + Decision_DECISION_DENY Decision = 1 + Decision_DECISION_PERMIT Decision = 2 // DECISION_OBLIGATED = 3; ) -// Enum value maps for Entity_Category. +// Enum value maps for Decision. var ( - Entity_Category_name = map[int32]string{ - 0: "CATEGORY_UNSPECIFIED", - 1: "CATEGORY_SUBJECT", - 2: "CATEGORY_ENVIRONMENT", + Decision_name = map[int32]string{ + 0: "DECISION_UNSPECIFIED", + 1: "DECISION_DENY", + 2: "DECISION_PERMIT", } - Entity_Category_value = map[string]int32{ - "CATEGORY_UNSPECIFIED": 0, - "CATEGORY_SUBJECT": 1, - "CATEGORY_ENVIRONMENT": 2, + Decision_value = map[string]int32{ + "DECISION_UNSPECIFIED": 0, + "DECISION_DENY": 1, + "DECISION_PERMIT": 2, } ) -func (x Entity_Category) Enum() *Entity_Category { - p := new(Entity_Category) +func (x Decision) Enum() *Decision { + p := new(Decision) *p = x return p } -func (x Entity_Category) String() string { +func (x Decision) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (Entity_Category) Descriptor() protoreflect.EnumDescriptor { +func (Decision) Descriptor() protoreflect.EnumDescriptor { return file_authorization_v2_authorization_proto_enumTypes[0].Descriptor() } -func (Entity_Category) Type() protoreflect.EnumType { +func (Decision) Type() protoreflect.EnumType { return &file_authorization_v2_authorization_proto_enumTypes[0] } -func (x Entity_Category) Number() protoreflect.EnumNumber { +func (x Decision) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } -// Deprecated: Use Entity_Category.Descriptor instead. -func (Entity_Category) EnumDescriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{1, 0} +// Deprecated: Use Decision.Descriptor instead. +func (Decision) EnumDescriptor() ([]byte, []int) { + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{0} } -type DecisionResponse_Decision int32 +type Entity_Category int32 const ( - DecisionResponse_DECISION_UNSPECIFIED DecisionResponse_Decision = 0 - DecisionResponse_DECISION_DENY DecisionResponse_Decision = 1 - DecisionResponse_DECISION_PERMIT DecisionResponse_Decision = 2 // DECISION_OBLIGATED = 3; + Entity_CATEGORY_UNSPECIFIED Entity_Category = 0 + Entity_CATEGORY_SUBJECT Entity_Category = 1 + Entity_CATEGORY_ENVIRONMENT Entity_Category = 2 ) -// Enum value maps for DecisionResponse_Decision. +// Enum value maps for Entity_Category. var ( - DecisionResponse_Decision_name = map[int32]string{ - 0: "DECISION_UNSPECIFIED", - 1: "DECISION_DENY", - 2: "DECISION_PERMIT", + Entity_Category_name = map[int32]string{ + 0: "CATEGORY_UNSPECIFIED", + 1: "CATEGORY_SUBJECT", + 2: "CATEGORY_ENVIRONMENT", } - DecisionResponse_Decision_value = map[string]int32{ - "DECISION_UNSPECIFIED": 0, - "DECISION_DENY": 1, - "DECISION_PERMIT": 2, + Entity_Category_value = map[string]int32{ + "CATEGORY_UNSPECIFIED": 0, + "CATEGORY_SUBJECT": 1, + "CATEGORY_ENVIRONMENT": 2, } ) -func (x DecisionResponse_Decision) Enum() *DecisionResponse_Decision { - p := new(DecisionResponse_Decision) +func (x Entity_Category) Enum() *Entity_Category { + p := new(Entity_Category) *p = x return p } -func (x DecisionResponse_Decision) String() string { +func (x Entity_Category) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (DecisionResponse_Decision) Descriptor() protoreflect.EnumDescriptor { +func (Entity_Category) Descriptor() protoreflect.EnumDescriptor { return file_authorization_v2_authorization_proto_enumTypes[1].Descriptor() } -func (DecisionResponse_Decision) Type() protoreflect.EnumType { +func (Entity_Category) Type() protoreflect.EnumType { return &file_authorization_v2_authorization_proto_enumTypes[1] } -func (x DecisionResponse_Decision) Number() protoreflect.EnumNumber { +func (x Entity_Category) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } -// Deprecated: Use DecisionResponse_Decision.Descriptor instead. -func (DecisionResponse_Decision) EnumDescriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{6, 0} +// Deprecated: Use Entity_Category.Descriptor instead. +func (Entity_Category) EnumDescriptor() ([]byte, []int) { + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{1, 0} } type Token struct { @@ -528,19 +530,19 @@ func (*Resource_AttributeValues_) isResource_Resource() {} func (*Resource_RegisteredResourceValueFqn) isResource_Resource() {} -// Can the entity (PE or NPE) represented by one entity chain take the provided action on each resource -type DecisionRequest struct { +type ResourceDecision struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Entity *EntityChain `protobuf:"bytes,1,opt,name=entity,proto3" json:"entity,omitempty"` - Action *policy.Action `protobuf:"bytes,2,opt,name=action,proto3" json:"action,omitempty"` - Resources []*Resource `protobuf:"bytes,3,rep,name=resources,proto3" json:"resources,omitempty"` + // ephemeral id for tracking between request and response + EphemeralResourceId string `protobuf:"bytes,1,opt,name=ephemeral_resource_id,json=ephemeralResourceId,proto3" json:"ephemeral_resource_id,omitempty"` + // the decision result + Decision Decision `protobuf:"varint,3,opt,name=decision,proto3,enum=authorization.v2.Decision" json:"decision,omitempty"` } -func (x *DecisionRequest) Reset() { - *x = DecisionRequest{} +func (x *ResourceDecision) Reset() { + *x = ResourceDecision{} if protoimpl.UnsafeEnabled { mi := &file_authorization_v2_authorization_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -548,13 +550,13 @@ func (x *DecisionRequest) Reset() { } } -func (x *DecisionRequest) String() string { +func (x *ResourceDecision) String() string { return protoimpl.X.MessageStringOf(x) } -func (*DecisionRequest) ProtoMessage() {} +func (*ResourceDecision) ProtoMessage() {} -func (x *DecisionRequest) ProtoReflect() protoreflect.Message { +func (x *ResourceDecision) ProtoReflect() protoreflect.Message { mi := &file_authorization_v2_authorization_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -566,33 +568,94 @@ func (x *DecisionRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use DecisionRequest.ProtoReflect.Descriptor instead. -func (*DecisionRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use ResourceDecision.ProtoReflect.Descriptor instead. +func (*ResourceDecision) Descriptor() ([]byte, []int) { return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{5} } -func (x *DecisionRequest) GetEntity() *EntityChain { +func (x *ResourceDecision) GetEphemeralResourceId() string { + if x != nil { + return x.EphemeralResourceId + } + return "" +} + +func (x *ResourceDecision) GetDecision() Decision { + if x != nil { + return x.Decision + } + return Decision_DECISION_UNSPECIFIED +} + +// Can the entity (PE or NPE) access? +// 1. one entity chain +// 2. one action +// 3. one resource +type GetDecisionRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Entity *EntityChain `protobuf:"bytes,1,opt,name=entity,proto3" json:"entity,omitempty"` + // name on action is required + Action *policy.Action `protobuf:"bytes,2,opt,name=action,proto3" json:"action,omitempty"` + Resource *Resource `protobuf:"bytes,3,opt,name=resource,proto3" json:"resource,omitempty"` +} + +func (x *GetDecisionRequest) Reset() { + *x = GetDecisionRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_authorization_v2_authorization_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetDecisionRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetDecisionRequest) ProtoMessage() {} + +func (x *GetDecisionRequest) ProtoReflect() protoreflect.Message { + mi := &file_authorization_v2_authorization_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetDecisionRequest.ProtoReflect.Descriptor instead. +func (*GetDecisionRequest) Descriptor() ([]byte, []int) { + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{6} +} + +func (x *GetDecisionRequest) GetEntity() *EntityChain { if x != nil { return x.Entity } return nil } -func (x *DecisionRequest) GetAction() *policy.Action { +func (x *GetDecisionRequest) GetAction() *policy.Action { if x != nil { return x.Action } return nil } -func (x *DecisionRequest) GetResources() []*Resource { +func (x *GetDecisionRequest) GetResource() *Resource { if x != nil { - return x.Resources + return x.Resource } return nil } -type DecisionResponse struct { +type GetDecisionResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -601,29 +664,29 @@ type DecisionResponse struct { EphemeralEntityChainId string `protobuf:"bytes,1,opt,name=ephemeral_entity_chain_id,json=ephemeralEntityChainId,proto3" json:"ephemeral_entity_chain_id,omitempty"` // ephemeral id for tracking between request and response EphemeralResourceId string `protobuf:"bytes,2,opt,name=ephemeral_resource_id,json=ephemeralResourceId,proto3" json:"ephemeral_resource_id,omitempty"` - // action that was requested + // name on action is required Action *policy.Action `protobuf:"bytes,3,opt,name=action,proto3" json:"action,omitempty"` - // the decision response - Decision DecisionResponse_Decision `protobuf:"varint,4,opt,name=decision,proto3,enum=authorization.v2.DecisionResponse_Decision" json:"decision,omitempty"` + // the decision on the resource + Decision *ResourceDecision `protobuf:"bytes,4,opt,name=decision,proto3" json:"decision,omitempty"` } -func (x *DecisionResponse) Reset() { - *x = DecisionResponse{} +func (x *GetDecisionResponse) Reset() { + *x = GetDecisionResponse{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[6] + mi := &file_authorization_v2_authorization_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *DecisionResponse) String() string { +func (x *GetDecisionResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*DecisionResponse) ProtoMessage() {} +func (*GetDecisionResponse) ProtoMessage() {} -func (x *DecisionResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[6] +func (x *GetDecisionResponse) ProtoReflect() protoreflect.Message { + mi := &file_authorization_v2_authorization_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -634,64 +697,73 @@ func (x *DecisionResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use DecisionResponse.ProtoReflect.Descriptor instead. -func (*DecisionResponse) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{6} +// Deprecated: Use GetDecisionResponse.ProtoReflect.Descriptor instead. +func (*GetDecisionResponse) Descriptor() ([]byte, []int) { + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{7} } -func (x *DecisionResponse) GetEphemeralEntityChainId() string { +func (x *GetDecisionResponse) GetEphemeralEntityChainId() string { if x != nil { return x.EphemeralEntityChainId } return "" } -func (x *DecisionResponse) GetEphemeralResourceId() string { +func (x *GetDecisionResponse) GetEphemeralResourceId() string { if x != nil { return x.EphemeralResourceId } return "" } -func (x *DecisionResponse) GetAction() *policy.Action { +func (x *GetDecisionResponse) GetAction() *policy.Action { if x != nil { return x.Action } return nil } -func (x *DecisionResponse) GetDecision() DecisionResponse_Decision { +func (x *GetDecisionResponse) GetDecision() *ResourceDecision { if x != nil { return x.Decision } - return DecisionResponse_DECISION_UNSPECIFIED + return nil } -type GetDecisionRequest struct { +// Can the entity (PE or NPE) access? +// 1. one entity chain +// 2. one action +// 3. multiple resources +// Note: this is a more performant bulk request for multiple resource decisions +type GetDecisionMultiResourceRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - DecisionRequest *DecisionRequest `protobuf:"bytes,1,opt,name=decision_request,json=decisionRequest,proto3" json:"decision_request,omitempty"` + // The entity chain must be defined + Entity *EntityChain `protobuf:"bytes,1,opt,name=entity,proto3" json:"entity,omitempty"` + // name on action is required + Action *policy.Action `protobuf:"bytes,2,opt,name=action,proto3" json:"action,omitempty"` + Resources []*Resource `protobuf:"bytes,3,rep,name=resources,proto3" json:"resources,omitempty"` } -func (x *GetDecisionRequest) Reset() { - *x = GetDecisionRequest{} +func (x *GetDecisionMultiResourceRequest) Reset() { + *x = GetDecisionMultiResourceRequest{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[7] + mi := &file_authorization_v2_authorization_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *GetDecisionRequest) String() string { +func (x *GetDecisionMultiResourceRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetDecisionRequest) ProtoMessage() {} +func (*GetDecisionMultiResourceRequest) ProtoMessage() {} -func (x *GetDecisionRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[7] +func (x *GetDecisionMultiResourceRequest) ProtoReflect() protoreflect.Message { + mi := &file_authorization_v2_authorization_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -702,43 +774,64 @@ func (x *GetDecisionRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetDecisionRequest.ProtoReflect.Descriptor instead. -func (*GetDecisionRequest) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{7} +// Deprecated: Use GetDecisionMultiResourceRequest.ProtoReflect.Descriptor instead. +func (*GetDecisionMultiResourceRequest) Descriptor() ([]byte, []int) { + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{8} } -func (x *GetDecisionRequest) GetDecisionRequest() *DecisionRequest { +func (x *GetDecisionMultiResourceRequest) GetEntity() *EntityChain { if x != nil { - return x.DecisionRequest + return x.Entity } return nil } -type GetDecisionResponse struct { +func (x *GetDecisionMultiResourceRequest) GetAction() *policy.Action { + if x != nil { + return x.Action + } + return nil +} + +func (x *GetDecisionMultiResourceRequest) GetResources() []*Resource { + if x != nil { + return x.Resources + } + return nil +} + +type GetDecisionMultiResourceResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - DecisionResponse *DecisionResponse `protobuf:"bytes,1,opt,name=decision_response,json=decisionResponse,proto3" json:"decision_response,omitempty"` + // ephemeral id for tracking between request and response + EphemeralEntityChainId string `protobuf:"bytes,1,opt,name=ephemeral_entity_chain_id,json=ephemeralEntityChainId,proto3" json:"ephemeral_entity_chain_id,omitempty"` + // name on action is required + Action *policy.Action `protobuf:"bytes,3,opt,name=action,proto3" json:"action,omitempty"` + // convenience flag indicating global resource decisions result (permit/deny) + AllPermitted *wrapperspb.BoolValue `protobuf:"bytes,2,opt,name=all_permitted,json=allPermitted,proto3" json:"all_permitted,omitempty"` + // individual resource decisions + ResourceDecisions []*ResourceDecision `protobuf:"bytes,4,rep,name=resource_decisions,json=resourceDecisions,proto3" json:"resource_decisions,omitempty"` } -func (x *GetDecisionResponse) Reset() { - *x = GetDecisionResponse{} +func (x *GetDecisionMultiResourceResponse) Reset() { + *x = GetDecisionMultiResourceResponse{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[8] + mi := &file_authorization_v2_authorization_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *GetDecisionResponse) String() string { +func (x *GetDecisionMultiResourceResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetDecisionResponse) ProtoMessage() {} +func (*GetDecisionMultiResourceResponse) ProtoMessage() {} -func (x *GetDecisionResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[8] +func (x *GetDecisionMultiResourceResponse) ProtoReflect() protoreflect.Message { + mi := &file_authorization_v2_authorization_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -749,31 +842,55 @@ func (x *GetDecisionResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetDecisionResponse.ProtoReflect.Descriptor instead. -func (*GetDecisionResponse) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{8} +// Deprecated: Use GetDecisionMultiResourceResponse.ProtoReflect.Descriptor instead. +func (*GetDecisionMultiResourceResponse) Descriptor() ([]byte, []int) { + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{9} } -func (x *GetDecisionResponse) GetDecisionResponse() *DecisionResponse { +func (x *GetDecisionMultiResourceResponse) GetEphemeralEntityChainId() string { if x != nil { - return x.DecisionResponse + return x.EphemeralEntityChainId + } + return "" +} + +func (x *GetDecisionMultiResourceResponse) GetAction() *policy.Action { + if x != nil { + return x.Action } return nil } -// More performant bulk request for multiple decisions +func (x *GetDecisionMultiResourceResponse) GetAllPermitted() *wrapperspb.BoolValue { + if x != nil { + return x.AllPermitted + } + return nil +} + +func (x *GetDecisionMultiResourceResponse) GetResourceDecisions() []*ResourceDecision { + if x != nil { + return x.ResourceDecisions + } + return nil +} + +// Can the entities (PE or NPE) access? +// 1. Multiplexing of a Decision request +// This is a more performant bulk request for complex decisioning (multiple entity chains or actions on +// multiple resource decisions) type GetDecisionBulkRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - DecisionRequests []*DecisionRequest `protobuf:"bytes,1,rep,name=decision_requests,json=decisionRequests,proto3" json:"decision_requests,omitempty"` + DecisionRequests []*GetDecisionMultiResourceRequest `protobuf:"bytes,1,rep,name=decision_requests,json=decisionRequests,proto3" json:"decision_requests,omitempty"` } func (x *GetDecisionBulkRequest) Reset() { *x = GetDecisionBulkRequest{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[9] + mi := &file_authorization_v2_authorization_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -786,7 +903,7 @@ func (x *GetDecisionBulkRequest) String() string { func (*GetDecisionBulkRequest) ProtoMessage() {} func (x *GetDecisionBulkRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[9] + mi := &file_authorization_v2_authorization_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -799,10 +916,10 @@ func (x *GetDecisionBulkRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDecisionBulkRequest.ProtoReflect.Descriptor instead. func (*GetDecisionBulkRequest) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{9} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{10} } -func (x *GetDecisionBulkRequest) GetDecisionRequests() []*DecisionRequest { +func (x *GetDecisionBulkRequest) GetDecisionRequests() []*GetDecisionMultiResourceRequest { if x != nil { return x.DecisionRequests } @@ -814,13 +931,13 @@ type GetDecisionBulkResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - DecisionResponses []*DecisionResponse `protobuf:"bytes,1,rep,name=decision_responses,json=decisionResponses,proto3" json:"decision_responses,omitempty"` + DecisionResponses []*GetDecisionMultiResourceResponse `protobuf:"bytes,1,rep,name=decision_responses,json=decisionResponses,proto3" json:"decision_responses,omitempty"` } func (x *GetDecisionBulkResponse) Reset() { *x = GetDecisionBulkResponse{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[10] + mi := &file_authorization_v2_authorization_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -833,7 +950,7 @@ func (x *GetDecisionBulkResponse) String() string { func (*GetDecisionBulkResponse) ProtoMessage() {} func (x *GetDecisionBulkResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[10] + mi := &file_authorization_v2_authorization_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -846,10 +963,10 @@ func (x *GetDecisionBulkResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDecisionBulkResponse.ProtoReflect.Descriptor instead. func (*GetDecisionBulkResponse) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{10} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{11} } -func (x *GetDecisionBulkResponse) GetDecisionResponses() []*DecisionResponse { +func (x *GetDecisionBulkResponse) GetDecisionResponses() []*GetDecisionMultiResourceResponse { if x != nil { return x.DecisionResponses } @@ -876,7 +993,7 @@ type GetEntitlementsRequest struct { func (x *GetEntitlementsRequest) Reset() { *x = GetEntitlementsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[11] + mi := &file_authorization_v2_authorization_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -889,7 +1006,7 @@ func (x *GetEntitlementsRequest) String() string { func (*GetEntitlementsRequest) ProtoMessage() {} func (x *GetEntitlementsRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[11] + mi := &file_authorization_v2_authorization_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -902,7 +1019,7 @@ func (x *GetEntitlementsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetEntitlementsRequest.ProtoReflect.Descriptor instead. func (*GetEntitlementsRequest) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{11} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{12} } func (x *GetEntitlementsRequest) GetEntities() []*Entity { @@ -930,7 +1047,7 @@ type GetEntitlementsResponse struct { func (x *GetEntitlementsResponse) Reset() { *x = GetEntitlementsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[12] + mi := &file_authorization_v2_authorization_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -943,7 +1060,7 @@ func (x *GetEntitlementsResponse) String() string { func (*GetEntitlementsResponse) ProtoMessage() {} func (x *GetEntitlementsResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[12] + mi := &file_authorization_v2_authorization_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -956,7 +1073,7 @@ func (x *GetEntitlementsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetEntitlementsResponse.ProtoReflect.Descriptor instead. func (*GetEntitlementsResponse) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{12} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{13} } func (x *GetEntitlementsResponse) GetEntitlements() []*EntityEntitlements { @@ -966,21 +1083,22 @@ func (x *GetEntitlementsResponse) GetEntitlements() []*EntityEntitlements { return nil } -// Can the entity (PE or NPE) represented by this token take the provided action on the set of resources +// Can the entity (PE or NPE) represented by this token take the provided action on the single resource type TokenDecisionRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Token *Token `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` - Action *policy.Action `protobuf:"bytes,2,opt,name=action,proto3" json:"action,omitempty"` - Resources []*Resource `protobuf:"bytes,3,rep,name=resources,proto3" json:"resources,omitempty"` + Token *Token `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` + // name on action is required + Action *policy.Action `protobuf:"bytes,2,opt,name=action,proto3" json:"action,omitempty"` + Resource *Resource `protobuf:"bytes,3,opt,name=resource,proto3" json:"resource,omitempty"` } func (x *TokenDecisionRequest) Reset() { *x = TokenDecisionRequest{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[13] + mi := &file_authorization_v2_authorization_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -993,7 +1111,7 @@ func (x *TokenDecisionRequest) String() string { func (*TokenDecisionRequest) ProtoMessage() {} func (x *TokenDecisionRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[13] + mi := &file_authorization_v2_authorization_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1006,7 +1124,7 @@ func (x *TokenDecisionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TokenDecisionRequest.ProtoReflect.Descriptor instead. func (*TokenDecisionRequest) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{13} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{14} } func (x *TokenDecisionRequest) GetToken() *Token { @@ -1023,9 +1141,9 @@ func (x *TokenDecisionRequest) GetAction() *policy.Action { return nil } -func (x *TokenDecisionRequest) GetResources() []*Resource { +func (x *TokenDecisionRequest) GetResource() *Resource { if x != nil { - return x.Resources + return x.Resource } return nil } @@ -1041,7 +1159,7 @@ type GetDecisionByTokenRequest struct { func (x *GetDecisionByTokenRequest) Reset() { *x = GetDecisionByTokenRequest{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[14] + mi := &file_authorization_v2_authorization_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1054,7 +1172,7 @@ func (x *GetDecisionByTokenRequest) String() string { func (*GetDecisionByTokenRequest) ProtoMessage() {} func (x *GetDecisionByTokenRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[14] + mi := &file_authorization_v2_authorization_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1067,7 +1185,7 @@ func (x *GetDecisionByTokenRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDecisionByTokenRequest.ProtoReflect.Descriptor instead. func (*GetDecisionByTokenRequest) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{14} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{15} } func (x *GetDecisionByTokenRequest) GetDecisionRequest() *TokenDecisionRequest { @@ -1082,13 +1200,13 @@ type GetDecisionByTokenResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - DecisionResponse *DecisionResponse `protobuf:"bytes,1,opt,name=decision_response,json=decisionResponse,proto3" json:"decision_response,omitempty"` + DecisionResponse *GetDecisionResponse `protobuf:"bytes,1,opt,name=decision_response,json=decisionResponse,proto3" json:"decision_response,omitempty"` } func (x *GetDecisionByTokenResponse) Reset() { *x = GetDecisionByTokenResponse{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[15] + mi := &file_authorization_v2_authorization_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1101,7 +1219,7 @@ func (x *GetDecisionByTokenResponse) String() string { func (*GetDecisionByTokenResponse) ProtoMessage() {} func (x *GetDecisionByTokenResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[15] + mi := &file_authorization_v2_authorization_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1114,107 +1232,12 @@ func (x *GetDecisionByTokenResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDecisionByTokenResponse.ProtoReflect.Descriptor instead. func (*GetDecisionByTokenResponse) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{15} -} - -func (x *GetDecisionByTokenResponse) GetDecisionResponse() *DecisionResponse { - if x != nil { - return x.DecisionResponse - } - return nil -} - -// More performant bulk request for multiple decisions -type GetDecisionBulkByTokenRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - DecisionRequests []*TokenDecisionRequest `protobuf:"bytes,1,rep,name=decision_requests,json=decisionRequests,proto3" json:"decision_requests,omitempty"` -} - -func (x *GetDecisionBulkByTokenRequest) Reset() { - *x = GetDecisionBulkByTokenRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetDecisionBulkByTokenRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetDecisionBulkByTokenRequest) ProtoMessage() {} - -func (x *GetDecisionBulkByTokenRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetDecisionBulkByTokenRequest.ProtoReflect.Descriptor instead. -func (*GetDecisionBulkByTokenRequest) Descriptor() ([]byte, []int) { return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{16} } -func (x *GetDecisionBulkByTokenRequest) GetDecisionRequests() []*TokenDecisionRequest { +func (x *GetDecisionByTokenResponse) GetDecisionResponse() *GetDecisionResponse { if x != nil { - return x.DecisionRequests - } - return nil -} - -type GetDecisionBulkByTokenResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - DecisionResponses []*DecisionResponse `protobuf:"bytes,1,rep,name=decision_responses,json=decisionResponses,proto3" json:"decision_responses,omitempty"` -} - -func (x *GetDecisionBulkByTokenResponse) Reset() { - *x = GetDecisionBulkByTokenResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetDecisionBulkByTokenResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetDecisionBulkByTokenResponse) ProtoMessage() {} - -func (x *GetDecisionBulkByTokenResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetDecisionBulkByTokenResponse.ProtoReflect.Descriptor instead. -func (*GetDecisionBulkByTokenResponse) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{17} -} - -func (x *GetDecisionBulkByTokenResponse) GetDecisionResponses() []*DecisionResponse { - if x != nil { - return x.DecisionResponses + return x.DecisionResponse } return nil } @@ -1230,7 +1253,7 @@ type EntityEntitlements_ActionsList struct { func (x *EntityEntitlements_ActionsList) Reset() { *x = EntityEntitlements_ActionsList{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[18] + mi := &file_authorization_v2_authorization_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1243,7 +1266,7 @@ func (x *EntityEntitlements_ActionsList) String() string { func (*EntityEntitlements_ActionsList) ProtoMessage() {} func (x *EntityEntitlements_ActionsList) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[18] + mi := &file_authorization_v2_authorization_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1277,7 +1300,7 @@ type Resource_AttributeValues struct { func (x *Resource_AttributeValues) Reset() { *x = Resource_AttributeValues{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[20] + mi := &file_authorization_v2_authorization_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1290,7 +1313,7 @@ func (x *Resource_AttributeValues) String() string { func (*Resource_AttributeValues) ProtoMessage() {} func (x *Resource_AttributeValues) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[20] + mi := &file_authorization_v2_authorization_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1319,209 +1342,240 @@ var file_authorization_v2_authorization_proto_rawDesc = []byte{ 0x0a, 0x24, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2f, 0x6f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x3c, 0x0a, 0x05, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, - 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6a, 0x77, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6a, 0x77, 0x74, 0x22, 0xa9, 0x03, 0x0a, 0x06, 0x45, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, - 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0d, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x61, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0c, - 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1d, 0x0a, 0x09, - 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, - 0x00, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x06, 0x63, - 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, - 0x79, 0x48, 0x00, 0x52, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x12, 0x1d, 0x0a, 0x09, 0x63, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, - 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x1d, 0x72, 0x65, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x14, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x44, 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, + 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, + 0x49, 0x64, 0x12, 0x18, 0x0a, 0x03, 0x6a, 0x77, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x03, 0x6a, 0x77, 0x74, 0x22, 0xa9, 0x03, 0x0a, + 0x06, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, + 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, + 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0d, 0x65, 0x6d, + 0x61, 0x69, 0x6c, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x48, 0x00, 0x52, 0x0c, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x12, 0x1d, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x2e, 0x0a, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x48, 0x00, 0x52, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, + 0x12, 0x1d, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, + 0x43, 0x0a, 0x1d, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x1a, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x46, 0x71, 0x6e, 0x12, 0x3d, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x2e, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, + 0x6f, 0x72, 0x79, 0x22, 0x54, 0x0a, 0x08, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, + 0x18, 0x0a, 0x14, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, + 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x41, 0x54, + 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x53, 0x55, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x01, 0x12, + 0x18, 0x0a, 0x14, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x45, 0x4e, 0x56, 0x49, + 0x52, 0x4f, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x42, 0x0d, 0x0a, 0x0b, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x73, 0x0a, 0x0b, 0x45, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, + 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, + 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x41, 0x0a, 0x08, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x92, 0x01, + 0x02, 0x08, 0x01, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0x81, 0x03, + 0x0a, 0x12, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, + 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, + 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x8b, 0x01, 0x0a, 0x1f, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x45, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, + 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x46, 0x71, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x1b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x46, 0x71, 0x6e, 0x1a, 0x37, 0x0a, 0x0b, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x80, + 0x01, 0x0a, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x46, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, + 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x22, 0xfe, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x21, + 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, + 0x64, 0x12, 0x57, 0x0a, 0x10, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x48, 0x00, 0x52, 0x0f, 0x61, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x43, 0x0a, 0x1d, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x1a, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x12, - 0x3d, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x21, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x43, 0x61, 0x74, 0x65, - 0x67, 0x6f, 0x72, 0x79, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x22, 0x54, - 0x0a, 0x08, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x41, - 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, - 0x45, 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, - 0x5f, 0x53, 0x55, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x41, - 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x45, 0x4e, 0x56, 0x49, 0x52, 0x4f, 0x4e, 0x4d, 0x45, - 0x4e, 0x54, 0x10, 0x02, 0x42, 0x0d, 0x0a, 0x0b, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x22, 0x66, 0x0a, 0x0b, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, - 0x69, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, - 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0x81, 0x03, 0x0a, 0x12, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, - 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x8b, 0x01, 0x0a, 0x1f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x45, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, - 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, - 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x1b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, - 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x46, 0x71, 0x6e, 0x1a, 0x37, 0x0a, 0x0b, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, - 0x73, 0x74, 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x80, 0x01, 0x0a, - 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x46, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, - 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, - 0xfe, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, - 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, - 0x57, 0x0a, 0x10, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x1a, + 0x25, 0x0a, 0x0f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x04, 0x66, 0x71, 0x6e, 0x73, 0x42, 0x0a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x22, 0x7e, 0x0a, 0x10, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x0a, 0x15, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, + 0x72, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x08, 0x64, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x22, 0xc3, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x06, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, + 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x2e, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, + 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x08, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0xec, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, + 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x39, 0x0a, 0x19, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x16, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x45, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x15, 0x65, + 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x65, 0x70, 0x68, 0x65, + 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, + 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x0a, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x73, 0x48, 0x00, 0x52, 0x0f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x43, 0x0a, 0x1d, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, - 0x00, 0x52, 0x1a, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x1a, 0x25, 0x0a, - 0x0f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, - 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, - 0x66, 0x71, 0x6e, 0x73, 0x42, 0x0a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x22, 0xaa, 0x01, 0x0a, 0x0f, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x35, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, - 0x61, 0x69, 0x6e, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x26, 0x0a, 0x06, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x22, 0xc0, 0x02, - 0x0a, 0x10, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x32, 0x0a, - 0x15, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x65, 0x70, - 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xd7, 0x01, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x44, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x06, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, + 0x01, 0x01, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x2e, 0x0a, 0x06, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, + 0x01, 0x01, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x09, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, + 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, + 0x01, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x73, 0x22, 0x99, 0x02, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, + 0x72, 0x61, 0x6c, 0x5f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x65, 0x70, 0x68, 0x65, 0x6d, + 0x65, 0x72, 0x61, 0x6c, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x47, 0x0a, 0x08, 0x64, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, - 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x22, 0x4c, 0x0a, 0x08, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, + 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, + 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x61, 0x6c, + 0x6c, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x12, 0x51, 0x0a, 0x12, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x78, 0x0a, + 0x16, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5e, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, 0x7c, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x44, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x61, 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, + 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, + 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22, 0xc3, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, + 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x41, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x42, 0x0b, 0xba, 0x48, + 0x08, 0xc8, 0x01, 0x01, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x69, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x1c, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, + 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, + 0x63, 0x68, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x1a, 0x77, 0x69, 0x74, + 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x48, 0x69, + 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x88, 0x01, 0x01, 0x42, 0x1f, 0x0a, 0x1d, 0x5f, 0x77, + 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, + 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x22, 0x63, 0x0a, 0x17, 0x47, + 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x22, 0xbd, 0x01, 0x0a, 0x14, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x35, 0x0a, 0x05, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, + 0x12, 0x2e, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x3e, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x06, + 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x22, 0x6e, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, + 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x51, 0x0a, + 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, + 0x0f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x22, 0x70, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, + 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, + 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, + 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x2a, 0x4c, 0x0a, 0x08, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x14, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4e, 0x59, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x54, 0x10, 0x02, - 0x22, 0x62, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x21, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x52, 0x0f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x22, 0x66, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x11, 0x64, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x68, 0x0a, 0x16, - 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4e, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, 0x6c, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x51, 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x73, 0x22, 0xb6, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, - 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x34, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x1c, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, - 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, - 0x61, 0x72, 0x63, 0x68, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x1a, 0x77, - 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, - 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x88, 0x01, 0x01, 0x42, 0x1f, 0x0a, 0x1d, - 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, - 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x22, 0x63, 0x0a, - 0x17, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, + 0x32, 0xc1, 0x04, 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5c, 0x0a, 0x0b, 0x47, 0x65, 0x74, + 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x22, 0xa7, 0x01, 0x0a, 0x14, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x05, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x26, 0x0a, 0x06, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x38, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x22, 0x6e, 0x0a, 0x19, - 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x51, 0x0a, 0x10, 0x64, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0f, 0x64, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x6d, 0x0a, 0x1a, - 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x11, 0x64, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x74, 0x0a, 0x1d, 0x47, - 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x42, 0x79, - 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x53, 0x0a, 0x11, - 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, - 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x73, 0x22, 0x73, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x42, 0x75, 0x6c, 0x6b, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, - 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x32, 0xba, 0x04, 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, - 0x5c, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, - 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x83, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x44, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x12, 0x31, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, + 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x12, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, @@ -1535,36 +1589,28 @@ var file_authorization_v2_authorization_proto_rawDesc = []byte{ 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7d, 0x0a, 0x16, 0x47, 0x65, - 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x42, 0x79, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2f, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x0f, 0x47, 0x65, 0x74, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x28, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, - 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, - 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x42, 0xd5, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x42, 0x12, 0x41, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x50, 0x01, 0x5a, 0x48, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, - 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, 0x6f, 0x2f, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x3b, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x32, 0xa2, 0x02, 0x03, 0x41, - 0x58, 0x58, 0xaa, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x1c, 0x41, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x0f, 0x47, 0x65, + 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x28, 0x2e, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, + 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, + 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x42, 0xd5, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x42, 0x12, 0x41, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x50, 0x01, 0x5a, 0x48, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, 0x6f, 0x2f, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x3b, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x32, 0xa2, 0x02, 0x03, + 0x41, 0x58, 0x58, 0xaa, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x1c, 0x41, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x41, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1580,75 +1626,78 @@ func file_authorization_v2_authorization_proto_rawDescGZIP() []byte { } var file_authorization_v2_authorization_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_authorization_v2_authorization_proto_msgTypes = make([]protoimpl.MessageInfo, 21) +var file_authorization_v2_authorization_proto_msgTypes = make([]protoimpl.MessageInfo, 20) var file_authorization_v2_authorization_proto_goTypes = []interface{}{ - (Entity_Category)(0), // 0: authorization.v2.Entity.Category - (DecisionResponse_Decision)(0), // 1: authorization.v2.DecisionResponse.Decision - (*Token)(nil), // 2: authorization.v2.Token - (*Entity)(nil), // 3: authorization.v2.Entity - (*EntityChain)(nil), // 4: authorization.v2.EntityChain - (*EntityEntitlements)(nil), // 5: authorization.v2.EntityEntitlements - (*Resource)(nil), // 6: authorization.v2.Resource - (*DecisionRequest)(nil), // 7: authorization.v2.DecisionRequest - (*DecisionResponse)(nil), // 8: authorization.v2.DecisionResponse - (*GetDecisionRequest)(nil), // 9: authorization.v2.GetDecisionRequest - (*GetDecisionResponse)(nil), // 10: authorization.v2.GetDecisionResponse - (*GetDecisionBulkRequest)(nil), // 11: authorization.v2.GetDecisionBulkRequest - (*GetDecisionBulkResponse)(nil), // 12: authorization.v2.GetDecisionBulkResponse - (*GetEntitlementsRequest)(nil), // 13: authorization.v2.GetEntitlementsRequest - (*GetEntitlementsResponse)(nil), // 14: authorization.v2.GetEntitlementsResponse - (*TokenDecisionRequest)(nil), // 15: authorization.v2.TokenDecisionRequest - (*GetDecisionByTokenRequest)(nil), // 16: authorization.v2.GetDecisionByTokenRequest - (*GetDecisionByTokenResponse)(nil), // 17: authorization.v2.GetDecisionByTokenResponse - (*GetDecisionBulkByTokenRequest)(nil), // 18: authorization.v2.GetDecisionBulkByTokenRequest - (*GetDecisionBulkByTokenResponse)(nil), // 19: authorization.v2.GetDecisionBulkByTokenResponse - (*EntityEntitlements_ActionsList)(nil), // 20: authorization.v2.EntityEntitlements.ActionsList - nil, // 21: authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry - (*Resource_AttributeValues)(nil), // 22: authorization.v2.Resource.AttributeValues - (*anypb.Any)(nil), // 23: google.protobuf.Any - (*policy.Action)(nil), // 24: policy.Action + (Decision)(0), // 0: authorization.v2.Decision + (Entity_Category)(0), // 1: authorization.v2.Entity.Category + (*Token)(nil), // 2: authorization.v2.Token + (*Entity)(nil), // 3: authorization.v2.Entity + (*EntityChain)(nil), // 4: authorization.v2.EntityChain + (*EntityEntitlements)(nil), // 5: authorization.v2.EntityEntitlements + (*Resource)(nil), // 6: authorization.v2.Resource + (*ResourceDecision)(nil), // 7: authorization.v2.ResourceDecision + (*GetDecisionRequest)(nil), // 8: authorization.v2.GetDecisionRequest + (*GetDecisionResponse)(nil), // 9: authorization.v2.GetDecisionResponse + (*GetDecisionMultiResourceRequest)(nil), // 10: authorization.v2.GetDecisionMultiResourceRequest + (*GetDecisionMultiResourceResponse)(nil), // 11: authorization.v2.GetDecisionMultiResourceResponse + (*GetDecisionBulkRequest)(nil), // 12: authorization.v2.GetDecisionBulkRequest + (*GetDecisionBulkResponse)(nil), // 13: authorization.v2.GetDecisionBulkResponse + (*GetEntitlementsRequest)(nil), // 14: authorization.v2.GetEntitlementsRequest + (*GetEntitlementsResponse)(nil), // 15: authorization.v2.GetEntitlementsResponse + (*TokenDecisionRequest)(nil), // 16: authorization.v2.TokenDecisionRequest + (*GetDecisionByTokenRequest)(nil), // 17: authorization.v2.GetDecisionByTokenRequest + (*GetDecisionByTokenResponse)(nil), // 18: authorization.v2.GetDecisionByTokenResponse + (*EntityEntitlements_ActionsList)(nil), // 19: authorization.v2.EntityEntitlements.ActionsList + nil, // 20: authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry + (*Resource_AttributeValues)(nil), // 21: authorization.v2.Resource.AttributeValues + (*anypb.Any)(nil), // 22: google.protobuf.Any + (*policy.Action)(nil), // 23: policy.Action + (*wrapperspb.BoolValue)(nil), // 24: google.protobuf.BoolValue } var file_authorization_v2_authorization_proto_depIdxs = []int32{ - 23, // 0: authorization.v2.Entity.claims:type_name -> google.protobuf.Any - 0, // 1: authorization.v2.Entity.category:type_name -> authorization.v2.Entity.Category + 22, // 0: authorization.v2.Entity.claims:type_name -> google.protobuf.Any + 1, // 1: authorization.v2.Entity.category:type_name -> authorization.v2.Entity.Category 3, // 2: authorization.v2.EntityChain.entities:type_name -> authorization.v2.Entity - 21, // 3: authorization.v2.EntityEntitlements.actions_per_attribute_value_fqn:type_name -> authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry - 22, // 4: authorization.v2.Resource.attribute_values:type_name -> authorization.v2.Resource.AttributeValues - 4, // 5: authorization.v2.DecisionRequest.entity:type_name -> authorization.v2.EntityChain - 24, // 6: authorization.v2.DecisionRequest.action:type_name -> policy.Action - 6, // 7: authorization.v2.DecisionRequest.resources:type_name -> authorization.v2.Resource - 24, // 8: authorization.v2.DecisionResponse.action:type_name -> policy.Action - 1, // 9: authorization.v2.DecisionResponse.decision:type_name -> authorization.v2.DecisionResponse.Decision - 7, // 10: authorization.v2.GetDecisionRequest.decision_request:type_name -> authorization.v2.DecisionRequest - 8, // 11: authorization.v2.GetDecisionResponse.decision_response:type_name -> authorization.v2.DecisionResponse - 7, // 12: authorization.v2.GetDecisionBulkRequest.decision_requests:type_name -> authorization.v2.DecisionRequest - 8, // 13: authorization.v2.GetDecisionBulkResponse.decision_responses:type_name -> authorization.v2.DecisionResponse - 3, // 14: authorization.v2.GetEntitlementsRequest.entities:type_name -> authorization.v2.Entity - 5, // 15: authorization.v2.GetEntitlementsResponse.entitlements:type_name -> authorization.v2.EntityEntitlements - 2, // 16: authorization.v2.TokenDecisionRequest.token:type_name -> authorization.v2.Token - 24, // 17: authorization.v2.TokenDecisionRequest.action:type_name -> policy.Action - 6, // 18: authorization.v2.TokenDecisionRequest.resources:type_name -> authorization.v2.Resource - 15, // 19: authorization.v2.GetDecisionByTokenRequest.decision_request:type_name -> authorization.v2.TokenDecisionRequest - 8, // 20: authorization.v2.GetDecisionByTokenResponse.decision_response:type_name -> authorization.v2.DecisionResponse - 15, // 21: authorization.v2.GetDecisionBulkByTokenRequest.decision_requests:type_name -> authorization.v2.TokenDecisionRequest - 8, // 22: authorization.v2.GetDecisionBulkByTokenResponse.decision_responses:type_name -> authorization.v2.DecisionResponse - 24, // 23: authorization.v2.EntityEntitlements.ActionsList.actions:type_name -> policy.Action - 20, // 24: authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry.value:type_name -> authorization.v2.EntityEntitlements.ActionsList - 9, // 25: authorization.v2.AuthorizationService.GetDecision:input_type -> authorization.v2.GetDecisionRequest - 11, // 26: authorization.v2.AuthorizationService.GetDecisionBulk:input_type -> authorization.v2.GetDecisionBulkRequest - 16, // 27: authorization.v2.AuthorizationService.GetDecisionByToken:input_type -> authorization.v2.GetDecisionByTokenRequest - 18, // 28: authorization.v2.AuthorizationService.GetDecisionBulkByToken:input_type -> authorization.v2.GetDecisionBulkByTokenRequest - 13, // 29: authorization.v2.AuthorizationService.GetEntitlements:input_type -> authorization.v2.GetEntitlementsRequest - 10, // 30: authorization.v2.AuthorizationService.GetDecision:output_type -> authorization.v2.GetDecisionResponse - 12, // 31: authorization.v2.AuthorizationService.GetDecisionBulk:output_type -> authorization.v2.GetDecisionBulkResponse - 17, // 32: authorization.v2.AuthorizationService.GetDecisionByToken:output_type -> authorization.v2.GetDecisionByTokenResponse - 19, // 33: authorization.v2.AuthorizationService.GetDecisionBulkByToken:output_type -> authorization.v2.GetDecisionBulkByTokenResponse - 14, // 34: authorization.v2.AuthorizationService.GetEntitlements:output_type -> authorization.v2.GetEntitlementsResponse - 30, // [30:35] is the sub-list for method output_type - 25, // [25:30] is the sub-list for method input_type - 25, // [25:25] is the sub-list for extension type_name - 25, // [25:25] is the sub-list for extension extendee - 0, // [0:25] is the sub-list for field type_name + 20, // 3: authorization.v2.EntityEntitlements.actions_per_attribute_value_fqn:type_name -> authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry + 21, // 4: authorization.v2.Resource.attribute_values:type_name -> authorization.v2.Resource.AttributeValues + 0, // 5: authorization.v2.ResourceDecision.decision:type_name -> authorization.v2.Decision + 4, // 6: authorization.v2.GetDecisionRequest.entity:type_name -> authorization.v2.EntityChain + 23, // 7: authorization.v2.GetDecisionRequest.action:type_name -> policy.Action + 6, // 8: authorization.v2.GetDecisionRequest.resource:type_name -> authorization.v2.Resource + 23, // 9: authorization.v2.GetDecisionResponse.action:type_name -> policy.Action + 7, // 10: authorization.v2.GetDecisionResponse.decision:type_name -> authorization.v2.ResourceDecision + 4, // 11: authorization.v2.GetDecisionMultiResourceRequest.entity:type_name -> authorization.v2.EntityChain + 23, // 12: authorization.v2.GetDecisionMultiResourceRequest.action:type_name -> policy.Action + 6, // 13: authorization.v2.GetDecisionMultiResourceRequest.resources:type_name -> authorization.v2.Resource + 23, // 14: authorization.v2.GetDecisionMultiResourceResponse.action:type_name -> policy.Action + 24, // 15: authorization.v2.GetDecisionMultiResourceResponse.all_permitted:type_name -> google.protobuf.BoolValue + 7, // 16: authorization.v2.GetDecisionMultiResourceResponse.resource_decisions:type_name -> authorization.v2.ResourceDecision + 10, // 17: authorization.v2.GetDecisionBulkRequest.decision_requests:type_name -> authorization.v2.GetDecisionMultiResourceRequest + 11, // 18: authorization.v2.GetDecisionBulkResponse.decision_responses:type_name -> authorization.v2.GetDecisionMultiResourceResponse + 3, // 19: authorization.v2.GetEntitlementsRequest.entities:type_name -> authorization.v2.Entity + 5, // 20: authorization.v2.GetEntitlementsResponse.entitlements:type_name -> authorization.v2.EntityEntitlements + 2, // 21: authorization.v2.TokenDecisionRequest.token:type_name -> authorization.v2.Token + 23, // 22: authorization.v2.TokenDecisionRequest.action:type_name -> policy.Action + 6, // 23: authorization.v2.TokenDecisionRequest.resource:type_name -> authorization.v2.Resource + 16, // 24: authorization.v2.GetDecisionByTokenRequest.decision_request:type_name -> authorization.v2.TokenDecisionRequest + 9, // 25: authorization.v2.GetDecisionByTokenResponse.decision_response:type_name -> authorization.v2.GetDecisionResponse + 23, // 26: authorization.v2.EntityEntitlements.ActionsList.actions:type_name -> policy.Action + 19, // 27: authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry.value:type_name -> authorization.v2.EntityEntitlements.ActionsList + 8, // 28: authorization.v2.AuthorizationService.GetDecision:input_type -> authorization.v2.GetDecisionRequest + 10, // 29: authorization.v2.AuthorizationService.GetDecisionMultiResource:input_type -> authorization.v2.GetDecisionMultiResourceRequest + 12, // 30: authorization.v2.AuthorizationService.GetDecisionBulk:input_type -> authorization.v2.GetDecisionBulkRequest + 17, // 31: authorization.v2.AuthorizationService.GetDecisionByToken:input_type -> authorization.v2.GetDecisionByTokenRequest + 14, // 32: authorization.v2.AuthorizationService.GetEntitlements:input_type -> authorization.v2.GetEntitlementsRequest + 9, // 33: authorization.v2.AuthorizationService.GetDecision:output_type -> authorization.v2.GetDecisionResponse + 11, // 34: authorization.v2.AuthorizationService.GetDecisionMultiResource:output_type -> authorization.v2.GetDecisionMultiResourceResponse + 13, // 35: authorization.v2.AuthorizationService.GetDecisionBulk:output_type -> authorization.v2.GetDecisionBulkResponse + 18, // 36: authorization.v2.AuthorizationService.GetDecisionByToken:output_type -> authorization.v2.GetDecisionByTokenResponse + 15, // 37: authorization.v2.AuthorizationService.GetEntitlements:output_type -> authorization.v2.GetEntitlementsResponse + 33, // [33:38] is the sub-list for method output_type + 28, // [28:33] is the sub-list for method input_type + 28, // [28:28] is the sub-list for extension type_name + 28, // [28:28] is the sub-list for extension extendee + 0, // [0:28] is the sub-list for field type_name } func init() { file_authorization_v2_authorization_proto_init() } @@ -1718,7 +1767,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DecisionRequest); i { + switch v := v.(*ResourceDecision); i { case 0: return &v.state case 1: @@ -1730,7 +1779,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DecisionResponse); i { + switch v := v.(*GetDecisionRequest); i { case 0: return &v.state case 1: @@ -1742,7 +1791,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDecisionRequest); i { + switch v := v.(*GetDecisionResponse); i { case 0: return &v.state case 1: @@ -1754,7 +1803,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDecisionResponse); i { + switch v := v.(*GetDecisionMultiResourceRequest); i { case 0: return &v.state case 1: @@ -1766,7 +1815,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDecisionBulkRequest); i { + switch v := v.(*GetDecisionMultiResourceResponse); i { case 0: return &v.state case 1: @@ -1778,7 +1827,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDecisionBulkResponse); i { + switch v := v.(*GetDecisionBulkRequest); i { case 0: return &v.state case 1: @@ -1790,7 +1839,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetEntitlementsRequest); i { + switch v := v.(*GetDecisionBulkResponse); i { case 0: return &v.state case 1: @@ -1802,7 +1851,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetEntitlementsResponse); i { + switch v := v.(*GetEntitlementsRequest); i { case 0: return &v.state case 1: @@ -1814,7 +1863,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TokenDecisionRequest); i { + switch v := v.(*GetEntitlementsResponse); i { case 0: return &v.state case 1: @@ -1826,7 +1875,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDecisionByTokenRequest); i { + switch v := v.(*TokenDecisionRequest); i { case 0: return &v.state case 1: @@ -1838,7 +1887,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDecisionByTokenResponse); i { + switch v := v.(*GetDecisionByTokenRequest); i { case 0: return &v.state case 1: @@ -1850,7 +1899,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDecisionBulkByTokenRequest); i { + switch v := v.(*GetDecisionByTokenResponse); i { case 0: return &v.state case 1: @@ -1862,18 +1911,6 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDecisionBulkByTokenResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_authorization_v2_authorization_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EntityEntitlements_ActionsList); i { case 0: return &v.state @@ -1885,7 +1922,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Resource_AttributeValues); i { case 0: return &v.state @@ -1909,14 +1946,14 @@ func file_authorization_v2_authorization_proto_init() { (*Resource_AttributeValues_)(nil), (*Resource_RegisteredResourceValueFqn)(nil), } - file_authorization_v2_authorization_proto_msgTypes[11].OneofWrappers = []interface{}{} + file_authorization_v2_authorization_proto_msgTypes[12].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_authorization_v2_authorization_proto_rawDesc, NumEnums: 2, - NumMessages: 21, + NumMessages: 20, NumExtensions: 0, NumServices: 1, }, diff --git a/protocol/go/authorization/v2/authorization_grpc.pb.go b/protocol/go/authorization/v2/authorization_grpc.pb.go index 57b6b34457..eb5bb12e68 100644 --- a/protocol/go/authorization/v2/authorization_grpc.pb.go +++ b/protocol/go/authorization/v2/authorization_grpc.pb.go @@ -19,11 +19,11 @@ import ( const _ = grpc.SupportPackageIsVersion7 const ( - AuthorizationService_GetDecision_FullMethodName = "/authorization.v2.AuthorizationService/GetDecision" - AuthorizationService_GetDecisionBulk_FullMethodName = "/authorization.v2.AuthorizationService/GetDecisionBulk" - AuthorizationService_GetDecisionByToken_FullMethodName = "/authorization.v2.AuthorizationService/GetDecisionByToken" - AuthorizationService_GetDecisionBulkByToken_FullMethodName = "/authorization.v2.AuthorizationService/GetDecisionBulkByToken" - AuthorizationService_GetEntitlements_FullMethodName = "/authorization.v2.AuthorizationService/GetEntitlements" + AuthorizationService_GetDecision_FullMethodName = "/authorization.v2.AuthorizationService/GetDecision" + AuthorizationService_GetDecisionMultiResource_FullMethodName = "/authorization.v2.AuthorizationService/GetDecisionMultiResource" + AuthorizationService_GetDecisionBulk_FullMethodName = "/authorization.v2.AuthorizationService/GetDecisionBulk" + AuthorizationService_GetDecisionByToken_FullMethodName = "/authorization.v2.AuthorizationService/GetDecisionByToken" + AuthorizationService_GetEntitlements_FullMethodName = "/authorization.v2.AuthorizationService/GetEntitlements" ) // AuthorizationServiceClient is the client API for AuthorizationService service. @@ -31,9 +31,9 @@ const ( // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. type AuthorizationServiceClient interface { GetDecision(ctx context.Context, in *GetDecisionRequest, opts ...grpc.CallOption) (*GetDecisionResponse, error) + GetDecisionMultiResource(ctx context.Context, in *GetDecisionMultiResourceRequest, opts ...grpc.CallOption) (*GetDecisionMultiResourceResponse, error) GetDecisionBulk(ctx context.Context, in *GetDecisionBulkRequest, opts ...grpc.CallOption) (*GetDecisionBulkResponse, error) GetDecisionByToken(ctx context.Context, in *GetDecisionByTokenRequest, opts ...grpc.CallOption) (*GetDecisionByTokenResponse, error) - GetDecisionBulkByToken(ctx context.Context, in *GetDecisionBulkByTokenRequest, opts ...grpc.CallOption) (*GetDecisionBulkByTokenResponse, error) GetEntitlements(ctx context.Context, in *GetEntitlementsRequest, opts ...grpc.CallOption) (*GetEntitlementsResponse, error) } @@ -54,27 +54,27 @@ func (c *authorizationServiceClient) GetDecision(ctx context.Context, in *GetDec return out, nil } -func (c *authorizationServiceClient) GetDecisionBulk(ctx context.Context, in *GetDecisionBulkRequest, opts ...grpc.CallOption) (*GetDecisionBulkResponse, error) { - out := new(GetDecisionBulkResponse) - err := c.cc.Invoke(ctx, AuthorizationService_GetDecisionBulk_FullMethodName, in, out, opts...) +func (c *authorizationServiceClient) GetDecisionMultiResource(ctx context.Context, in *GetDecisionMultiResourceRequest, opts ...grpc.CallOption) (*GetDecisionMultiResourceResponse, error) { + out := new(GetDecisionMultiResourceResponse) + err := c.cc.Invoke(ctx, AuthorizationService_GetDecisionMultiResource_FullMethodName, in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *authorizationServiceClient) GetDecisionByToken(ctx context.Context, in *GetDecisionByTokenRequest, opts ...grpc.CallOption) (*GetDecisionByTokenResponse, error) { - out := new(GetDecisionByTokenResponse) - err := c.cc.Invoke(ctx, AuthorizationService_GetDecisionByToken_FullMethodName, in, out, opts...) +func (c *authorizationServiceClient) GetDecisionBulk(ctx context.Context, in *GetDecisionBulkRequest, opts ...grpc.CallOption) (*GetDecisionBulkResponse, error) { + out := new(GetDecisionBulkResponse) + err := c.cc.Invoke(ctx, AuthorizationService_GetDecisionBulk_FullMethodName, in, out, opts...) if err != nil { return nil, err } return out, nil } -func (c *authorizationServiceClient) GetDecisionBulkByToken(ctx context.Context, in *GetDecisionBulkByTokenRequest, opts ...grpc.CallOption) (*GetDecisionBulkByTokenResponse, error) { - out := new(GetDecisionBulkByTokenResponse) - err := c.cc.Invoke(ctx, AuthorizationService_GetDecisionBulkByToken_FullMethodName, in, out, opts...) +func (c *authorizationServiceClient) GetDecisionByToken(ctx context.Context, in *GetDecisionByTokenRequest, opts ...grpc.CallOption) (*GetDecisionByTokenResponse, error) { + out := new(GetDecisionByTokenResponse) + err := c.cc.Invoke(ctx, AuthorizationService_GetDecisionByToken_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -95,9 +95,9 @@ func (c *authorizationServiceClient) GetEntitlements(ctx context.Context, in *Ge // for forward compatibility type AuthorizationServiceServer interface { GetDecision(context.Context, *GetDecisionRequest) (*GetDecisionResponse, error) + GetDecisionMultiResource(context.Context, *GetDecisionMultiResourceRequest) (*GetDecisionMultiResourceResponse, error) GetDecisionBulk(context.Context, *GetDecisionBulkRequest) (*GetDecisionBulkResponse, error) GetDecisionByToken(context.Context, *GetDecisionByTokenRequest) (*GetDecisionByTokenResponse, error) - GetDecisionBulkByToken(context.Context, *GetDecisionBulkByTokenRequest) (*GetDecisionBulkByTokenResponse, error) GetEntitlements(context.Context, *GetEntitlementsRequest) (*GetEntitlementsResponse, error) mustEmbedUnimplementedAuthorizationServiceServer() } @@ -109,15 +109,15 @@ type UnimplementedAuthorizationServiceServer struct { func (UnimplementedAuthorizationServiceServer) GetDecision(context.Context, *GetDecisionRequest) (*GetDecisionResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetDecision not implemented") } +func (UnimplementedAuthorizationServiceServer) GetDecisionMultiResource(context.Context, *GetDecisionMultiResourceRequest) (*GetDecisionMultiResourceResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetDecisionMultiResource not implemented") +} func (UnimplementedAuthorizationServiceServer) GetDecisionBulk(context.Context, *GetDecisionBulkRequest) (*GetDecisionBulkResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetDecisionBulk not implemented") } func (UnimplementedAuthorizationServiceServer) GetDecisionByToken(context.Context, *GetDecisionByTokenRequest) (*GetDecisionByTokenResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetDecisionByToken not implemented") } -func (UnimplementedAuthorizationServiceServer) GetDecisionBulkByToken(context.Context, *GetDecisionBulkByTokenRequest) (*GetDecisionBulkByTokenResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetDecisionBulkByToken not implemented") -} func (UnimplementedAuthorizationServiceServer) GetEntitlements(context.Context, *GetEntitlementsRequest) (*GetEntitlementsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetEntitlements not implemented") } @@ -152,56 +152,56 @@ func _AuthorizationService_GetDecision_Handler(srv interface{}, ctx context.Cont return interceptor(ctx, in, info, handler) } -func _AuthorizationService_GetDecisionBulk_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetDecisionBulkRequest) +func _AuthorizationService_GetDecisionMultiResource_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetDecisionMultiResourceRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(AuthorizationServiceServer).GetDecisionBulk(ctx, in) + return srv.(AuthorizationServiceServer).GetDecisionMultiResource(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: AuthorizationService_GetDecisionBulk_FullMethodName, + FullMethod: AuthorizationService_GetDecisionMultiResource_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizationServiceServer).GetDecisionBulk(ctx, req.(*GetDecisionBulkRequest)) + return srv.(AuthorizationServiceServer).GetDecisionMultiResource(ctx, req.(*GetDecisionMultiResourceRequest)) } return interceptor(ctx, in, info, handler) } -func _AuthorizationService_GetDecisionByToken_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetDecisionByTokenRequest) +func _AuthorizationService_GetDecisionBulk_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetDecisionBulkRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(AuthorizationServiceServer).GetDecisionByToken(ctx, in) + return srv.(AuthorizationServiceServer).GetDecisionBulk(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: AuthorizationService_GetDecisionByToken_FullMethodName, + FullMethod: AuthorizationService_GetDecisionBulk_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizationServiceServer).GetDecisionByToken(ctx, req.(*GetDecisionByTokenRequest)) + return srv.(AuthorizationServiceServer).GetDecisionBulk(ctx, req.(*GetDecisionBulkRequest)) } return interceptor(ctx, in, info, handler) } -func _AuthorizationService_GetDecisionBulkByToken_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetDecisionBulkByTokenRequest) +func _AuthorizationService_GetDecisionByToken_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetDecisionByTokenRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(AuthorizationServiceServer).GetDecisionBulkByToken(ctx, in) + return srv.(AuthorizationServiceServer).GetDecisionByToken(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: AuthorizationService_GetDecisionBulkByToken_FullMethodName, + FullMethod: AuthorizationService_GetDecisionByToken_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizationServiceServer).GetDecisionBulkByToken(ctx, req.(*GetDecisionBulkByTokenRequest)) + return srv.(AuthorizationServiceServer).GetDecisionByToken(ctx, req.(*GetDecisionByTokenRequest)) } return interceptor(ctx, in, info, handler) } @@ -235,6 +235,10 @@ var AuthorizationService_ServiceDesc = grpc.ServiceDesc{ MethodName: "GetDecision", Handler: _AuthorizationService_GetDecision_Handler, }, + { + MethodName: "GetDecisionMultiResource", + Handler: _AuthorizationService_GetDecisionMultiResource_Handler, + }, { MethodName: "GetDecisionBulk", Handler: _AuthorizationService_GetDecisionBulk_Handler, @@ -243,10 +247,6 @@ var AuthorizationService_ServiceDesc = grpc.ServiceDesc{ MethodName: "GetDecisionByToken", Handler: _AuthorizationService_GetDecisionByToken_Handler, }, - { - MethodName: "GetDecisionBulkByToken", - Handler: _AuthorizationService_GetDecisionBulkByToken_Handler, - }, { MethodName: "GetEntitlements", Handler: _AuthorizationService_GetEntitlements_Handler, diff --git a/protocol/go/authorization/v2/authorizationv2connect/authorization.connect.go b/protocol/go/authorization/v2/authorizationv2connect/authorization.connect.go index dd1818d71d..5bd5a2cdd7 100644 --- a/protocol/go/authorization/v2/authorizationv2connect/authorization.connect.go +++ b/protocol/go/authorization/v2/authorizationv2connect/authorization.connect.go @@ -36,15 +36,15 @@ const ( // AuthorizationServiceGetDecisionProcedure is the fully-qualified name of the // AuthorizationService's GetDecision RPC. AuthorizationServiceGetDecisionProcedure = "/authorization.v2.AuthorizationService/GetDecision" + // AuthorizationServiceGetDecisionMultiResourceProcedure is the fully-qualified name of the + // AuthorizationService's GetDecisionMultiResource RPC. + AuthorizationServiceGetDecisionMultiResourceProcedure = "/authorization.v2.AuthorizationService/GetDecisionMultiResource" // AuthorizationServiceGetDecisionBulkProcedure is the fully-qualified name of the // AuthorizationService's GetDecisionBulk RPC. AuthorizationServiceGetDecisionBulkProcedure = "/authorization.v2.AuthorizationService/GetDecisionBulk" // AuthorizationServiceGetDecisionByTokenProcedure is the fully-qualified name of the // AuthorizationService's GetDecisionByToken RPC. AuthorizationServiceGetDecisionByTokenProcedure = "/authorization.v2.AuthorizationService/GetDecisionByToken" - // AuthorizationServiceGetDecisionBulkByTokenProcedure is the fully-qualified name of the - // AuthorizationService's GetDecisionBulkByToken RPC. - AuthorizationServiceGetDecisionBulkByTokenProcedure = "/authorization.v2.AuthorizationService/GetDecisionBulkByToken" // AuthorizationServiceGetEntitlementsProcedure is the fully-qualified name of the // AuthorizationService's GetEntitlements RPC. AuthorizationServiceGetEntitlementsProcedure = "/authorization.v2.AuthorizationService/GetEntitlements" @@ -52,20 +52,20 @@ const ( // These variables are the protoreflect.Descriptor objects for the RPCs defined in this package. var ( - authorizationServiceServiceDescriptor = v2.File_authorization_v2_authorization_proto.Services().ByName("AuthorizationService") - authorizationServiceGetDecisionMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetDecision") - authorizationServiceGetDecisionBulkMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetDecisionBulk") - authorizationServiceGetDecisionByTokenMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetDecisionByToken") - authorizationServiceGetDecisionBulkByTokenMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetDecisionBulkByToken") - authorizationServiceGetEntitlementsMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetEntitlements") + authorizationServiceServiceDescriptor = v2.File_authorization_v2_authorization_proto.Services().ByName("AuthorizationService") + authorizationServiceGetDecisionMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetDecision") + authorizationServiceGetDecisionMultiResourceMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetDecisionMultiResource") + authorizationServiceGetDecisionBulkMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetDecisionBulk") + authorizationServiceGetDecisionByTokenMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetDecisionByToken") + authorizationServiceGetEntitlementsMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetEntitlements") ) // AuthorizationServiceClient is a client for the authorization.v2.AuthorizationService service. type AuthorizationServiceClient interface { GetDecision(context.Context, *connect.Request[v2.GetDecisionRequest]) (*connect.Response[v2.GetDecisionResponse], error) + GetDecisionMultiResource(context.Context, *connect.Request[v2.GetDecisionMultiResourceRequest]) (*connect.Response[v2.GetDecisionMultiResourceResponse], error) GetDecisionBulk(context.Context, *connect.Request[v2.GetDecisionBulkRequest]) (*connect.Response[v2.GetDecisionBulkResponse], error) GetDecisionByToken(context.Context, *connect.Request[v2.GetDecisionByTokenRequest]) (*connect.Response[v2.GetDecisionByTokenResponse], error) - GetDecisionBulkByToken(context.Context, *connect.Request[v2.GetDecisionBulkByTokenRequest]) (*connect.Response[v2.GetDecisionBulkByTokenResponse], error) GetEntitlements(context.Context, *connect.Request[v2.GetEntitlementsRequest]) (*connect.Response[v2.GetEntitlementsResponse], error) } @@ -85,6 +85,12 @@ func NewAuthorizationServiceClient(httpClient connect.HTTPClient, baseURL string connect.WithSchema(authorizationServiceGetDecisionMethodDescriptor), connect.WithClientOptions(opts...), ), + getDecisionMultiResource: connect.NewClient[v2.GetDecisionMultiResourceRequest, v2.GetDecisionMultiResourceResponse]( + httpClient, + baseURL+AuthorizationServiceGetDecisionMultiResourceProcedure, + connect.WithSchema(authorizationServiceGetDecisionMultiResourceMethodDescriptor), + connect.WithClientOptions(opts...), + ), getDecisionBulk: connect.NewClient[v2.GetDecisionBulkRequest, v2.GetDecisionBulkResponse]( httpClient, baseURL+AuthorizationServiceGetDecisionBulkProcedure, @@ -97,12 +103,6 @@ func NewAuthorizationServiceClient(httpClient connect.HTTPClient, baseURL string connect.WithSchema(authorizationServiceGetDecisionByTokenMethodDescriptor), connect.WithClientOptions(opts...), ), - getDecisionBulkByToken: connect.NewClient[v2.GetDecisionBulkByTokenRequest, v2.GetDecisionBulkByTokenResponse]( - httpClient, - baseURL+AuthorizationServiceGetDecisionBulkByTokenProcedure, - connect.WithSchema(authorizationServiceGetDecisionBulkByTokenMethodDescriptor), - connect.WithClientOptions(opts...), - ), getEntitlements: connect.NewClient[v2.GetEntitlementsRequest, v2.GetEntitlementsResponse]( httpClient, baseURL+AuthorizationServiceGetEntitlementsProcedure, @@ -114,11 +114,11 @@ func NewAuthorizationServiceClient(httpClient connect.HTTPClient, baseURL string // authorizationServiceClient implements AuthorizationServiceClient. type authorizationServiceClient struct { - getDecision *connect.Client[v2.GetDecisionRequest, v2.GetDecisionResponse] - getDecisionBulk *connect.Client[v2.GetDecisionBulkRequest, v2.GetDecisionBulkResponse] - getDecisionByToken *connect.Client[v2.GetDecisionByTokenRequest, v2.GetDecisionByTokenResponse] - getDecisionBulkByToken *connect.Client[v2.GetDecisionBulkByTokenRequest, v2.GetDecisionBulkByTokenResponse] - getEntitlements *connect.Client[v2.GetEntitlementsRequest, v2.GetEntitlementsResponse] + getDecision *connect.Client[v2.GetDecisionRequest, v2.GetDecisionResponse] + getDecisionMultiResource *connect.Client[v2.GetDecisionMultiResourceRequest, v2.GetDecisionMultiResourceResponse] + getDecisionBulk *connect.Client[v2.GetDecisionBulkRequest, v2.GetDecisionBulkResponse] + getDecisionByToken *connect.Client[v2.GetDecisionByTokenRequest, v2.GetDecisionByTokenResponse] + getEntitlements *connect.Client[v2.GetEntitlementsRequest, v2.GetEntitlementsResponse] } // GetDecision calls authorization.v2.AuthorizationService.GetDecision. @@ -126,6 +126,11 @@ func (c *authorizationServiceClient) GetDecision(ctx context.Context, req *conne return c.getDecision.CallUnary(ctx, req) } +// GetDecisionMultiResource calls authorization.v2.AuthorizationService.GetDecisionMultiResource. +func (c *authorizationServiceClient) GetDecisionMultiResource(ctx context.Context, req *connect.Request[v2.GetDecisionMultiResourceRequest]) (*connect.Response[v2.GetDecisionMultiResourceResponse], error) { + return c.getDecisionMultiResource.CallUnary(ctx, req) +} + // GetDecisionBulk calls authorization.v2.AuthorizationService.GetDecisionBulk. func (c *authorizationServiceClient) GetDecisionBulk(ctx context.Context, req *connect.Request[v2.GetDecisionBulkRequest]) (*connect.Response[v2.GetDecisionBulkResponse], error) { return c.getDecisionBulk.CallUnary(ctx, req) @@ -136,11 +141,6 @@ func (c *authorizationServiceClient) GetDecisionByToken(ctx context.Context, req return c.getDecisionByToken.CallUnary(ctx, req) } -// GetDecisionBulkByToken calls authorization.v2.AuthorizationService.GetDecisionBulkByToken. -func (c *authorizationServiceClient) GetDecisionBulkByToken(ctx context.Context, req *connect.Request[v2.GetDecisionBulkByTokenRequest]) (*connect.Response[v2.GetDecisionBulkByTokenResponse], error) { - return c.getDecisionBulkByToken.CallUnary(ctx, req) -} - // GetEntitlements calls authorization.v2.AuthorizationService.GetEntitlements. func (c *authorizationServiceClient) GetEntitlements(ctx context.Context, req *connect.Request[v2.GetEntitlementsRequest]) (*connect.Response[v2.GetEntitlementsResponse], error) { return c.getEntitlements.CallUnary(ctx, req) @@ -150,9 +150,9 @@ func (c *authorizationServiceClient) GetEntitlements(ctx context.Context, req *c // service. type AuthorizationServiceHandler interface { GetDecision(context.Context, *connect.Request[v2.GetDecisionRequest]) (*connect.Response[v2.GetDecisionResponse], error) + GetDecisionMultiResource(context.Context, *connect.Request[v2.GetDecisionMultiResourceRequest]) (*connect.Response[v2.GetDecisionMultiResourceResponse], error) GetDecisionBulk(context.Context, *connect.Request[v2.GetDecisionBulkRequest]) (*connect.Response[v2.GetDecisionBulkResponse], error) GetDecisionByToken(context.Context, *connect.Request[v2.GetDecisionByTokenRequest]) (*connect.Response[v2.GetDecisionByTokenResponse], error) - GetDecisionBulkByToken(context.Context, *connect.Request[v2.GetDecisionBulkByTokenRequest]) (*connect.Response[v2.GetDecisionBulkByTokenResponse], error) GetEntitlements(context.Context, *connect.Request[v2.GetEntitlementsRequest]) (*connect.Response[v2.GetEntitlementsResponse], error) } @@ -168,6 +168,12 @@ func NewAuthorizationServiceHandler(svc AuthorizationServiceHandler, opts ...con connect.WithSchema(authorizationServiceGetDecisionMethodDescriptor), connect.WithHandlerOptions(opts...), ) + authorizationServiceGetDecisionMultiResourceHandler := connect.NewUnaryHandler( + AuthorizationServiceGetDecisionMultiResourceProcedure, + svc.GetDecisionMultiResource, + connect.WithSchema(authorizationServiceGetDecisionMultiResourceMethodDescriptor), + connect.WithHandlerOptions(opts...), + ) authorizationServiceGetDecisionBulkHandler := connect.NewUnaryHandler( AuthorizationServiceGetDecisionBulkProcedure, svc.GetDecisionBulk, @@ -180,12 +186,6 @@ func NewAuthorizationServiceHandler(svc AuthorizationServiceHandler, opts ...con connect.WithSchema(authorizationServiceGetDecisionByTokenMethodDescriptor), connect.WithHandlerOptions(opts...), ) - authorizationServiceGetDecisionBulkByTokenHandler := connect.NewUnaryHandler( - AuthorizationServiceGetDecisionBulkByTokenProcedure, - svc.GetDecisionBulkByToken, - connect.WithSchema(authorizationServiceGetDecisionBulkByTokenMethodDescriptor), - connect.WithHandlerOptions(opts...), - ) authorizationServiceGetEntitlementsHandler := connect.NewUnaryHandler( AuthorizationServiceGetEntitlementsProcedure, svc.GetEntitlements, @@ -196,12 +196,12 @@ func NewAuthorizationServiceHandler(svc AuthorizationServiceHandler, opts ...con switch r.URL.Path { case AuthorizationServiceGetDecisionProcedure: authorizationServiceGetDecisionHandler.ServeHTTP(w, r) + case AuthorizationServiceGetDecisionMultiResourceProcedure: + authorizationServiceGetDecisionMultiResourceHandler.ServeHTTP(w, r) case AuthorizationServiceGetDecisionBulkProcedure: authorizationServiceGetDecisionBulkHandler.ServeHTTP(w, r) case AuthorizationServiceGetDecisionByTokenProcedure: authorizationServiceGetDecisionByTokenHandler.ServeHTTP(w, r) - case AuthorizationServiceGetDecisionBulkByTokenProcedure: - authorizationServiceGetDecisionBulkByTokenHandler.ServeHTTP(w, r) case AuthorizationServiceGetEntitlementsProcedure: authorizationServiceGetEntitlementsHandler.ServeHTTP(w, r) default: @@ -217,6 +217,10 @@ func (UnimplementedAuthorizationServiceHandler) GetDecision(context.Context, *co return nil, connect.NewError(connect.CodeUnimplemented, errors.New("authorization.v2.AuthorizationService.GetDecision is not implemented")) } +func (UnimplementedAuthorizationServiceHandler) GetDecisionMultiResource(context.Context, *connect.Request[v2.GetDecisionMultiResourceRequest]) (*connect.Response[v2.GetDecisionMultiResourceResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("authorization.v2.AuthorizationService.GetDecisionMultiResource is not implemented")) +} + func (UnimplementedAuthorizationServiceHandler) GetDecisionBulk(context.Context, *connect.Request[v2.GetDecisionBulkRequest]) (*connect.Response[v2.GetDecisionBulkResponse], error) { return nil, connect.NewError(connect.CodeUnimplemented, errors.New("authorization.v2.AuthorizationService.GetDecisionBulk is not implemented")) } @@ -225,10 +229,6 @@ func (UnimplementedAuthorizationServiceHandler) GetDecisionByToken(context.Conte return nil, connect.NewError(connect.CodeUnimplemented, errors.New("authorization.v2.AuthorizationService.GetDecisionByToken is not implemented")) } -func (UnimplementedAuthorizationServiceHandler) GetDecisionBulkByToken(context.Context, *connect.Request[v2.GetDecisionBulkByTokenRequest]) (*connect.Response[v2.GetDecisionBulkByTokenResponse], error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("authorization.v2.AuthorizationService.GetDecisionBulkByToken is not implemented")) -} - func (UnimplementedAuthorizationServiceHandler) GetEntitlements(context.Context, *connect.Request[v2.GetEntitlementsRequest]) (*connect.Response[v2.GetEntitlementsResponse], error) { return nil, connect.NewError(connect.CodeUnimplemented, errors.New("authorization.v2.AuthorizationService.GetEntitlements is not implemented")) } diff --git a/protocol/go/policy/objects.pb.go b/protocol/go/policy/objects.pb.go index 36ab8ce9e5..8e2208e28b 100644 --- a/protocol/go/policy/objects.pb.go +++ b/protocol/go/policy/objects.pb.go @@ -941,7 +941,8 @@ type Action struct { // // *Action_Standard // *Action_Custom - Value isAction_Value `protobuf_oneof:"value"` + Value isAction_Value `protobuf_oneof:"value"` + // Name is required to be set whenever an action is passed in an RPC Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` Metadata *common.Metadata `protobuf:"bytes,100,opt,name=metadata,proto3" json:"metadata,omitempty"` } @@ -2598,382 +2599,383 @@ var file_policy_objects_proto_rawDesc = []byte{ 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x52, - 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0xa8, 0x02, 0x0a, 0x06, 0x41, 0x63, 0x74, + 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0xb4, 0x02, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3b, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x08, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x12, 0x18, 0x0a, 0x06, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x48, 0x00, 0x52, 0x06, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2c, - 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x6c, 0x0a, 0x0e, - 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, - 0x0a, 0x1b, 0x53, 0x54, 0x41, 0x4e, 0x44, 0x41, 0x52, 0x44, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, - 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, - 0x1b, 0x0a, 0x17, 0x53, 0x54, 0x41, 0x4e, 0x44, 0x41, 0x52, 0x44, 0x5f, 0x41, 0x43, 0x54, 0x49, - 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x43, 0x52, 0x59, 0x50, 0x54, 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, - 0x53, 0x54, 0x41, 0x4e, 0x44, 0x41, 0x52, 0x44, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, - 0x54, 0x52, 0x41, 0x4e, 0x53, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x22, 0x81, 0x02, 0x0a, 0x0e, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, - 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x36, 0x0a, 0x0f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0e, - 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4f, - 0x0a, 0x15, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, - 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, - 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x52, 0x13, 0x73, 0x75, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x12, - 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xe9, 0x01, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4d, 0x0a, 0x1f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x5f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, - 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x1c, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x45, - 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4b, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, - 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x4f, 0x70, - 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, - 0x01, 0x01, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, - 0x72, 0x12, 0x40, 0x0a, 0x17, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x65, 0x78, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x15, 0x73, 0x75, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x73, 0x22, 0xa7, 0x01, 0x0a, 0x0e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x3b, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x08, 0xba, - 0x48, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x58, 0x0a, 0x10, 0x62, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x5f, 0x6f, - 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, - 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x42, - 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0f, 0x62, 0x6f, - 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x59, 0x0a, - 0x0a, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x74, 0x12, 0x4b, 0x0a, 0x10, 0x63, - 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x43, - 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x08, 0xba, - 0x48, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x22, 0x94, 0x01, 0x0a, 0x13, 0x53, 0x75, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x3f, 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x73, 0x65, 0x74, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, - 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x74, 0x42, 0x08, 0xba, 0x48, 0x05, 0x92, - 0x01, 0x02, 0x08, 0x01, 0x52, 0x0b, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x74, - 0x73, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, - 0x7c, 0x0a, 0x0f, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, - 0x74, 0x79, 0x12, 0x42, 0x0a, 0x17, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x73, - 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0xc8, 0x01, 0x01, 0x72, 0x02, 0x10, 0x01, 0x52, - 0x15, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, - 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x9b, 0x01, - 0x0a, 0x14, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, - 0x67, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x29, 0x0a, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xba, 0x48, - 0x03, 0xc8, 0x01, 0x01, 0x52, 0x0b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, - 0x64, 0x12, 0x1a, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, + 0x48, 0x00, 0x52, 0x06, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x1e, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0xc8, 0x01, 0x01, + 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x6c, 0x0a, 0x0e, 0x53, 0x74, 0x61, 0x6e, + 0x64, 0x61, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x1b, 0x53, 0x54, + 0x41, 0x4e, 0x44, 0x41, 0x52, 0x44, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, + 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x53, + 0x54, 0x41, 0x4e, 0x44, 0x41, 0x52, 0x44, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, + 0x45, 0x43, 0x52, 0x59, 0x50, 0x54, 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x54, 0x41, 0x4e, + 0x44, 0x41, 0x52, 0x44, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x54, 0x52, 0x41, 0x4e, + 0x53, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, + 0x81, 0x02, 0x0a, 0x0e, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x61, 0x70, 0x70, 0x69, + 0x6e, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x36, 0x0a, 0x0f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0e, 0x61, 0x74, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4f, 0x0a, 0x15, 0x73, 0x75, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x2e, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x52, 0x13, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, + 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x12, 0x28, 0x0a, 0x07, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x22, 0xe9, 0x01, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x4d, 0x0a, 0x1f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x65, 0x78, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, + 0x01, 0x01, 0x52, 0x1c, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x45, 0x78, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x4b, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x53, 0x75, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, + 0x6f, 0x72, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x82, 0x01, + 0x02, 0x10, 0x01, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x40, 0x0a, + 0x17, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, + 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x42, 0x08, + 0xba, 0x48, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x15, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, + 0xa7, 0x01, 0x0a, 0x0e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x12, 0x3b, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, + 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, + 0x02, 0x08, 0x01, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, + 0x58, 0x0a, 0x10, 0x62, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x70, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x6f, 0x6c, + 0x65, 0x61, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x0b, 0xba, 0x48, 0x08, + 0xc8, 0x01, 0x01, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0f, 0x62, 0x6f, 0x6f, 0x6c, 0x65, 0x61, + 0x6e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x59, 0x0a, 0x0a, 0x53, 0x75, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x74, 0x12, 0x4b, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x64, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, + 0x02, 0x08, 0x01, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x73, 0x22, 0x94, 0x01, 0x0a, 0x13, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3f, 0x0a, 0x0c, + 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x53, 0x75, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x53, 0x65, 0x74, 0x42, 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, + 0x52, 0x0b, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xd9, 0x01, 0x0a, 0x0f, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, - 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, - 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3e, 0x0a, - 0x0f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x0e, 0x61, - 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, - 0x05, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x65, - 0x72, 0x6d, 0x73, 0x12, 0x32, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0xff, 0x04, 0x0a, 0x0f, 0x4b, 0x65, 0x79, 0x41, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x87, 0x03, 0x0a, 0x03, - 0x75, 0x72, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0xf4, 0x02, 0xba, 0x48, 0xf0, 0x02, - 0xba, 0x01, 0xec, 0x02, 0x0a, 0x0a, 0x75, 0x72, 0x69, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, - 0x12, 0xcf, 0x01, 0x55, 0x52, 0x49, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, - 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x55, 0x52, 0x4c, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, - 0x2c, 0x20, 0x27, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x64, 0x65, 0x6d, 0x6f, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x27, 0x29, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x20, - 0x62, 0x79, 0x20, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x65, - 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x20, 0x45, 0x61, 0x63, 0x68, 0x20, 0x73, 0x65, 0x67, - 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, - 0x61, 0x6e, 0x64, 0x20, 0x65, 0x6e, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x6e, 0x20, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, - 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x2c, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x74, - 0x61, 0x69, 0x6e, 0x20, 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e, 0x73, 0x2c, 0x20, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, - 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x65, - 0x73, 0x2e, 0x1a, 0x8b, 0x01, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, - 0x73, 0x28, 0x27, 0x5e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3f, 0x3a, 0x2f, 0x2f, 0x5b, 0x61, 0x2d, - 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, - 0x30, 0x2d, 0x39, 0x5c, 0x5c, 0x2d, 0x5d, 0x7b, 0x30, 0x2c, 0x36, 0x31, 0x7d, 0x5b, 0x61, 0x2d, - 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x28, 0x5c, 0x5c, 0x2e, 0x5b, 0x61, - 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, - 0x5a, 0x30, 0x2d, 0x39, 0x5c, 0x5c, 0x2d, 0x5d, 0x7b, 0x30, 0x2c, 0x36, 0x31, 0x7d, 0x5b, 0x61, - 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x29, 0x2a, 0x28, 0x3a, 0x5b, - 0x30, 0x2d, 0x39, 0x5d, 0x2b, 0x29, 0x3f, 0x28, 0x2f, 0x2e, 0x2a, 0x29, 0x3f, 0x24, 0x27, 0x29, - 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x30, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, - 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x09, 0x70, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x33, 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x70, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, - 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x29, 0x0a, 0x08, - 0x6b, 0x61, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, - 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x4b, 0x65, 0x79, 0x52, 0x07, - 0x6b, 0x61, 0x73, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x6d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, + 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x7c, 0x0a, 0x0f, 0x53, + 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x12, 0x42, + 0x0a, 0x17, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x0a, 0xba, 0x48, 0x07, 0xc8, 0x01, 0x01, 0x72, 0x02, 0x10, 0x01, 0x52, 0x15, 0x65, 0x78, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x78, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x9b, 0x01, 0x0a, 0x14, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x29, 0x0a, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, + 0x52, 0x0b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xba, 0x48, 0x03, + 0xc8, 0x01, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xd9, 0x01, 0x0a, 0x0f, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2c, 0x0a, 0x08, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, - 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x97, 0x02, 0x0a, 0x03, 0x4b, 0x65, - 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x37, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x52, 0x08, 0x69, 0x73, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x77, 0x61, - 0x73, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x77, 0x61, 0x73, 0x4d, - 0x61, 0x70, 0x70, 0x65, 0x64, 0x12, 0x33, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, - 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, - 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x29, 0x0a, 0x03, 0x6b, 0x61, - 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x2e, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x52, 0x03, 0x6b, 0x61, 0x73, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x22, 0x84, 0x01, 0x0a, 0x0c, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x4b, 0x65, 0x79, 0x12, 0x1c, 0x0a, 0x03, 0x70, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x40, 0x52, 0x03, 0x70, - 0x65, 0x6d, 0x12, 0x1b, 0x0a, 0x03, 0x6b, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x09, 0xba, 0x48, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x20, 0x52, 0x03, 0x6b, 0x69, 0x64, 0x12, - 0x39, 0x0a, 0x03, 0x61, 0x6c, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x70, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, - 0x65, 0x79, 0x41, 0x6c, 0x67, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x82, 0x01, - 0x04, 0x10, 0x01, 0x20, 0x00, 0x52, 0x03, 0x61, 0x6c, 0x67, 0x22, 0x3b, 0x0a, 0x0f, 0x4b, 0x61, - 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x53, 0x65, 0x74, 0x12, 0x28, 0x0a, - 0x04, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, - 0x79, 0x52, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x22, 0xe0, 0x03, 0x0a, 0x09, 0x50, 0x75, 0x62, 0x6c, - 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x84, 0x03, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0xe9, 0x02, 0xba, 0x48, 0xe5, 0x02, 0xba, 0x01, 0xe1, - 0x02, 0x0a, 0x0a, 0x75, 0x72, 0x69, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0xcf, 0x01, - 0x55, 0x52, 0x49, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x20, 0x55, 0x52, 0x4c, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x2c, 0x20, 0x27, - 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x27, 0x29, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, - 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x2e, 0x20, 0x45, 0x61, 0x63, 0x68, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, - 0x74, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x61, 0x6e, 0x64, - 0x20, 0x65, 0x6e, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, - 0x74, 0x65, 0x72, 0x2c, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x20, 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e, 0x73, 0x2c, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, - 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, - 0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x65, 0x73, 0x2e, 0x1a, - 0x80, 0x01, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, - 0x5e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, + 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3e, 0x0a, 0x0f, 0x61, 0x74, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x0e, 0x61, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x65, 0x72, + 0x6d, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x12, + 0x32, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, + 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x05, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x22, 0xff, 0x04, 0x0a, 0x0f, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x87, 0x03, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0xf4, 0x02, 0xba, 0x48, 0xf0, 0x02, 0xba, 0x01, 0xec, 0x02, + 0x0a, 0x0a, 0x75, 0x72, 0x69, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0xcf, 0x01, 0x55, + 0x52, 0x49, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x20, 0x55, 0x52, 0x4c, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x2c, 0x20, 0x27, 0x68, + 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x27, 0x29, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, + 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x2e, 0x20, 0x45, 0x61, 0x63, 0x68, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, + 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, + 0x65, 0x6e, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, + 0x65, 0x72, 0x2c, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, + 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e, 0x73, 0x2c, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, 0x75, + 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, + 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x65, 0x73, 0x2e, 0x1a, 0x8b, + 0x01, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, + 0x68, 0x74, 0x74, 0x70, 0x73, 0x3f, 0x3a, 0x2f, 0x2f, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5c, 0x5c, 0x2d, 0x5d, 0x7b, 0x30, 0x2c, 0x36, 0x31, 0x7d, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x28, 0x5c, 0x5c, 0x2e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5c, 0x5c, 0x2d, 0x5d, 0x7b, 0x30, 0x2c, 0x36, 0x31, 0x7d, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, - 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x29, 0x2a, 0x28, 0x2f, 0x2e, 0x2a, 0x29, 0x3f, 0x24, - 0x27, 0x29, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x12, 0x31, 0x0a, 0x06, - 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, - 0x65, 0x79, 0x53, 0x65, 0x74, 0x48, 0x00, 0x52, 0x06, 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, - 0x0c, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x4a, 0x04, 0x08, - 0x02, 0x10, 0x03, 0x52, 0x05, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x22, 0x9f, 0x01, 0x0a, 0x12, 0x52, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x2c, - 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xa5, 0x01, 0x0a, - 0x17, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x36, - 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x22, 0x61, 0x0a, 0x06, 0x4b, 0x61, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x15, - 0x0a, 0x06, 0x6b, 0x61, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, - 0x6b, 0x61, 0x73, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x73, 0x79, 0x6d, - 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x17, - 0x0a, 0x07, 0x6b, 0x61, 0x73, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x6b, 0x61, 0x73, 0x55, 0x72, 0x69, 0x22, 0x2c, 0x0a, 0x0f, 0x4b, 0x61, 0x73, 0x50, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x43, 0x74, 0x78, 0x12, 0x19, 0x0a, 0x03, 0x70, 0x65, - 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, - 0x52, 0x03, 0x70, 0x65, 0x6d, 0x22, 0x53, 0x0a, 0x10, 0x4b, 0x61, 0x73, 0x50, 0x72, 0x69, 0x76, - 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x43, 0x74, 0x78, 0x12, 0x1e, 0x0a, 0x06, 0x6b, 0x65, 0x79, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, - 0x10, 0x01, 0x52, 0x05, 0x6b, 0x65, 0x79, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x72, 0x61, - 0x70, 0x70, 0x65, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x22, 0xbf, 0x03, 0x0a, 0x0d, 0x41, - 0x73, 0x79, 0x6d, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x15, 0x0a, 0x06, - 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6b, 0x65, - 0x79, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x0d, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x6c, 0x67, 0x6f, 0x72, - 0x69, 0x74, 0x68, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x2e, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x52, 0x0c, 0x6b, - 0x65, 0x79, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, 0x30, 0x0a, 0x0a, 0x6b, - 0x65, 0x79, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x11, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2a, 0x0a, - 0x08, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x0f, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x65, 0x79, 0x4d, 0x6f, 0x64, 0x65, - 0x52, 0x07, 0x6b, 0x65, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x3d, 0x0a, 0x0e, 0x70, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x74, 0x78, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x43, 0x74, 0x78, 0x52, 0x0c, 0x70, 0x75, 0x62, 0x6c, - 0x69, 0x63, 0x4b, 0x65, 0x79, 0x43, 0x74, 0x78, 0x12, 0x40, 0x0a, 0x0f, 0x70, 0x72, 0x69, 0x76, - 0x61, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x74, 0x78, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x72, - 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x43, 0x74, 0x78, 0x52, 0x0d, 0x70, 0x72, 0x69, - 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x43, 0x74, 0x78, 0x12, 0x42, 0x0a, 0x0f, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x65, 0x79, - 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0e, - 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2c, - 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x9e, 0x02, 0x0a, - 0x0c, 0x53, 0x79, 0x6d, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x15, 0x0a, - 0x06, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6b, - 0x65, 0x79, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x0a, 0x6b, 0x65, 0x79, 0x5f, 0x73, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x2e, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x09, 0x6b, 0x65, 0x79, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x6f, - 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x2e, 0x4b, 0x65, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x07, 0x6b, 0x65, 0x79, 0x4d, 0x6f, - 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x74, 0x78, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x06, 0x6b, 0x65, 0x79, 0x43, 0x74, 0x78, 0x12, 0x42, 0x0a, 0x0f, 0x70, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x65, - 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x0e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, - 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2a, 0xb3, 0x01, - 0x0a, 0x15, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x54, - 0x79, 0x70, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x28, 0x0a, 0x24, 0x41, 0x54, 0x54, 0x52, 0x49, + 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x29, 0x2a, 0x28, 0x3a, 0x5b, 0x30, 0x2d, 0x39, 0x5d, + 0x2b, 0x29, 0x3f, 0x28, 0x2f, 0x2e, 0x2a, 0x29, 0x3f, 0x24, 0x27, 0x29, 0x52, 0x03, 0x75, 0x72, + 0x69, 0x12, 0x30, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, + 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x4b, 0x65, 0x79, 0x12, 0x33, 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x29, 0x0a, 0x08, 0x6b, 0x61, 0x73, 0x5f, + 0x6b, 0x65, 0x79, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x4b, 0x65, 0x79, 0x52, 0x07, 0x6b, 0x61, 0x73, 0x4b, + 0x65, 0x79, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x97, 0x02, 0x0a, 0x03, 0x4b, 0x65, 0x79, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x37, 0x0a, + 0x09, 0x69, 0x73, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x69, 0x73, + 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x77, 0x61, 0x73, 0x5f, 0x6d, 0x61, + 0x70, 0x70, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, + 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x77, 0x61, 0x73, 0x4d, 0x61, 0x70, 0x70, 0x65, + 0x64, 0x12, 0x33, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, + 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x09, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x29, 0x0a, 0x03, 0x6b, 0x61, 0x73, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x65, 0x79, + 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x03, 0x6b, 0x61, + 0x73, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, + 0x84, 0x01, 0x0a, 0x0c, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, + 0x12, 0x1c, 0x0a, 0x03, 0x70, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, + 0x48, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x40, 0x52, 0x03, 0x70, 0x65, 0x6d, 0x12, 0x1b, + 0x0a, 0x03, 0x6b, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x09, 0xba, 0x48, 0x06, + 0x72, 0x04, 0x10, 0x01, 0x18, 0x20, 0x52, 0x03, 0x6b, 0x69, 0x64, 0x12, 0x39, 0x0a, 0x03, 0x61, + 0x6c, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x41, 0x6c, + 0x67, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x82, 0x01, 0x04, 0x10, 0x01, 0x20, + 0x00, 0x52, 0x03, 0x61, 0x6c, 0x67, 0x22, 0x3b, 0x0a, 0x0f, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x53, 0x65, 0x74, 0x12, 0x28, 0x0a, 0x04, 0x6b, 0x65, 0x79, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x04, 0x6b, + 0x65, 0x79, 0x73, 0x22, 0xe0, 0x03, 0x0a, 0x09, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, + 0x79, 0x12, 0x84, 0x03, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0xe9, 0x02, 0xba, 0x48, 0xe5, 0x02, 0xba, 0x01, 0xe1, 0x02, 0x0a, 0x0a, 0x75, + 0x72, 0x69, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0xcf, 0x01, 0x55, 0x52, 0x49, 0x20, + 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, + 0x55, 0x52, 0x4c, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x2c, 0x20, 0x27, 0x68, 0x74, 0x74, 0x70, + 0x73, 0x3a, 0x2f, 0x2f, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x27, 0x29, 0x20, + 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, 0x64, 0x64, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, + 0x20, 0x45, 0x61, 0x63, 0x68, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6d, 0x75, + 0x73, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65, 0x6e, 0x64, + 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, 0x75, + 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x2c, + 0x20, 0x63, 0x61, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x68, 0x79, 0x70, + 0x68, 0x65, 0x6e, 0x73, 0x2c, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, 0x75, 0x6d, 0x65, 0x72, + 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x61, + 0x6e, 0x64, 0x20, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x65, 0x73, 0x2e, 0x1a, 0x80, 0x01, 0x74, 0x68, + 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x68, 0x74, 0x74, + 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, + 0x28, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5c, 0x5c, 0x2d, 0x5d, 0x7b, + 0x30, 0x2c, 0x36, 0x31, 0x7d, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, + 0x29, 0x3f, 0x28, 0x5c, 0x5c, 0x2e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, + 0x5d, 0x28, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5c, 0x5c, 0x2d, 0x5d, + 0x7b, 0x30, 0x2c, 0x36, 0x31, 0x7d, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, + 0x5d, 0x29, 0x3f, 0x29, 0x2a, 0x28, 0x2f, 0x2e, 0x2a, 0x29, 0x3f, 0x24, 0x27, 0x29, 0x48, 0x00, + 0x52, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x12, 0x31, 0x0a, 0x06, 0x63, 0x61, 0x63, 0x68, + 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x53, 0x65, + 0x74, 0x48, 0x00, 0x52, 0x06, 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, 0x0c, 0x0a, 0x0a, 0x70, + 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x52, + 0x05, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x22, 0x9f, 0x01, 0x0a, 0x12, 0x52, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x37, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xa5, 0x01, 0x0a, 0x17, 0x52, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x36, 0x0a, 0x08, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x22, 0x61, 0x0a, 0x06, 0x4b, 0x61, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x15, 0x0a, 0x06, 0x6b, 0x61, + 0x73, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6b, 0x61, 0x73, 0x49, + 0x64, 0x12, 0x27, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, + 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x73, 0x79, 0x6d, 0x6d, 0x65, 0x74, 0x72, + 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x17, 0x0a, 0x07, 0x6b, 0x61, + 0x73, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6b, 0x61, 0x73, + 0x55, 0x72, 0x69, 0x22, 0x2c, 0x0a, 0x0f, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x4b, 0x65, 0x79, 0x43, 0x74, 0x78, 0x12, 0x19, 0x0a, 0x03, 0x70, 0x65, 0x6d, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x03, 0x70, 0x65, + 0x6d, 0x22, 0x53, 0x0a, 0x10, 0x4b, 0x61, 0x73, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, + 0x65, 0x79, 0x43, 0x74, 0x78, 0x12, 0x1e, 0x0a, 0x06, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x05, + 0x6b, 0x65, 0x79, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, + 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x77, 0x72, 0x61, 0x70, + 0x70, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x22, 0xbf, 0x03, 0x0a, 0x0d, 0x41, 0x73, 0x79, 0x6d, 0x6d, + 0x65, 0x74, 0x72, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x6b, 0x65, 0x79, 0x5f, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6b, 0x65, 0x79, 0x49, 0x64, 0x12, + 0x36, 0x0a, 0x0d, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, + 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x52, 0x0c, 0x6b, 0x65, 0x79, 0x41, 0x6c, + 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, 0x30, 0x0a, 0x0a, 0x6b, 0x65, 0x79, 0x5f, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x09, + 0x6b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2a, 0x0a, 0x08, 0x6b, 0x65, 0x79, + 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x65, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x07, 0x6b, 0x65, + 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x3d, 0x0a, 0x0e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, + 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x74, 0x78, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, + 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x4b, 0x65, 0x79, 0x43, 0x74, 0x78, 0x52, 0x0c, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, + 0x79, 0x43, 0x74, 0x78, 0x12, 0x40, 0x0a, 0x0f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, + 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x74, 0x78, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, + 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x4b, 0x65, 0x79, 0x43, 0x74, 0x78, 0x52, 0x0d, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, + 0x4b, 0x65, 0x79, 0x43, 0x74, 0x78, 0x12, 0x42, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x65, 0x79, 0x50, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x9e, 0x02, 0x0a, 0x0c, 0x53, 0x79, 0x6d, + 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x6b, 0x65, 0x79, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6b, 0x65, 0x79, 0x49, 0x64, + 0x12, 0x30, 0x0a, 0x0a, 0x6b, 0x65, 0x79, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x65, + 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x2a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x65, + 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x07, 0x6b, 0x65, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x17, + 0x0a, 0x07, 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x74, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x06, 0x6b, 0x65, 0x79, 0x43, 0x74, 0x78, 0x12, 0x42, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x65, 0x79, 0x50, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0e, 0x70, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2c, 0x0a, 0x08, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, + 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2a, 0xb3, 0x01, 0x0a, 0x15, 0x41, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x45, + 0x6e, 0x75, 0x6d, 0x12, 0x28, 0x0a, 0x24, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, + 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, + 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x23, 0x0a, + 0x1f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x5f, + 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x41, 0x4c, 0x4c, 0x5f, 0x4f, 0x46, + 0x10, 0x01, 0x12, 0x23, 0x0a, 0x1f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x5f, + 0x52, 0x55, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x41, + 0x4e, 0x59, 0x5f, 0x4f, 0x46, 0x10, 0x02, 0x12, 0x26, 0x0a, 0x22, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, - 0x4e, 0x55, 0x4d, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, - 0x00, 0x12, 0x23, 0x0a, 0x1f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x5f, 0x52, - 0x55, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x41, 0x4c, - 0x4c, 0x5f, 0x4f, 0x46, 0x10, 0x01, 0x12, 0x23, 0x0a, 0x1f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, - 0x55, 0x54, 0x45, 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, - 0x55, 0x4d, 0x5f, 0x41, 0x4e, 0x59, 0x5f, 0x4f, 0x46, 0x10, 0x02, 0x12, 0x26, 0x0a, 0x22, 0x41, - 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x5f, 0x54, 0x59, - 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x48, 0x49, 0x45, 0x52, 0x41, 0x52, 0x43, 0x48, - 0x59, 0x10, 0x03, 0x2a, 0xca, 0x01, 0x0a, 0x1a, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, - 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x45, 0x6e, - 0x75, 0x6d, 0x12, 0x2d, 0x0a, 0x29, 0x53, 0x55, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4d, 0x41, - 0x50, 0x50, 0x49, 0x4e, 0x47, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x45, - 0x4e, 0x55, 0x4d, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, - 0x00, 0x12, 0x24, 0x0a, 0x20, 0x53, 0x55, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4d, 0x41, 0x50, - 0x50, 0x49, 0x4e, 0x47, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x45, 0x4e, - 0x55, 0x4d, 0x5f, 0x49, 0x4e, 0x10, 0x01, 0x12, 0x28, 0x0a, 0x24, 0x53, 0x55, 0x42, 0x4a, 0x45, - 0x43, 0x54, 0x5f, 0x4d, 0x41, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, - 0x54, 0x4f, 0x52, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x49, 0x4e, 0x10, - 0x02, 0x12, 0x2d, 0x0a, 0x29, 0x53, 0x55, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4d, 0x41, 0x50, - 0x50, 0x49, 0x4e, 0x47, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x45, 0x4e, - 0x55, 0x4d, 0x5f, 0x49, 0x4e, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x53, 0x10, 0x03, - 0x2a, 0x90, 0x01, 0x0a, 0x18, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, - 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x2b, 0x0a, - 0x27, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x42, 0x4f, 0x4f, 0x4c, 0x45, - 0x41, 0x4e, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x55, 0x4e, 0x53, - 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x23, 0x0a, 0x1f, 0x43, 0x4f, - 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x42, 0x4f, 0x4f, 0x4c, 0x45, 0x41, 0x4e, 0x5f, - 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x41, 0x4e, 0x44, 0x10, 0x01, 0x12, - 0x22, 0x0a, 0x1e, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x42, 0x4f, 0x4f, - 0x4c, 0x45, 0x41, 0x4e, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x4f, - 0x52, 0x10, 0x02, 0x2a, 0x5d, 0x0a, 0x0a, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x18, - 0x0a, 0x14, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, - 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x4f, 0x55, 0x52, - 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x58, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, - 0x10, 0x02, 0x2a, 0x88, 0x02, 0x0a, 0x13, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x4b, 0x65, 0x79, 0x41, 0x6c, 0x67, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x27, 0x0a, 0x23, 0x4b, 0x41, - 0x53, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47, - 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, - 0x44, 0x10, 0x00, 0x12, 0x24, 0x0a, 0x20, 0x4b, 0x41, 0x53, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, - 0x43, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x52, - 0x53, 0x41, 0x5f, 0x32, 0x30, 0x34, 0x38, 0x10, 0x01, 0x12, 0x24, 0x0a, 0x20, 0x4b, 0x41, 0x53, - 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47, 0x5f, - 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x52, 0x53, 0x41, 0x5f, 0x34, 0x30, 0x39, 0x36, 0x10, 0x02, 0x12, + 0x4e, 0x55, 0x4d, 0x5f, 0x48, 0x49, 0x45, 0x52, 0x41, 0x52, 0x43, 0x48, 0x59, 0x10, 0x03, 0x2a, + 0xca, 0x01, 0x0a, 0x1a, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x61, 0x70, 0x70, 0x69, + 0x6e, 0x67, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x2d, + 0x0a, 0x29, 0x53, 0x55, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4d, 0x41, 0x50, 0x50, 0x49, 0x4e, + 0x47, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, + 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x24, 0x0a, + 0x20, 0x53, 0x55, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4d, 0x41, 0x50, 0x50, 0x49, 0x4e, 0x47, + 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x49, + 0x4e, 0x10, 0x01, 0x12, 0x28, 0x0a, 0x24, 0x53, 0x55, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4d, + 0x41, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, + 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x49, 0x4e, 0x10, 0x02, 0x12, 0x2d, 0x0a, + 0x29, 0x53, 0x55, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4d, 0x41, 0x50, 0x50, 0x49, 0x4e, 0x47, + 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x49, + 0x4e, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x53, 0x10, 0x03, 0x2a, 0x90, 0x01, 0x0a, + 0x18, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61, + 0x6e, 0x54, 0x79, 0x70, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x2b, 0x0a, 0x27, 0x43, 0x4f, 0x4e, + 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x42, 0x4f, 0x4f, 0x4c, 0x45, 0x41, 0x4e, 0x5f, 0x54, + 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x23, 0x0a, 0x1f, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, + 0x49, 0x4f, 0x4e, 0x5f, 0x42, 0x4f, 0x4f, 0x4c, 0x45, 0x41, 0x4e, 0x5f, 0x54, 0x59, 0x50, 0x45, + 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x41, 0x4e, 0x44, 0x10, 0x01, 0x12, 0x22, 0x0a, 0x1e, 0x43, + 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x42, 0x4f, 0x4f, 0x4c, 0x45, 0x41, 0x4e, + 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x4f, 0x52, 0x10, 0x02, 0x2a, + 0x5d, 0x0a, 0x0a, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, + 0x17, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, + 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x4f, + 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, + 0x41, 0x4c, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, + 0x59, 0x50, 0x45, 0x5f, 0x45, 0x58, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x10, 0x02, 0x2a, 0x88, + 0x02, 0x0a, 0x13, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x41, + 0x6c, 0x67, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x27, 0x0a, 0x23, 0x4b, 0x41, 0x53, 0x5f, 0x50, 0x55, + 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47, 0x5f, 0x45, 0x4e, 0x55, + 0x4d, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, + 0x24, 0x0a, 0x20, 0x4b, 0x41, 0x53, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x4b, 0x45, + 0x59, 0x5f, 0x41, 0x4c, 0x47, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x52, 0x53, 0x41, 0x5f, 0x32, + 0x30, 0x34, 0x38, 0x10, 0x01, 0x12, 0x24, 0x0a, 0x20, 0x4b, 0x41, 0x53, 0x5f, 0x50, 0x55, 0x42, + 0x4c, 0x49, 0x43, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47, 0x5f, 0x45, 0x4e, 0x55, 0x4d, + 0x5f, 0x52, 0x53, 0x41, 0x5f, 0x34, 0x30, 0x39, 0x36, 0x10, 0x02, 0x12, 0x28, 0x0a, 0x24, 0x4b, + 0x41, 0x53, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, + 0x47, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x45, 0x43, 0x5f, 0x53, 0x45, 0x43, 0x50, 0x32, 0x35, + 0x36, 0x52, 0x31, 0x10, 0x05, 0x12, 0x28, 0x0a, 0x24, 0x4b, 0x41, 0x53, 0x5f, 0x50, 0x55, 0x42, + 0x4c, 0x49, 0x43, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47, 0x5f, 0x45, 0x4e, 0x55, 0x4d, + 0x5f, 0x45, 0x43, 0x5f, 0x53, 0x45, 0x43, 0x50, 0x33, 0x38, 0x34, 0x52, 0x31, 0x10, 0x06, 0x12, 0x28, 0x0a, 0x24, 0x4b, 0x41, 0x53, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x45, 0x43, 0x5f, 0x53, 0x45, - 0x43, 0x50, 0x32, 0x35, 0x36, 0x52, 0x31, 0x10, 0x05, 0x12, 0x28, 0x0a, 0x24, 0x4b, 0x41, 0x53, - 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47, 0x5f, - 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x45, 0x43, 0x5f, 0x53, 0x45, 0x43, 0x50, 0x33, 0x38, 0x34, 0x52, - 0x31, 0x10, 0x06, 0x12, 0x28, 0x0a, 0x24, 0x4b, 0x41, 0x53, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, - 0x43, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x45, - 0x43, 0x5f, 0x53, 0x45, 0x43, 0x50, 0x35, 0x32, 0x31, 0x52, 0x31, 0x10, 0x07, 0x2a, 0x9b, 0x01, - 0x0a, 0x09, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, 0x19, 0x0a, 0x15, 0x41, - 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, - 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, - 0x54, 0x48, 0x4d, 0x5f, 0x52, 0x53, 0x41, 0x5f, 0x32, 0x30, 0x34, 0x38, 0x10, 0x01, 0x12, 0x16, - 0x0a, 0x12, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x52, 0x53, 0x41, 0x5f, - 0x34, 0x30, 0x39, 0x36, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, - 0x54, 0x48, 0x4d, 0x5f, 0x45, 0x43, 0x5f, 0x50, 0x32, 0x35, 0x36, 0x10, 0x03, 0x12, 0x15, 0x0a, - 0x11, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x45, 0x43, 0x5f, 0x50, 0x33, - 0x38, 0x34, 0x10, 0x04, 0x12, 0x15, 0x0a, 0x11, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, - 0x4d, 0x5f, 0x45, 0x43, 0x5f, 0x50, 0x35, 0x32, 0x31, 0x10, 0x05, 0x2a, 0x73, 0x0a, 0x09, 0x4b, - 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1a, 0x0a, 0x16, 0x4b, 0x45, 0x59, 0x5f, - 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, - 0x45, 0x44, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x4b, 0x45, 0x59, 0x5f, 0x53, 0x54, 0x41, 0x54, - 0x55, 0x53, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x4b, - 0x45, 0x59, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x49, 0x4e, 0x41, 0x43, 0x54, 0x49, - 0x56, 0x45, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x4b, 0x45, 0x59, 0x5f, 0x53, 0x54, 0x41, 0x54, - 0x55, 0x53, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x52, 0x4f, 0x4d, 0x49, 0x53, 0x45, 0x44, 0x10, 0x03, - 0x2a, 0x4c, 0x0a, 0x07, 0x4b, 0x65, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x14, 0x4b, - 0x45, 0x59, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, - 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x4b, 0x45, 0x59, 0x5f, 0x4d, 0x4f, 0x44, - 0x45, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x4b, 0x45, 0x59, - 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x54, 0x45, 0x10, 0x02, 0x42, 0x82, - 0x01, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x42, 0x0c, 0x4f, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2e, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, - 0x66, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x2f, 0x67, 0x6f, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0xa2, 0x02, 0x03, - 0x50, 0x58, 0x58, 0xaa, 0x02, 0x06, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0xca, 0x02, 0x06, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0xe2, 0x02, 0x12, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5c, 0x47, - 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x06, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x43, 0x50, 0x35, 0x32, 0x31, 0x52, 0x31, 0x10, 0x07, 0x2a, 0x9b, 0x01, 0x0a, 0x09, 0x41, 0x6c, + 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, 0x19, 0x0a, 0x15, 0x41, 0x4c, 0x47, 0x4f, 0x52, + 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, + 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, + 0x52, 0x53, 0x41, 0x5f, 0x32, 0x30, 0x34, 0x38, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x41, 0x4c, + 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x52, 0x53, 0x41, 0x5f, 0x34, 0x30, 0x39, 0x36, + 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, + 0x45, 0x43, 0x5f, 0x50, 0x32, 0x35, 0x36, 0x10, 0x03, 0x12, 0x15, 0x0a, 0x11, 0x41, 0x4c, 0x47, + 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x45, 0x43, 0x5f, 0x50, 0x33, 0x38, 0x34, 0x10, 0x04, + 0x12, 0x15, 0x0a, 0x11, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x45, 0x43, + 0x5f, 0x50, 0x35, 0x32, 0x31, 0x10, 0x05, 0x2a, 0x73, 0x0a, 0x09, 0x4b, 0x65, 0x79, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x1a, 0x0a, 0x16, 0x4b, 0x45, 0x59, 0x5f, 0x53, 0x54, 0x41, 0x54, + 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, + 0x12, 0x15, 0x0a, 0x11, 0x4b, 0x45, 0x59, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x41, + 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x4b, 0x45, 0x59, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x49, 0x4e, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x02, + 0x12, 0x1a, 0x0a, 0x16, 0x4b, 0x45, 0x59, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, + 0x4f, 0x4d, 0x50, 0x52, 0x4f, 0x4d, 0x49, 0x53, 0x45, 0x44, 0x10, 0x03, 0x2a, 0x4c, 0x0a, 0x07, + 0x4b, 0x65, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x14, 0x4b, 0x45, 0x59, 0x5f, 0x4d, + 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, + 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x4b, 0x45, 0x59, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x4c, 0x4f, + 0x43, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x4b, 0x45, 0x59, 0x5f, 0x4d, 0x4f, 0x44, + 0x45, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x54, 0x45, 0x10, 0x02, 0x42, 0x82, 0x01, 0x0a, 0x0a, 0x63, + 0x6f, 0x6d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x42, 0x0c, 0x4f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, + 0x67, 0x6f, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0xa2, 0x02, 0x03, 0x50, 0x58, 0x58, 0xaa, + 0x02, 0x06, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0xca, 0x02, 0x06, 0x50, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0xe2, 0x02, 0x12, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x06, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/service/authorization/v2/authorization.proto b/service/authorization/v2/authorization.proto index 0b0f79eed2..609463665d 100644 --- a/service/authorization/v2/authorization.proto +++ b/service/authorization/v2/authorization.proto @@ -2,14 +2,23 @@ syntax = "proto3"; package authorization.v2; +import "buf/validate/validate.proto"; import "google/protobuf/any.proto"; +import "google/protobuf/wrappers.proto"; import "policy/objects.proto"; +enum Decision { + DECISION_UNSPECIFIED = 0; + DECISION_DENY = 1; + DECISION_PERMIT = 2; + // DECISION_OBLIGATED = 3; +} + message Token { // ephemeral id for tracking between request and response string ephemeral_id = 1; // access token - string jwt = 2; + string jwt = 2 [(buf.validate.field).required = true]; } // PE (Person Entity) or NPE (Non-Person Entity) @@ -44,7 +53,10 @@ message Entity { message EntityChain { // ephemeral id for tracking between request and response string ephemeral_id = 1; - repeated Entity entities = 2; + repeated Entity entities = 2 [ + (buf.validate.field).required = true, + (buf.validate.field).repeated = {min_items: 1} + ]; } // Entitlements for a given entity, mapping each attribute value FQN to any entitled actions[] @@ -73,44 +85,71 @@ message Resource { } } -// Can the entity (PE or NPE) represented by one entity chain take the provided action on each resource -message DecisionRequest { - EntityChain entity = 1; - policy.Action action = 2; - repeated Resource resources = 3; +message ResourceDecision { + // ephemeral id for tracking between request and response + string ephemeral_resource_id = 1; + // the decision result + Decision decision = 3; } -message DecisionResponse { - enum Decision { - DECISION_UNSPECIFIED = 0; - DECISION_DENY = 1; - DECISION_PERMIT = 2; - // DECISION_OBLIGATED = 3; - } + +// Can the entity (PE or NPE) access? +// 1. one entity chain +// 2. one action +// 3. one resource +message GetDecisionRequest { + EntityChain entity = 1 [(buf.validate.field).required = true]; + // name on action is required + policy.Action action = 2 [(buf.validate.field).required = true]; + Resource resource = 3 [(buf.validate.field).required = true]; +} +message GetDecisionResponse { // ephemeral id for tracking between request and response string ephemeral_entity_chain_id = 1; // ephemeral id for tracking between request and response string ephemeral_resource_id = 2; - // action that was requested + // name on action is required policy.Action action = 3; - // the decision response - Decision decision = 4; + // the decision on the resource + ResourceDecision decision = 4; // optional list of obligations represented in URI format // repeated string obligations = 5; } -message GetDecisionRequest { - DecisionRequest decision_request = 1; -} -message GetDecisionResponse { - DecisionResponse decision_response = 1; +// Can the entity (PE or NPE) access? +// 1. one entity chain +// 2. one action +// 3. multiple resources +// Note: this is a more performant bulk request for multiple resource decisions +message GetDecisionMultiResourceRequest { + // The entity chain must be defined + EntityChain entity = 1 [(buf.validate.field).required = true]; + // name on action is required + policy.Action action = 2 [(buf.validate.field).required = true]; + repeated Resource resources = 3 [ + (buf.validate.field).required = true, + (buf.validate.field).repeated = {min_items: 1} + ]; +} +message GetDecisionMultiResourceResponse { + // ephemeral id for tracking between request and response + string ephemeral_entity_chain_id = 1; + // name on action is required + policy.Action action = 3; + // convenience flag indicating global resource decisions result (permit/deny) + google.protobuf.BoolValue all_permitted = 2; + // individual resource decisions + repeated ResourceDecision resource_decisions = 4; } -// More performant bulk request for multiple decisions +// Can the entities (PE or NPE) access? +// 1. Multiplexing of a Decision request +// This is a more performant bulk request for complex decisioning (multiple entity chains or actions on +// multiple resource decisions) message GetDecisionBulkRequest { - repeated DecisionRequest decision_requests = 1; + repeated GetDecisionMultiResourceRequest decision_requests = 1; } message GetDecisionBulkResponse { - repeated DecisionResponse decision_responses = 1; + repeated GetDecisionMultiResourceResponse decision_responses = 1; } // What can the entity do, broken down as permitted actions on attribute value FQNs @@ -120,7 +159,10 @@ message GetDecisionBulkResponse { message GetEntitlementsRequest { // list of requested entities // todo: should this be an entity chain? - repeated Entity entities = 1; + repeated Entity entities = 1 [ + (buf.validate.field).required = true, + (buf.validate.field).repeated = {min_items: 1} + ]; // optional parameter to return all entitled values for attribute definitions with hierarchy rules, propagating // down the hierarchical values instead of returning solely the value that is directly entitled optional bool with_comprehensive_hierarchy = 3; @@ -129,34 +171,27 @@ message GetEntitlementsResponse { repeated EntityEntitlements entitlements = 1; } -// Can the entity (PE or NPE) represented by this token take the provided action on the set of resources +// Can the entity (PE or NPE) represented by this token take the provided action on the single resource message TokenDecisionRequest { - Token token = 1; - policy.Action action = 2; - repeated Resource resources = 3; + Token token = 1 [(buf.validate.field).required = true]; + // name on action is required + policy.Action action = 2 [(buf.validate.field).required = true]; + Resource resource = 3 [(buf.validate.field).required = true]; } message GetDecisionByTokenRequest { TokenDecisionRequest decision_request = 1; } message GetDecisionByTokenResponse { - DecisionResponse decision_response = 1; -} - -// More performant bulk request for multiple decisions -message GetDecisionBulkByTokenRequest { - repeated TokenDecisionRequest decision_requests = 1; -} -message GetDecisionBulkByTokenResponse { - repeated DecisionResponse decision_responses = 1; + GetDecisionResponse decision_response = 1; } service AuthorizationService { rpc GetDecision(GetDecisionRequest) returns (GetDecisionResponse) {} + rpc GetDecisionMultiResource(GetDecisionMultiResourceRequest) returns (GetDecisionMultiResourceResponse) {} rpc GetDecisionBulk(GetDecisionBulkRequest) returns (GetDecisionBulkResponse) {} rpc GetDecisionByToken(GetDecisionByTokenRequest) returns (GetDecisionByTokenResponse) {} - rpc GetDecisionBulkByToken(GetDecisionBulkByTokenRequest) returns (GetDecisionBulkByTokenResponse) {} rpc GetEntitlements(GetEntitlementsRequest) returns (GetEntitlementsResponse) {} } diff --git a/service/policy/objects.proto b/service/policy/objects.proto index 13cbfdc535..2632212cba 100644 --- a/service/policy/objects.proto +++ b/service/policy/objects.proto @@ -129,7 +129,11 @@ message Action { string custom = 2; } - string name = 4; + // Name is required to be set whenever an action is passed in an RPC + string name = 4 [ + (buf.validate.field).required = true, + (buf.validate.field).string = {min_len: 1} + ]; common.Metadata metadata = 100; } From 8be0ff6186def61fdfc00a10dc6c959c04fb7241 Mon Sep 17 00:00:00 2001 From: jakedoublev Date: Tue, 13 May 2025 10:42:18 -0700 Subject: [PATCH 21/49] improve protovalidate rules --- .../go/authorization/v2/authorization.pb.go | 330 ++++++++++-------- service/authorization/v2/authorization.proto | 19 + 2 files changed, 194 insertions(+), 155 deletions(-) diff --git a/protocol/go/authorization/v2/authorization.pb.go b/protocol/go/authorization/v2/authorization.pb.go index f47d0276ee..a5deba108f 100644 --- a/protocol/go/authorization/v2/authorization.pb.go +++ b/protocol/go/authorization/v2/authorization.pb.go @@ -1436,7 +1436,7 @@ var file_authorization_v2_authorization_proto_rawDesc = []byte{ 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x22, 0xc3, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x22, 0xaa, 0x02, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, @@ -1448,169 +1448,189 @@ var file_authorization_v2_authorization_proto_rawDesc = []byte{ 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x08, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0xec, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, - 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x39, 0x0a, 0x19, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x16, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x45, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x15, 0x65, - 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x65, 0x70, 0x68, 0x65, - 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, - 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x0a, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xd7, 0x01, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x44, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x06, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, - 0x01, 0x01, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x2e, 0x0a, 0x06, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, - 0x01, 0x01, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x09, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, - 0x01, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x22, 0x99, 0x02, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, - 0x72, 0x61, 0x6c, 0x5f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x65, 0x70, 0x68, 0x65, 0x6d, - 0x65, 0x72, 0x61, 0x6c, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, - 0x64, 0x12, 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3a, 0x65, 0xba, 0x48, 0x62, 0x1a, 0x60, 0x0a, + 0x29, 0x67, 0x65, 0x74, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, + 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x1c, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, + 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x15, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, + 0x69, 0x73, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x22, + 0xec, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x65, 0x70, 0x68, 0x65, 0x6d, + 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x65, 0x70, 0x68, 0x65, + 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, + 0x49, 0x64, 0x12, 0x32, 0x0a, 0x15, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x13, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3e, + 0x0a, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xc4, + 0x02, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, + 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, + 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x12, 0x2e, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, - 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x61, 0x6c, - 0x6c, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x12, 0x51, 0x0a, 0x12, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x78, 0x0a, - 0x16, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5e, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x45, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x3a, 0x6b, 0xba, 0x48, 0x68, 0x1a, 0x66, 0x0a, + 0x2f, 0x67, 0x65, 0x74, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x75, + 0x6c, 0x74, 0x69, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, + 0x12, 0x1c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75, + 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x15, + 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x22, 0x99, 0x02, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x65, 0x70, + 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x65, + 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, + 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, + 0x0d, 0x61, 0x6c, 0x6c, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x12, 0x51, + 0x0a, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x11, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x22, 0x78, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5e, 0x0a, 0x11, 0x64, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, 0x7c, 0x0a, 0x17, 0x47, + 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, 0x7c, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x44, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x61, 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, - 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, - 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22, 0xc3, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, - 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x41, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x42, 0x0b, 0xba, 0x48, - 0x08, 0xc8, 0x01, 0x01, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x69, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x1c, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, - 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, - 0x63, 0x68, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x1a, 0x77, 0x69, 0x74, - 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x48, 0x69, - 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x88, 0x01, 0x01, 0x42, 0x1f, 0x0a, 0x1d, 0x5f, 0x77, - 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, - 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x22, 0x63, 0x0a, 0x17, 0x47, - 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22, 0xc3, 0x01, 0x0a, 0x16, 0x47, 0x65, + 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x08, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x1c, 0x77, 0x69, 0x74, 0x68, 0x5f, + 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, + 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, + 0x1a, 0x77, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, + 0x76, 0x65, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x88, 0x01, 0x01, 0x42, 0x1f, + 0x0a, 0x1d, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, + 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x22, + 0x63, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0c, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x22, 0xa6, 0x02, 0x0a, 0x14, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x35, 0x0a, + 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x22, 0xbd, 0x01, 0x0a, 0x14, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x35, 0x0a, 0x05, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, - 0x12, 0x2e, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x3e, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x06, - 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x22, 0x6e, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, - 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x51, 0x0a, - 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, - 0x0f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x22, 0x70, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, - 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, - 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, - 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x2a, 0x4c, 0x0a, 0x08, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, - 0x0a, 0x14, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, - 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x45, 0x43, 0x49, - 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4e, 0x59, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x44, - 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x54, 0x10, 0x02, - 0x32, 0xc1, 0x04, 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5c, 0x0a, 0x0b, 0x47, 0x65, 0x74, - 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, - 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x83, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x44, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x12, 0x31, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x05, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2e, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x3a, 0x67, 0xba, 0x48, 0x64, 0x1a, 0x62, 0x0a, 0x2b, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, + 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x1c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x15, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x22, 0x6e, 0x0a, + 0x19, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x51, 0x0a, 0x10, 0x64, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0f, 0x64, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x70, 0x0a, + 0x1a, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x11, 0x64, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x10, 0x64, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, + 0x4c, 0x0a, 0x08, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x14, 0x44, + 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, + 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, + 0x4e, 0x5f, 0x44, 0x45, 0x4e, 0x59, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x45, 0x43, 0x49, + 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x32, 0xc1, 0x04, + 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5c, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, + 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x83, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x12, 0x31, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, - 0x0f, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, - 0x12, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, - 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, - 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x71, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x44, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2b, 0x2e, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, - 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x0f, 0x47, 0x65, - 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x28, 0x2e, + 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x12, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, - 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x42, 0xd5, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x42, 0x12, 0x41, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x50, 0x01, 0x5a, 0x48, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, 0x6f, 0x2f, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x3b, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x32, 0xa2, 0x02, 0x03, - 0x41, 0x58, 0x58, 0xaa, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x1c, 0x41, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x41, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x71, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2b, 0x2e, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, + 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x45, 0x6e, + 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x28, 0x2e, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, + 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x42, 0xd5, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x42, 0x12, 0x41, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, + 0x5a, 0x48, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, + 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, 0x6f, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x3b, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x32, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, + 0xaa, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x56, 0x32, 0xca, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x1c, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( diff --git a/service/authorization/v2/authorization.proto b/service/authorization/v2/authorization.proto index 609463665d..c1fe62dc5b 100644 --- a/service/authorization/v2/authorization.proto +++ b/service/authorization/v2/authorization.proto @@ -101,6 +101,12 @@ message GetDecisionRequest { // name on action is required policy.Action action = 2 [(buf.validate.field).required = true]; Resource resource = 3 [(buf.validate.field).required = true]; + + option (buf.validate.message).cel = { + id: "get_decision_request.action_name_required" + message: "action.name must be provided" + expression: "has(this.action.name)" + }; } message GetDecisionResponse { // ephemeral id for tracking between request and response @@ -129,6 +135,12 @@ message GetDecisionMultiResourceRequest { (buf.validate.field).required = true, (buf.validate.field).repeated = {min_items: 1} ]; + + option (buf.validate.message).cel = { + id: "get_decision_multi_request.action_name_required" + message: "action.name must be provided" + expression: "has(this.action.name)" + }; } message GetDecisionMultiResourceResponse { // ephemeral id for tracking between request and response @@ -177,6 +189,13 @@ message TokenDecisionRequest { // name on action is required policy.Action action = 2 [(buf.validate.field).required = true]; Resource resource = 3 [(buf.validate.field).required = true]; + + // Add CEL validation for the nested field + option (buf.validate.message).cel = { + id: "token_decision_request.action_name_required" + message: "action.name must be provided" + expression: "has(this.action.name)" + }; } message GetDecisionByTokenRequest { From 0fdab47e611203f20978672909f878c259b0a288 Mon Sep 17 00:00:00 2001 From: jakedoublev Date: Tue, 13 May 2025 10:43:08 -0700 Subject: [PATCH 22/49] improve protovalidate rules --- docs/grpc/index.html | 2 +- .../authorization/authorization.swagger.json | 3 +- .../v2/authorization.swagger.json | 3 +- .../policy/actions/actions.swagger.json | 3 +- .../policy/attributes/attributes.swagger.json | 3 +- .../resource_mapping.swagger.json | 3 +- .../subject_mapping.swagger.json | 3 +- .../openapi/policy/unsafe/unsafe.swagger.json | 3 +- protocol/go/policy/objects.pb.go | 722 +++++++++--------- service/policy/objects.proto | 6 +- 10 files changed, 369 insertions(+), 382 deletions(-) diff --git a/docs/grpc/index.html b/docs/grpc/index.html index 3bc027cf39..778d4402cf 100644 --- a/docs/grpc/index.html +++ b/docs/grpc/index.html @@ -2017,7 +2017,7 @@

      Action

      - + diff --git a/docs/openapi/authorization/authorization.swagger.json b/docs/openapi/authorization/authorization.swagger.json index e49df30e93..58443ba5dd 100644 --- a/docs/openapi/authorization/authorization.swagger.json +++ b/docs/openapi/authorization/authorization.swagger.json @@ -437,8 +437,7 @@ "title": "Deprecated" }, "name": { - "type": "string", - "title": "Name is required to be set whenever an action is passed in an RPC" + "type": "string" }, "metadata": { "$ref": "#/definitions/commonMetadata" diff --git a/docs/openapi/authorization/v2/authorization.swagger.json b/docs/openapi/authorization/v2/authorization.swagger.json index 083bea8146..963dcb89fa 100644 --- a/docs/openapi/authorization/v2/authorization.swagger.json +++ b/docs/openapi/authorization/v2/authorization.swagger.json @@ -213,8 +213,7 @@ "title": "Deprecated" }, "name": { - "type": "string", - "title": "Name is required to be set whenever an action is passed in an RPC" + "type": "string" }, "metadata": { "$ref": "#/definitions/commonMetadata" diff --git a/docs/openapi/policy/actions/actions.swagger.json b/docs/openapi/policy/actions/actions.swagger.json index 452fb3b0fb..7d40140586 100644 --- a/docs/openapi/policy/actions/actions.swagger.json +++ b/docs/openapi/policy/actions/actions.swagger.json @@ -150,8 +150,7 @@ "title": "Deprecated" }, "name": { - "type": "string", - "title": "Name is required to be set whenever an action is passed in an RPC" + "type": "string" }, "metadata": { "$ref": "#/definitions/commonMetadata" diff --git a/docs/openapi/policy/attributes/attributes.swagger.json b/docs/openapi/policy/attributes/attributes.swagger.json index 759137a722..cc164b7bcd 100644 --- a/docs/openapi/policy/attributes/attributes.swagger.json +++ b/docs/openapi/policy/attributes/attributes.swagger.json @@ -1007,8 +1007,7 @@ "title": "Deprecated" }, "name": { - "type": "string", - "title": "Name is required to be set whenever an action is passed in an RPC" + "type": "string" }, "metadata": { "$ref": "#/definitions/commonMetadata" diff --git a/docs/openapi/policy/resourcemapping/resource_mapping.swagger.json b/docs/openapi/policy/resourcemapping/resource_mapping.swagger.json index 4f6279bdf8..6815a6b315 100644 --- a/docs/openapi/policy/resourcemapping/resource_mapping.swagger.json +++ b/docs/openapi/policy/resourcemapping/resource_mapping.swagger.json @@ -513,8 +513,7 @@ "title": "Deprecated" }, "name": { - "type": "string", - "title": "Name is required to be set whenever an action is passed in an RPC" + "type": "string" }, "metadata": { "$ref": "#/definitions/commonMetadata" diff --git a/docs/openapi/policy/subjectmapping/subject_mapping.swagger.json b/docs/openapi/policy/subjectmapping/subject_mapping.swagger.json index 1df0919469..3e64f0da2b 100644 --- a/docs/openapi/policy/subjectmapping/subject_mapping.swagger.json +++ b/docs/openapi/policy/subjectmapping/subject_mapping.swagger.json @@ -520,8 +520,7 @@ "title": "Deprecated" }, "name": { - "type": "string", - "title": "Name is required to be set whenever an action is passed in an RPC" + "type": "string" }, "metadata": { "$ref": "#/definitions/commonMetadata" diff --git a/docs/openapi/policy/unsafe/unsafe.swagger.json b/docs/openapi/policy/unsafe/unsafe.swagger.json index 1b42a788e3..d58a667072 100644 --- a/docs/openapi/policy/unsafe/unsafe.swagger.json +++ b/docs/openapi/policy/unsafe/unsafe.swagger.json @@ -410,8 +410,7 @@ "title": "Deprecated" }, "name": { - "type": "string", - "title": "Name is required to be set whenever an action is passed in an RPC" + "type": "string" }, "metadata": { "$ref": "#/definitions/commonMetadata" diff --git a/protocol/go/policy/objects.pb.go b/protocol/go/policy/objects.pb.go index 8e2208e28b..36ab8ce9e5 100644 --- a/protocol/go/policy/objects.pb.go +++ b/protocol/go/policy/objects.pb.go @@ -941,8 +941,7 @@ type Action struct { // // *Action_Standard // *Action_Custom - Value isAction_Value `protobuf_oneof:"value"` - // Name is required to be set whenever an action is passed in an RPC + Value isAction_Value `protobuf_oneof:"value"` Name string `protobuf:"bytes,4,opt,name=name,proto3" json:"name,omitempty"` Metadata *common.Metadata `protobuf:"bytes,100,opt,name=metadata,proto3" json:"metadata,omitempty"` } @@ -2599,383 +2598,382 @@ var file_policy_objects_proto_rawDesc = []byte{ 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x52, - 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0xb4, 0x02, 0x0a, 0x06, 0x41, 0x63, 0x74, + 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0xa8, 0x02, 0x0a, 0x06, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3b, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x08, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x12, 0x18, 0x0a, 0x06, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x48, 0x00, 0x52, 0x06, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x1e, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0xc8, 0x01, 0x01, - 0x72, 0x02, 0x10, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, - 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x6c, 0x0a, 0x0e, 0x53, 0x74, 0x61, 0x6e, - 0x64, 0x61, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x1b, 0x53, 0x54, - 0x41, 0x4e, 0x44, 0x41, 0x52, 0x44, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, - 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x53, - 0x54, 0x41, 0x4e, 0x44, 0x41, 0x52, 0x44, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, - 0x45, 0x43, 0x52, 0x59, 0x50, 0x54, 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x54, 0x41, 0x4e, - 0x44, 0x41, 0x52, 0x44, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x54, 0x52, 0x41, 0x4e, - 0x53, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, - 0x81, 0x02, 0x0a, 0x0e, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x61, 0x70, 0x70, 0x69, - 0x6e, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x36, 0x0a, 0x0f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0e, 0x61, 0x74, 0x74, 0x72, - 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4f, 0x0a, 0x15, 0x73, 0x75, - 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x2e, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x52, 0x13, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, - 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x12, 0x28, 0x0a, 0x07, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x22, 0xe9, 0x01, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x4d, 0x0a, 0x1f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x65, 0x78, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, - 0x01, 0x01, 0x52, 0x1c, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x45, 0x78, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x4b, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x53, 0x75, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x6f, 0x72, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x82, 0x01, - 0x02, 0x10, 0x01, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x40, 0x0a, - 0x17, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x42, 0x08, - 0xba, 0x48, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x15, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, - 0xa7, 0x01, 0x0a, 0x0e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x12, 0x3b, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, - 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, - 0x02, 0x08, 0x01, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x58, 0x0a, 0x10, 0x62, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x5f, 0x6f, 0x70, 0x65, 0x72, 0x61, - 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x70, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x6f, 0x6c, - 0x65, 0x61, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x0b, 0xba, 0x48, 0x08, - 0xc8, 0x01, 0x01, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0f, 0x62, 0x6f, 0x6f, 0x6c, 0x65, 0x61, - 0x6e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x59, 0x0a, 0x0a, 0x53, 0x75, 0x62, - 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x74, 0x12, 0x4b, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, - 0x02, 0x08, 0x01, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x73, 0x22, 0x94, 0x01, 0x0a, 0x13, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, - 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x3f, 0x0a, 0x0c, - 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x73, 0x65, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x53, 0x75, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x53, 0x65, 0x74, 0x42, 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, - 0x52, 0x0b, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x74, 0x73, 0x12, 0x2c, 0x0a, - 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x7c, 0x0a, 0x0f, 0x53, - 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x12, 0x42, - 0x0a, 0x17, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x0a, 0xba, 0x48, 0x07, 0xc8, 0x01, 0x01, 0x72, 0x02, 0x10, 0x01, 0x52, 0x15, 0x65, 0x78, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x78, 0x74, 0x65, - 0x72, 0x6e, 0x61, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x9b, 0x01, 0x0a, 0x14, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, - 0x69, 0x64, 0x12, 0x29, 0x0a, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, - 0x52, 0x0b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x1a, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xba, 0x48, 0x03, - 0xc8, 0x01, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, + 0x48, 0x00, 0x52, 0x06, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2c, + 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x6c, 0x0a, 0x0e, + 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, + 0x0a, 0x1b, 0x53, 0x54, 0x41, 0x4e, 0x44, 0x41, 0x52, 0x44, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, + 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, + 0x1b, 0x0a, 0x17, 0x53, 0x54, 0x41, 0x4e, 0x44, 0x41, 0x52, 0x44, 0x5f, 0x41, 0x43, 0x54, 0x49, + 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x43, 0x52, 0x59, 0x50, 0x54, 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, + 0x53, 0x54, 0x41, 0x4e, 0x44, 0x41, 0x52, 0x44, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, + 0x54, 0x52, 0x41, 0x4e, 0x53, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x42, 0x07, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x22, 0x81, 0x02, 0x0a, 0x0e, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, + 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x36, 0x0a, 0x0f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0e, + 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4f, + 0x0a, 0x15, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, + 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, + 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x52, 0x13, 0x73, 0x75, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x12, + 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xd9, 0x01, 0x0a, 0x0f, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2c, 0x0a, 0x08, 0x6d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xe9, 0x01, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x64, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4d, 0x0a, 0x1f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x5f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, + 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x1c, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x45, + 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4b, 0x0a, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, + 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x4f, 0x70, + 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, + 0x01, 0x01, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, + 0x72, 0x12, 0x40, 0x0a, 0x17, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x65, 0x78, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x15, 0x73, 0x75, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x73, 0x22, 0xa7, 0x01, 0x0a, 0x0e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x3b, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x08, 0xba, + 0x48, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x0a, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x58, 0x0a, 0x10, 0x62, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x5f, 0x6f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, + 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x42, + 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0f, 0x62, 0x6f, + 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x22, 0x59, 0x0a, + 0x0a, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x74, 0x12, 0x4b, 0x0a, 0x10, 0x63, + 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x43, + 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x08, 0xba, + 0x48, 0x05, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x22, 0x94, 0x01, 0x0a, 0x13, 0x53, 0x75, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x3f, 0x0a, 0x0c, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x73, 0x65, 0x74, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, + 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x74, 0x42, 0x08, 0xba, 0x48, 0x05, 0x92, + 0x01, 0x02, 0x08, 0x01, 0x52, 0x0b, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x53, 0x65, 0x74, + 0x73, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, + 0x7c, 0x0a, 0x0f, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, + 0x74, 0x79, 0x12, 0x42, 0x0a, 0x17, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x73, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0xc8, 0x01, 0x01, 0x72, 0x02, 0x10, 0x01, 0x52, + 0x15, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, + 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, + 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x9b, 0x01, + 0x0a, 0x14, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, + 0x67, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x29, 0x0a, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xba, 0x48, + 0x03, 0xc8, 0x01, 0x01, 0x52, 0x0b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, + 0x64, 0x12, 0x1a, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, + 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xd9, 0x01, 0x0a, 0x0f, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3e, 0x0a, + 0x0f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x0e, 0x61, + 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, + 0x05, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x65, + 0x72, 0x6d, 0x73, 0x12, 0x32, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x22, 0xff, 0x04, 0x0a, 0x0f, 0x4b, 0x65, 0x79, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x87, 0x03, 0x0a, 0x03, + 0x75, 0x72, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0xf4, 0x02, 0xba, 0x48, 0xf0, 0x02, + 0xba, 0x01, 0xec, 0x02, 0x0a, 0x0a, 0x75, 0x72, 0x69, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x12, 0xcf, 0x01, 0x55, 0x52, 0x49, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, + 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x55, 0x52, 0x4c, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, + 0x2c, 0x20, 0x27, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x64, 0x65, 0x6d, 0x6f, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x27, 0x29, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x20, + 0x62, 0x79, 0x20, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x65, + 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x20, 0x45, 0x61, 0x63, 0x68, 0x20, 0x73, 0x65, 0x67, + 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, + 0x61, 0x6e, 0x64, 0x20, 0x65, 0x6e, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x6e, 0x20, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, + 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x2c, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x20, 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e, 0x73, 0x2c, 0x20, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, + 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x65, + 0x73, 0x2e, 0x1a, 0x8b, 0x01, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, + 0x73, 0x28, 0x27, 0x5e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3f, 0x3a, 0x2f, 0x2f, 0x5b, 0x61, 0x2d, + 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, + 0x30, 0x2d, 0x39, 0x5c, 0x5c, 0x2d, 0x5d, 0x7b, 0x30, 0x2c, 0x36, 0x31, 0x7d, 0x5b, 0x61, 0x2d, + 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x28, 0x5c, 0x5c, 0x2e, 0x5b, 0x61, + 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, + 0x5a, 0x30, 0x2d, 0x39, 0x5c, 0x5c, 0x2d, 0x5d, 0x7b, 0x30, 0x2c, 0x36, 0x31, 0x7d, 0x5b, 0x61, + 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x29, 0x2a, 0x28, 0x3a, 0x5b, + 0x30, 0x2d, 0x39, 0x5d, 0x2b, 0x29, 0x3f, 0x28, 0x2f, 0x2e, 0x2a, 0x29, 0x3f, 0x24, 0x27, 0x29, + 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x30, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, + 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x09, 0x70, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x33, 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x70, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, + 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x29, 0x0a, 0x08, + 0x6b, 0x61, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, + 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x4b, 0x65, 0x79, 0x52, 0x07, + 0x6b, 0x61, 0x73, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, - 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3e, 0x0a, 0x0f, 0x61, 0x74, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x0e, 0x61, 0x74, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x65, 0x72, - 0x6d, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x65, 0x72, 0x6d, 0x73, 0x12, - 0x32, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, - 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x05, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x22, 0xff, 0x04, 0x0a, 0x0f, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x87, 0x03, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0xf4, 0x02, 0xba, 0x48, 0xf0, 0x02, 0xba, 0x01, 0xec, 0x02, - 0x0a, 0x0a, 0x75, 0x72, 0x69, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0xcf, 0x01, 0x55, - 0x52, 0x49, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x20, 0x55, 0x52, 0x4c, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x2c, 0x20, 0x27, 0x68, - 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x27, 0x29, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, - 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x2e, 0x20, 0x45, 0x61, 0x63, 0x68, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, - 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, - 0x65, 0x6e, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, - 0x65, 0x72, 0x2c, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, - 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e, 0x73, 0x2c, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, 0x75, - 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, - 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x65, 0x73, 0x2e, 0x1a, 0x8b, - 0x01, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, - 0x68, 0x74, 0x74, 0x70, 0x73, 0x3f, 0x3a, 0x2f, 0x2f, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, + 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x97, 0x02, 0x0a, 0x03, 0x4b, 0x65, + 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x37, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x52, 0x08, 0x69, 0x73, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x77, 0x61, + 0x73, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x77, 0x61, 0x73, 0x4d, + 0x61, 0x70, 0x70, 0x65, 0x64, 0x12, 0x33, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, + 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, + 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x29, 0x0a, 0x03, 0x6b, 0x61, + 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x2e, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x52, 0x03, 0x6b, 0x61, 0x73, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x22, 0x84, 0x01, 0x0a, 0x0c, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x4b, 0x65, 0x79, 0x12, 0x1c, 0x0a, 0x03, 0x70, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x40, 0x52, 0x03, 0x70, + 0x65, 0x6d, 0x12, 0x1b, 0x0a, 0x03, 0x6b, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x09, 0xba, 0x48, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x20, 0x52, 0x03, 0x6b, 0x69, 0x64, 0x12, + 0x39, 0x0a, 0x03, 0x61, 0x6c, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x70, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, + 0x65, 0x79, 0x41, 0x6c, 0x67, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x82, 0x01, + 0x04, 0x10, 0x01, 0x20, 0x00, 0x52, 0x03, 0x61, 0x6c, 0x67, 0x22, 0x3b, 0x0a, 0x0f, 0x4b, 0x61, + 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x53, 0x65, 0x74, 0x12, 0x28, 0x0a, + 0x04, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, + 0x79, 0x52, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x22, 0xe0, 0x03, 0x0a, 0x09, 0x50, 0x75, 0x62, 0x6c, + 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x84, 0x03, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0xe9, 0x02, 0xba, 0x48, 0xe5, 0x02, 0xba, 0x01, 0xe1, + 0x02, 0x0a, 0x0a, 0x75, 0x72, 0x69, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0xcf, 0x01, + 0x55, 0x52, 0x49, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x20, 0x55, 0x52, 0x4c, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x2c, 0x20, 0x27, + 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x27, 0x29, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, + 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x2e, 0x20, 0x45, 0x61, 0x63, 0x68, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, + 0x74, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x61, 0x6e, 0x64, + 0x20, 0x65, 0x6e, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, + 0x74, 0x65, 0x72, 0x2c, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x20, 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e, 0x73, 0x2c, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, + 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, + 0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x65, 0x73, 0x2e, 0x1a, + 0x80, 0x01, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, + 0x5e, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5c, 0x5c, 0x2d, 0x5d, 0x7b, 0x30, 0x2c, 0x36, 0x31, 0x7d, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x28, 0x5c, 0x5c, 0x2e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5c, 0x5c, 0x2d, 0x5d, 0x7b, 0x30, 0x2c, 0x36, 0x31, 0x7d, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, - 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x29, 0x2a, 0x28, 0x3a, 0x5b, 0x30, 0x2d, 0x39, 0x5d, - 0x2b, 0x29, 0x3f, 0x28, 0x2f, 0x2e, 0x2a, 0x29, 0x3f, 0x24, 0x27, 0x29, 0x52, 0x03, 0x75, 0x72, - 0x69, 0x12, 0x30, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x4b, 0x65, 0x79, 0x12, 0x33, 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x29, 0x0a, 0x08, 0x6b, 0x61, 0x73, 0x5f, - 0x6b, 0x65, 0x79, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x4b, 0x65, 0x79, 0x52, 0x07, 0x6b, 0x61, 0x73, 0x4b, - 0x65, 0x79, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x97, 0x02, 0x0a, 0x03, 0x4b, 0x65, 0x79, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x37, 0x0a, - 0x09, 0x69, 0x73, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x08, 0x69, 0x73, - 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x77, 0x61, 0x73, 0x5f, 0x6d, 0x61, - 0x70, 0x70, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, - 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x77, 0x61, 0x73, 0x4d, 0x61, 0x70, 0x70, 0x65, - 0x64, 0x12, 0x33, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, - 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x09, 0x70, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x29, 0x0a, 0x03, 0x6b, 0x61, 0x73, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x65, 0x79, - 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x03, 0x6b, 0x61, - 0x73, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, - 0x84, 0x01, 0x0a, 0x0c, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, - 0x12, 0x1c, 0x0a, 0x03, 0x70, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, - 0x48, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x40, 0x52, 0x03, 0x70, 0x65, 0x6d, 0x12, 0x1b, - 0x0a, 0x03, 0x6b, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x09, 0xba, 0x48, 0x06, - 0x72, 0x04, 0x10, 0x01, 0x18, 0x20, 0x52, 0x03, 0x6b, 0x69, 0x64, 0x12, 0x39, 0x0a, 0x03, 0x61, - 0x6c, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x41, 0x6c, - 0x67, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x82, 0x01, 0x04, 0x10, 0x01, 0x20, - 0x00, 0x52, 0x03, 0x61, 0x6c, 0x67, 0x22, 0x3b, 0x0a, 0x0f, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x53, 0x65, 0x74, 0x12, 0x28, 0x0a, 0x04, 0x6b, 0x65, 0x79, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x04, 0x6b, - 0x65, 0x79, 0x73, 0x22, 0xe0, 0x03, 0x0a, 0x09, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, - 0x79, 0x12, 0x84, 0x03, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0xe9, 0x02, 0xba, 0x48, 0xe5, 0x02, 0xba, 0x01, 0xe1, 0x02, 0x0a, 0x0a, 0x75, - 0x72, 0x69, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0xcf, 0x01, 0x55, 0x52, 0x49, 0x20, - 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, - 0x55, 0x52, 0x4c, 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x2c, 0x20, 0x27, 0x68, 0x74, 0x74, 0x70, - 0x73, 0x3a, 0x2f, 0x2f, 0x64, 0x65, 0x6d, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x27, 0x29, 0x20, - 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x61, 0x64, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, - 0x20, 0x45, 0x61, 0x63, 0x68, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x6d, 0x75, - 0x73, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65, 0x6e, 0x64, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, 0x75, - 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x2c, - 0x20, 0x63, 0x61, 0x6e, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x68, 0x79, 0x70, - 0x68, 0x65, 0x6e, 0x73, 0x2c, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, 0x75, 0x6d, 0x65, 0x72, - 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x2c, 0x20, 0x61, - 0x6e, 0x64, 0x20, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x65, 0x73, 0x2e, 0x1a, 0x80, 0x01, 0x74, 0x68, - 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x68, 0x74, 0x74, - 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, - 0x28, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5c, 0x5c, 0x2d, 0x5d, 0x7b, - 0x30, 0x2c, 0x36, 0x31, 0x7d, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, - 0x29, 0x3f, 0x28, 0x5c, 0x5c, 0x2e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, - 0x5d, 0x28, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5c, 0x5c, 0x2d, 0x5d, - 0x7b, 0x30, 0x2c, 0x36, 0x31, 0x7d, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, - 0x5d, 0x29, 0x3f, 0x29, 0x2a, 0x28, 0x2f, 0x2e, 0x2a, 0x29, 0x3f, 0x24, 0x27, 0x29, 0x48, 0x00, - 0x52, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x12, 0x31, 0x0a, 0x06, 0x63, 0x61, 0x63, 0x68, - 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x53, 0x65, - 0x74, 0x48, 0x00, 0x52, 0x06, 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, 0x0c, 0x0a, 0x0a, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x52, - 0x05, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x22, 0x9f, 0x01, 0x0a, 0x12, 0x52, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x37, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, - 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xa5, 0x01, 0x0a, 0x17, 0x52, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x36, 0x0a, 0x08, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x22, 0x61, 0x0a, 0x06, 0x4b, 0x61, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x15, 0x0a, 0x06, 0x6b, 0x61, - 0x73, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6b, 0x61, 0x73, 0x49, - 0x64, 0x12, 0x27, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, - 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x73, 0x79, 0x6d, 0x6d, 0x65, 0x74, 0x72, - 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x17, 0x0a, 0x07, 0x6b, 0x61, - 0x73, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6b, 0x61, 0x73, - 0x55, 0x72, 0x69, 0x22, 0x2c, 0x0a, 0x0f, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x4b, 0x65, 0x79, 0x43, 0x74, 0x78, 0x12, 0x19, 0x0a, 0x03, 0x70, 0x65, 0x6d, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x03, 0x70, 0x65, - 0x6d, 0x22, 0x53, 0x0a, 0x10, 0x4b, 0x61, 0x73, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, - 0x65, 0x79, 0x43, 0x74, 0x78, 0x12, 0x1e, 0x0a, 0x06, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x05, - 0x6b, 0x65, 0x79, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, - 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x77, 0x72, 0x61, 0x70, - 0x70, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x22, 0xbf, 0x03, 0x0a, 0x0d, 0x41, 0x73, 0x79, 0x6d, 0x6d, - 0x65, 0x74, 0x72, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x6b, 0x65, 0x79, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6b, 0x65, 0x79, 0x49, 0x64, 0x12, - 0x36, 0x0a, 0x0d, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, - 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x52, 0x0c, 0x6b, 0x65, 0x79, 0x41, 0x6c, - 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, 0x30, 0x0a, 0x0a, 0x6b, 0x65, 0x79, 0x5f, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x09, - 0x6b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2a, 0x0a, 0x08, 0x6b, 0x65, 0x79, - 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x65, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x07, 0x6b, 0x65, - 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x3d, 0x0a, 0x0e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, - 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x74, 0x78, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, - 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x4b, 0x65, 0x79, 0x43, 0x74, 0x78, 0x52, 0x0c, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, - 0x79, 0x43, 0x74, 0x78, 0x12, 0x40, 0x0a, 0x0f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, - 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x74, 0x78, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, - 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, - 0x65, 0x4b, 0x65, 0x79, 0x43, 0x74, 0x78, 0x52, 0x0d, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, - 0x4b, 0x65, 0x79, 0x43, 0x74, 0x78, 0x12, 0x42, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x19, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x65, 0x79, 0x50, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, - 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x9e, 0x02, 0x0a, 0x0c, 0x53, 0x79, 0x6d, - 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x6b, 0x65, 0x79, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6b, 0x65, 0x79, 0x49, 0x64, - 0x12, 0x30, 0x0a, 0x0a, 0x6b, 0x65, 0x79, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x65, - 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x2a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x65, - 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x07, 0x6b, 0x65, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x17, - 0x0a, 0x07, 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x74, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x06, 0x6b, 0x65, 0x79, 0x43, 0x74, 0x78, 0x12, 0x42, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x65, 0x79, 0x50, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0e, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2c, 0x0a, 0x08, 0x6d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, - 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2a, 0xb3, 0x01, 0x0a, 0x15, 0x41, 0x74, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x45, - 0x6e, 0x75, 0x6d, 0x12, 0x28, 0x0a, 0x24, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, - 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, - 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x23, 0x0a, - 0x1f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x5f, - 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x41, 0x4c, 0x4c, 0x5f, 0x4f, 0x46, - 0x10, 0x01, 0x12, 0x23, 0x0a, 0x1f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x5f, - 0x52, 0x55, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x41, - 0x4e, 0x59, 0x5f, 0x4f, 0x46, 0x10, 0x02, 0x12, 0x26, 0x0a, 0x22, 0x41, 0x54, 0x54, 0x52, 0x49, + 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x29, 0x2a, 0x28, 0x2f, 0x2e, 0x2a, 0x29, 0x3f, 0x24, + 0x27, 0x29, 0x48, 0x00, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x12, 0x31, 0x0a, 0x06, + 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, + 0x65, 0x79, 0x53, 0x65, 0x74, 0x48, 0x00, 0x52, 0x06, 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x42, + 0x0c, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x4a, 0x04, 0x08, + 0x02, 0x10, 0x03, 0x52, 0x05, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x22, 0x9f, 0x01, 0x0a, 0x12, 0x52, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x2c, + 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xa5, 0x01, 0x0a, + 0x17, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x36, + 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x22, 0x61, 0x0a, 0x06, 0x4b, 0x61, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x15, + 0x0a, 0x06, 0x6b, 0x61, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x6b, 0x61, 0x73, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x73, 0x79, 0x6d, + 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x17, + 0x0a, 0x07, 0x6b, 0x61, 0x73, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x6b, 0x61, 0x73, 0x55, 0x72, 0x69, 0x22, 0x2c, 0x0a, 0x0f, 0x4b, 0x61, 0x73, 0x50, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x43, 0x74, 0x78, 0x12, 0x19, 0x0a, 0x03, 0x70, 0x65, + 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, + 0x52, 0x03, 0x70, 0x65, 0x6d, 0x22, 0x53, 0x0a, 0x10, 0x4b, 0x61, 0x73, 0x50, 0x72, 0x69, 0x76, + 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x43, 0x74, 0x78, 0x12, 0x1e, 0x0a, 0x06, 0x6b, 0x65, 0x79, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, + 0x10, 0x01, 0x52, 0x05, 0x6b, 0x65, 0x79, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x72, 0x61, + 0x70, 0x70, 0x65, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x22, 0xbf, 0x03, 0x0a, 0x0d, 0x41, + 0x73, 0x79, 0x6d, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x15, 0x0a, 0x06, + 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6b, 0x65, + 0x79, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x0d, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x6c, 0x67, 0x6f, 0x72, + 0x69, 0x74, 0x68, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x2e, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x52, 0x0c, 0x6b, + 0x65, 0x79, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, 0x30, 0x0a, 0x0a, 0x6b, + 0x65, 0x79, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x11, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2a, 0x0a, + 0x08, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x0f, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x65, 0x79, 0x4d, 0x6f, 0x64, 0x65, + 0x52, 0x07, 0x6b, 0x65, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x3d, 0x0a, 0x0e, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x74, 0x78, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x43, 0x74, 0x78, 0x52, 0x0c, 0x70, 0x75, 0x62, 0x6c, + 0x69, 0x63, 0x4b, 0x65, 0x79, 0x43, 0x74, 0x78, 0x12, 0x40, 0x0a, 0x0f, 0x70, 0x72, 0x69, 0x76, + 0x61, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x74, 0x78, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x50, 0x72, + 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x43, 0x74, 0x78, 0x52, 0x0d, 0x70, 0x72, 0x69, + 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x43, 0x74, 0x78, 0x12, 0x42, 0x0a, 0x0f, 0x70, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x65, 0x79, + 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0e, + 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2c, + 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x9e, 0x02, 0x0a, + 0x0c, 0x53, 0x79, 0x6d, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x15, 0x0a, + 0x06, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6b, + 0x65, 0x79, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x0a, 0x6b, 0x65, 0x79, 0x5f, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x2e, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x09, 0x6b, 0x65, 0x79, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x6f, + 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x2e, 0x4b, 0x65, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x07, 0x6b, 0x65, 0x79, 0x4d, 0x6f, + 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x74, 0x78, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x06, 0x6b, 0x65, 0x79, 0x43, 0x74, 0x78, 0x12, 0x42, 0x0a, 0x0f, 0x70, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x65, + 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, + 0x0e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, + 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2a, 0xb3, 0x01, + 0x0a, 0x15, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x54, + 0x79, 0x70, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x28, 0x0a, 0x24, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, - 0x4e, 0x55, 0x4d, 0x5f, 0x48, 0x49, 0x45, 0x52, 0x41, 0x52, 0x43, 0x48, 0x59, 0x10, 0x03, 0x2a, - 0xca, 0x01, 0x0a, 0x1a, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x61, 0x70, 0x70, 0x69, - 0x6e, 0x67, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x2d, - 0x0a, 0x29, 0x53, 0x55, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4d, 0x41, 0x50, 0x50, 0x49, 0x4e, - 0x47, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, - 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x24, 0x0a, - 0x20, 0x53, 0x55, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4d, 0x41, 0x50, 0x50, 0x49, 0x4e, 0x47, - 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x49, - 0x4e, 0x10, 0x01, 0x12, 0x28, 0x0a, 0x24, 0x53, 0x55, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4d, - 0x41, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, - 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x49, 0x4e, 0x10, 0x02, 0x12, 0x2d, 0x0a, - 0x29, 0x53, 0x55, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4d, 0x41, 0x50, 0x50, 0x49, 0x4e, 0x47, - 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x49, - 0x4e, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x53, 0x10, 0x03, 0x2a, 0x90, 0x01, 0x0a, - 0x18, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61, - 0x6e, 0x54, 0x79, 0x70, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x2b, 0x0a, 0x27, 0x43, 0x4f, 0x4e, - 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x42, 0x4f, 0x4f, 0x4c, 0x45, 0x41, 0x4e, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, - 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x23, 0x0a, 0x1f, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, - 0x49, 0x4f, 0x4e, 0x5f, 0x42, 0x4f, 0x4f, 0x4c, 0x45, 0x41, 0x4e, 0x5f, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x41, 0x4e, 0x44, 0x10, 0x01, 0x12, 0x22, 0x0a, 0x1e, 0x43, - 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x42, 0x4f, 0x4f, 0x4c, 0x45, 0x41, 0x4e, - 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x4f, 0x52, 0x10, 0x02, 0x2a, - 0x5d, 0x0a, 0x0a, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1b, 0x0a, - 0x17, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, - 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x4f, - 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x4e, - 0x41, 0x4c, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x45, 0x58, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x10, 0x02, 0x2a, 0x88, - 0x02, 0x0a, 0x13, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x41, - 0x6c, 0x67, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x27, 0x0a, 0x23, 0x4b, 0x41, 0x53, 0x5f, 0x50, 0x55, - 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47, 0x5f, 0x45, 0x4e, 0x55, - 0x4d, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, - 0x24, 0x0a, 0x20, 0x4b, 0x41, 0x53, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x4b, 0x45, - 0x59, 0x5f, 0x41, 0x4c, 0x47, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x52, 0x53, 0x41, 0x5f, 0x32, - 0x30, 0x34, 0x38, 0x10, 0x01, 0x12, 0x24, 0x0a, 0x20, 0x4b, 0x41, 0x53, 0x5f, 0x50, 0x55, 0x42, - 0x4c, 0x49, 0x43, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47, 0x5f, 0x45, 0x4e, 0x55, 0x4d, - 0x5f, 0x52, 0x53, 0x41, 0x5f, 0x34, 0x30, 0x39, 0x36, 0x10, 0x02, 0x12, 0x28, 0x0a, 0x24, 0x4b, - 0x41, 0x53, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, - 0x47, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x45, 0x43, 0x5f, 0x53, 0x45, 0x43, 0x50, 0x32, 0x35, - 0x36, 0x52, 0x31, 0x10, 0x05, 0x12, 0x28, 0x0a, 0x24, 0x4b, 0x41, 0x53, 0x5f, 0x50, 0x55, 0x42, - 0x4c, 0x49, 0x43, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47, 0x5f, 0x45, 0x4e, 0x55, 0x4d, - 0x5f, 0x45, 0x43, 0x5f, 0x53, 0x45, 0x43, 0x50, 0x33, 0x38, 0x34, 0x52, 0x31, 0x10, 0x06, 0x12, + 0x4e, 0x55, 0x4d, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, + 0x00, 0x12, 0x23, 0x0a, 0x1f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x5f, 0x52, + 0x55, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x41, 0x4c, + 0x4c, 0x5f, 0x4f, 0x46, 0x10, 0x01, 0x12, 0x23, 0x0a, 0x1f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, + 0x55, 0x54, 0x45, 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, + 0x55, 0x4d, 0x5f, 0x41, 0x4e, 0x59, 0x5f, 0x4f, 0x46, 0x10, 0x02, 0x12, 0x26, 0x0a, 0x22, 0x41, + 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x5f, 0x52, 0x55, 0x4c, 0x45, 0x5f, 0x54, 0x59, + 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x48, 0x49, 0x45, 0x52, 0x41, 0x52, 0x43, 0x48, + 0x59, 0x10, 0x03, 0x2a, 0xca, 0x01, 0x0a, 0x1a, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, + 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x45, 0x6e, + 0x75, 0x6d, 0x12, 0x2d, 0x0a, 0x29, 0x53, 0x55, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4d, 0x41, + 0x50, 0x50, 0x49, 0x4e, 0x47, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x45, + 0x4e, 0x55, 0x4d, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, + 0x00, 0x12, 0x24, 0x0a, 0x20, 0x53, 0x55, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4d, 0x41, 0x50, + 0x50, 0x49, 0x4e, 0x47, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x45, 0x4e, + 0x55, 0x4d, 0x5f, 0x49, 0x4e, 0x10, 0x01, 0x12, 0x28, 0x0a, 0x24, 0x53, 0x55, 0x42, 0x4a, 0x45, + 0x43, 0x54, 0x5f, 0x4d, 0x41, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, + 0x54, 0x4f, 0x52, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x49, 0x4e, 0x10, + 0x02, 0x12, 0x2d, 0x0a, 0x29, 0x53, 0x55, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x5f, 0x4d, 0x41, 0x50, + 0x50, 0x49, 0x4e, 0x47, 0x5f, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x5f, 0x45, 0x4e, + 0x55, 0x4d, 0x5f, 0x49, 0x4e, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x49, 0x4e, 0x53, 0x10, 0x03, + 0x2a, 0x90, 0x01, 0x0a, 0x18, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x6f, + 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x2b, 0x0a, + 0x27, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x42, 0x4f, 0x4f, 0x4c, 0x45, + 0x41, 0x4e, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x55, 0x4e, 0x53, + 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x23, 0x0a, 0x1f, 0x43, 0x4f, + 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x42, 0x4f, 0x4f, 0x4c, 0x45, 0x41, 0x4e, 0x5f, + 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x41, 0x4e, 0x44, 0x10, 0x01, 0x12, + 0x22, 0x0a, 0x1e, 0x43, 0x4f, 0x4e, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x42, 0x4f, 0x4f, + 0x4c, 0x45, 0x41, 0x4e, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x4f, + 0x52, 0x10, 0x02, 0x2a, 0x5d, 0x0a, 0x0a, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, + 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x18, + 0x0a, 0x14, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, + 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x4f, 0x55, 0x52, + 0x43, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x58, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, + 0x10, 0x02, 0x2a, 0x88, 0x02, 0x0a, 0x13, 0x4b, 0x61, 0x73, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x4b, 0x65, 0x79, 0x41, 0x6c, 0x67, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x27, 0x0a, 0x23, 0x4b, 0x41, + 0x53, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47, + 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, + 0x44, 0x10, 0x00, 0x12, 0x24, 0x0a, 0x20, 0x4b, 0x41, 0x53, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, + 0x43, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x52, + 0x53, 0x41, 0x5f, 0x32, 0x30, 0x34, 0x38, 0x10, 0x01, 0x12, 0x24, 0x0a, 0x20, 0x4b, 0x41, 0x53, + 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47, 0x5f, + 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x52, 0x53, 0x41, 0x5f, 0x34, 0x30, 0x39, 0x36, 0x10, 0x02, 0x12, 0x28, 0x0a, 0x24, 0x4b, 0x41, 0x53, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x45, 0x43, 0x5f, 0x53, 0x45, - 0x43, 0x50, 0x35, 0x32, 0x31, 0x52, 0x31, 0x10, 0x07, 0x2a, 0x9b, 0x01, 0x0a, 0x09, 0x41, 0x6c, - 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, 0x19, 0x0a, 0x15, 0x41, 0x4c, 0x47, 0x4f, 0x52, - 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, - 0x52, 0x53, 0x41, 0x5f, 0x32, 0x30, 0x34, 0x38, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x41, 0x4c, - 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x52, 0x53, 0x41, 0x5f, 0x34, 0x30, 0x39, 0x36, - 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, - 0x45, 0x43, 0x5f, 0x50, 0x32, 0x35, 0x36, 0x10, 0x03, 0x12, 0x15, 0x0a, 0x11, 0x41, 0x4c, 0x47, - 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x45, 0x43, 0x5f, 0x50, 0x33, 0x38, 0x34, 0x10, 0x04, - 0x12, 0x15, 0x0a, 0x11, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x45, 0x43, - 0x5f, 0x50, 0x35, 0x32, 0x31, 0x10, 0x05, 0x2a, 0x73, 0x0a, 0x09, 0x4b, 0x65, 0x79, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x12, 0x1a, 0x0a, 0x16, 0x4b, 0x45, 0x59, 0x5f, 0x53, 0x54, 0x41, 0x54, - 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, - 0x12, 0x15, 0x0a, 0x11, 0x4b, 0x45, 0x59, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x41, - 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x4b, 0x45, 0x59, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x49, 0x4e, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x02, - 0x12, 0x1a, 0x0a, 0x16, 0x4b, 0x45, 0x59, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, - 0x4f, 0x4d, 0x50, 0x52, 0x4f, 0x4d, 0x49, 0x53, 0x45, 0x44, 0x10, 0x03, 0x2a, 0x4c, 0x0a, 0x07, - 0x4b, 0x65, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x14, 0x4b, 0x45, 0x59, 0x5f, 0x4d, - 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, - 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x4b, 0x45, 0x59, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x4c, 0x4f, - 0x43, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x4b, 0x45, 0x59, 0x5f, 0x4d, 0x4f, 0x44, - 0x45, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x54, 0x45, 0x10, 0x02, 0x42, 0x82, 0x01, 0x0a, 0x0a, 0x63, - 0x6f, 0x6d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x42, 0x0c, 0x4f, 0x62, 0x6a, 0x65, 0x63, - 0x74, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, - 0x67, 0x6f, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0xa2, 0x02, 0x03, 0x50, 0x58, 0x58, 0xaa, - 0x02, 0x06, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0xca, 0x02, 0x06, 0x50, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0xe2, 0x02, 0x12, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x06, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x43, 0x50, 0x32, 0x35, 0x36, 0x52, 0x31, 0x10, 0x05, 0x12, 0x28, 0x0a, 0x24, 0x4b, 0x41, 0x53, + 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47, 0x5f, + 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x45, 0x43, 0x5f, 0x53, 0x45, 0x43, 0x50, 0x33, 0x38, 0x34, 0x52, + 0x31, 0x10, 0x06, 0x12, 0x28, 0x0a, 0x24, 0x4b, 0x41, 0x53, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, + 0x43, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x41, 0x4c, 0x47, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x45, + 0x43, 0x5f, 0x53, 0x45, 0x43, 0x50, 0x35, 0x32, 0x31, 0x52, 0x31, 0x10, 0x07, 0x2a, 0x9b, 0x01, + 0x0a, 0x09, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, 0x19, 0x0a, 0x15, 0x41, + 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, + 0x54, 0x48, 0x4d, 0x5f, 0x52, 0x53, 0x41, 0x5f, 0x32, 0x30, 0x34, 0x38, 0x10, 0x01, 0x12, 0x16, + 0x0a, 0x12, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x52, 0x53, 0x41, 0x5f, + 0x34, 0x30, 0x39, 0x36, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, + 0x54, 0x48, 0x4d, 0x5f, 0x45, 0x43, 0x5f, 0x50, 0x32, 0x35, 0x36, 0x10, 0x03, 0x12, 0x15, 0x0a, + 0x11, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, 0x4d, 0x5f, 0x45, 0x43, 0x5f, 0x50, 0x33, + 0x38, 0x34, 0x10, 0x04, 0x12, 0x15, 0x0a, 0x11, 0x41, 0x4c, 0x47, 0x4f, 0x52, 0x49, 0x54, 0x48, + 0x4d, 0x5f, 0x45, 0x43, 0x5f, 0x50, 0x35, 0x32, 0x31, 0x10, 0x05, 0x2a, 0x73, 0x0a, 0x09, 0x4b, + 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1a, 0x0a, 0x16, 0x4b, 0x45, 0x59, 0x5f, + 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, + 0x45, 0x44, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x4b, 0x45, 0x59, 0x5f, 0x53, 0x54, 0x41, 0x54, + 0x55, 0x53, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x4b, + 0x45, 0x59, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x49, 0x4e, 0x41, 0x43, 0x54, 0x49, + 0x56, 0x45, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x4b, 0x45, 0x59, 0x5f, 0x53, 0x54, 0x41, 0x54, + 0x55, 0x53, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x52, 0x4f, 0x4d, 0x49, 0x53, 0x45, 0x44, 0x10, 0x03, + 0x2a, 0x4c, 0x0a, 0x07, 0x4b, 0x65, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x14, 0x4b, + 0x45, 0x59, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, + 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x4b, 0x45, 0x59, 0x5f, 0x4d, 0x4f, 0x44, + 0x45, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x4b, 0x45, 0x59, + 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x54, 0x45, 0x10, 0x02, 0x42, 0x82, + 0x01, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x42, 0x0c, 0x4f, + 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2e, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, + 0x66, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x63, 0x6f, 0x6c, 0x2f, 0x67, 0x6f, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0xa2, 0x02, 0x03, + 0x50, 0x58, 0x58, 0xaa, 0x02, 0x06, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0xca, 0x02, 0x06, 0x50, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0xe2, 0x02, 0x12, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5c, 0x47, + 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x06, 0x50, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/service/policy/objects.proto b/service/policy/objects.proto index 2632212cba..13cbfdc535 100644 --- a/service/policy/objects.proto +++ b/service/policy/objects.proto @@ -129,11 +129,7 @@ message Action { string custom = 2; } - // Name is required to be set whenever an action is passed in an RPC - string name = 4 [ - (buf.validate.field).required = true, - (buf.validate.field).string = {min_len: 1} - ]; + string name = 4; common.Metadata metadata = 100; } From be2118d9e616c4bf09fb2515e7402798b1bcff15 Mon Sep 17 00:00:00 2001 From: jakedoublev Date: Tue, 13 May 2025 11:37:51 -0700 Subject: [PATCH 23/49] GetDecisionByTokenMultiResource addition --- docs/grpc/index.html | 155 +++-- .../v2/authorization.swagger.json | 38 +- .../go/authorization/v2/authorization.pb.go | 531 +++++++++++------- .../authorization/v2/authorization_grpc.pb.go | 47 +- .../authorization.connect.go | 53 +- service/authorization/v2/authorization.proto | 48 +- 6 files changed, 590 insertions(+), 282 deletions(-) diff --git a/docs/grpc/index.html b/docs/grpc/index.html index 778d4402cf..24cf21e510 100644 --- a/docs/grpc/index.html +++ b/docs/grpc/index.html @@ -471,6 +471,14 @@

      Table of Contents

      MGetDecisionBulkResponse +
    • + MGetDecisionByTokenMultiResourceRequest +
    • + +
    • + MGetDecisionByTokenMultiResourceResponse +
    • +
    • MGetDecisionByTokenRequest
    • @@ -519,10 +527,6 @@

      Table of Contents

      MToken -
    • - MTokenDecisionRequest -
    • -
    • EDecision @@ -4423,7 +4427,45 @@

      GetDecisionBulkResponse

      -

      GetDecisionByTokenRequest

      +

      GetDecisionByTokenMultiResourceRequest

      +

      Can the entity (PE or NPE) represented by this token access?

      1. one token

      2. one action

      3. multiple resource

      + + +
    • GetDecisionMultiResourceGetDecisionMultiResourceRequestGetDecisionMultiResourceResponse

      GetDecisionBulk GetDecisionBulkRequest

      GetDecisionBulkByTokenGetDecisionBulkByTokenRequestGetDecisionBulkByTokenResponse

      GetEntitlements GetEntitlementsRequestname string

      Name is required to be set whenever an action is passed in an RPC

      + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      FieldTypeLabelDescription
      tokenToken

      actionpolicy.Action

      name on action is required

      resourcesResourcerepeated

      + + + + + +

      GetDecisionByTokenMultiResourceResponse

      @@ -4434,8 +4476,60 @@

      GetDecisionByTokenRequest - decision_request - TokenDecisionRequest + action + policy.Action + +

      + + + + all_permitted + google.protobuf.BoolValue + +

      convenience flag indicating global resource decisions result (permit/deny)

      + + + + resource_decisions + ResourceDecision + repeated +

      individual resource decisions

      + + + + + + + + + +

      GetDecisionByTokenRequest

      +

      Can the entity (PE or NPE) represented by this token access?

      1. one token

      2. one action

      3. one resource

      + + + + + + + + + + + + + + + + + + + + + + + + + @@ -4530,7 +4624,7 @@

      GetDecisionMultiResou

      - + @@ -4821,44 +4915,6 @@

      Token

      -

      TokenDecisionRequest

      -

      Can the entity (PE or NPE) represented by this token take the provided action on the single resource

      - - -
      FieldTypeLabelDescription
      tokenToken

      actionpolicy.Action

      name on action is required

      resourceResource

      action policy.Action

      name on action is required

      name on action is to be relied upon

      - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      FieldTypeLabelDescription
      tokenToken

      actionpolicy.Action

      name on action is required

      resourceResource

      - - - - -

      Decision

      @@ -4959,6 +5015,13 @@

      AuthorizationService

      + + GetDecisionByTokenMultiResource + GetDecisionByTokenMultiResourceRequest + GetDecisionByTokenMultiResourceResponse +

      + + GetEntitlements GetEntitlementsRequest diff --git a/docs/openapi/authorization/v2/authorization.swagger.json b/docs/openapi/authorization/v2/authorization.swagger.json index 963dcb89fa..498c12f75d 100644 --- a/docs/openapi/authorization/v2/authorization.swagger.json +++ b/docs/openapi/authorization/v2/authorization.swagger.json @@ -158,22 +158,6 @@ } } }, - "authorizationv2TokenDecisionRequest": { - "type": "object", - "properties": { - "token": { - "$ref": "#/definitions/authorizationv2Token" - }, - "action": { - "$ref": "#/definitions/policyAction", - "title": "name on action is required" - }, - "resource": { - "$ref": "#/definitions/v2Resource" - } - }, - "title": "Can the entity (PE or NPE) represented by this token take the provided action on the single resource" - }, "commonMetadata": { "type": "object", "properties": { @@ -263,6 +247,26 @@ } } }, + "v2GetDecisionByTokenMultiResourceResponse": { + "type": "object", + "properties": { + "action": { + "$ref": "#/definitions/policyAction" + }, + "allPermitted": { + "type": "boolean", + "title": "convenience flag indicating global resource decisions result (permit/deny)" + }, + "resourceDecisions": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/v2ResourceDecision" + }, + "title": "individual resource decisions" + } + } + }, "v2GetDecisionByTokenResponse": { "type": "object", "properties": { @@ -301,7 +305,7 @@ }, "action": { "$ref": "#/definitions/policyAction", - "title": "name on action is required" + "title": "name on action is to be relied upon" }, "allPermitted": { "type": "boolean", diff --git a/protocol/go/authorization/v2/authorization.pb.go b/protocol/go/authorization/v2/authorization.pb.go index a5deba108f..edde78a1c0 100644 --- a/protocol/go/authorization/v2/authorization.pb.go +++ b/protocol/go/authorization/v2/authorization.pb.go @@ -807,10 +807,10 @@ type GetDecisionMultiResourceResponse struct { // ephemeral id for tracking between request and response EphemeralEntityChainId string `protobuf:"bytes,1,opt,name=ephemeral_entity_chain_id,json=ephemeralEntityChainId,proto3" json:"ephemeral_entity_chain_id,omitempty"` - // name on action is required - Action *policy.Action `protobuf:"bytes,3,opt,name=action,proto3" json:"action,omitempty"` + // name on action is to be relied upon + Action *policy.Action `protobuf:"bytes,2,opt,name=action,proto3" json:"action,omitempty"` // convenience flag indicating global resource decisions result (permit/deny) - AllPermitted *wrapperspb.BoolValue `protobuf:"bytes,2,opt,name=all_permitted,json=allPermitted,proto3" json:"all_permitted,omitempty"` + AllPermitted *wrapperspb.BoolValue `protobuf:"bytes,3,opt,name=all_permitted,json=allPermitted,proto3" json:"all_permitted,omitempty"` // individual resource decisions ResourceDecisions []*ResourceDecision `protobuf:"bytes,4,rep,name=resource_decisions,json=resourceDecisions,proto3" json:"resource_decisions,omitempty"` } @@ -987,7 +987,7 @@ type GetEntitlementsRequest struct { Entities []*Entity `protobuf:"bytes,1,rep,name=entities,proto3" json:"entities,omitempty"` // optional parameter to return all entitled values for attribute definitions with hierarchy rules, propagating // down the hierarchical values instead of returning solely the value that is directly entitled - WithComprehensiveHierarchy *bool `protobuf:"varint,3,opt,name=with_comprehensive_hierarchy,json=withComprehensiveHierarchy,proto3,oneof" json:"with_comprehensive_hierarchy,omitempty"` + WithComprehensiveHierarchy *bool `protobuf:"varint,2,opt,name=with_comprehensive_hierarchy,json=withComprehensiveHierarchy,proto3,oneof" json:"with_comprehensive_hierarchy,omitempty"` } func (x *GetEntitlementsRequest) Reset() { @@ -1083,8 +1083,11 @@ func (x *GetEntitlementsResponse) GetEntitlements() []*EntityEntitlements { return nil } -// Can the entity (PE or NPE) represented by this token take the provided action on the single resource -type TokenDecisionRequest struct { +// Can the entity (PE or NPE) represented by this token access? +// 1. one token +// 2. one action +// 3. one resource +type GetDecisionByTokenRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -1095,8 +1098,8 @@ type TokenDecisionRequest struct { Resource *Resource `protobuf:"bytes,3,opt,name=resource,proto3" json:"resource,omitempty"` } -func (x *TokenDecisionRequest) Reset() { - *x = TokenDecisionRequest{} +func (x *GetDecisionByTokenRequest) Reset() { + *x = GetDecisionByTokenRequest{} if protoimpl.UnsafeEnabled { mi := &file_authorization_v2_authorization_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1104,13 +1107,13 @@ func (x *TokenDecisionRequest) Reset() { } } -func (x *TokenDecisionRequest) String() string { +func (x *GetDecisionByTokenRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TokenDecisionRequest) ProtoMessage() {} +func (*GetDecisionByTokenRequest) ProtoMessage() {} -func (x *TokenDecisionRequest) ProtoReflect() protoreflect.Message { +func (x *GetDecisionByTokenRequest) ProtoReflect() protoreflect.Message { mi := &file_authorization_v2_authorization_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1122,42 +1125,42 @@ func (x *TokenDecisionRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use TokenDecisionRequest.ProtoReflect.Descriptor instead. -func (*TokenDecisionRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use GetDecisionByTokenRequest.ProtoReflect.Descriptor instead. +func (*GetDecisionByTokenRequest) Descriptor() ([]byte, []int) { return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{14} } -func (x *TokenDecisionRequest) GetToken() *Token { +func (x *GetDecisionByTokenRequest) GetToken() *Token { if x != nil { return x.Token } return nil } -func (x *TokenDecisionRequest) GetAction() *policy.Action { +func (x *GetDecisionByTokenRequest) GetAction() *policy.Action { if x != nil { return x.Action } return nil } -func (x *TokenDecisionRequest) GetResource() *Resource { +func (x *GetDecisionByTokenRequest) GetResource() *Resource { if x != nil { return x.Resource } return nil } -type GetDecisionByTokenRequest struct { +type GetDecisionByTokenResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - DecisionRequest *TokenDecisionRequest `protobuf:"bytes,1,opt,name=decision_request,json=decisionRequest,proto3" json:"decision_request,omitempty"` + DecisionResponse *GetDecisionResponse `protobuf:"bytes,1,opt,name=decision_response,json=decisionResponse,proto3" json:"decision_response,omitempty"` } -func (x *GetDecisionByTokenRequest) Reset() { - *x = GetDecisionByTokenRequest{} +func (x *GetDecisionByTokenResponse) Reset() { + *x = GetDecisionByTokenResponse{} if protoimpl.UnsafeEnabled { mi := &file_authorization_v2_authorization_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1165,13 +1168,13 @@ func (x *GetDecisionByTokenRequest) Reset() { } } -func (x *GetDecisionByTokenRequest) String() string { +func (x *GetDecisionByTokenResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetDecisionByTokenRequest) ProtoMessage() {} +func (*GetDecisionByTokenResponse) ProtoMessage() {} -func (x *GetDecisionByTokenRequest) ProtoReflect() protoreflect.Message { +func (x *GetDecisionByTokenResponse) ProtoReflect() protoreflect.Message { mi := &file_authorization_v2_authorization_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1183,28 +1186,35 @@ func (x *GetDecisionByTokenRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetDecisionByTokenRequest.ProtoReflect.Descriptor instead. -func (*GetDecisionByTokenRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use GetDecisionByTokenResponse.ProtoReflect.Descriptor instead. +func (*GetDecisionByTokenResponse) Descriptor() ([]byte, []int) { return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{15} } -func (x *GetDecisionByTokenRequest) GetDecisionRequest() *TokenDecisionRequest { +func (x *GetDecisionByTokenResponse) GetDecisionResponse() *GetDecisionResponse { if x != nil { - return x.DecisionRequest + return x.DecisionResponse } return nil } -type GetDecisionByTokenResponse struct { +// Can the entity (PE or NPE) represented by this token access? +// 1. one token +// 2. one action +// 3. multiple resource +type GetDecisionByTokenMultiResourceRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - DecisionResponse *GetDecisionResponse `protobuf:"bytes,1,opt,name=decision_response,json=decisionResponse,proto3" json:"decision_response,omitempty"` + Token *Token `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` + // name on action is required + Action *policy.Action `protobuf:"bytes,2,opt,name=action,proto3" json:"action,omitempty"` + Resources []*Resource `protobuf:"bytes,3,rep,name=resources,proto3" json:"resources,omitempty"` } -func (x *GetDecisionByTokenResponse) Reset() { - *x = GetDecisionByTokenResponse{} +func (x *GetDecisionByTokenMultiResourceRequest) Reset() { + *x = GetDecisionByTokenMultiResourceRequest{} if protoimpl.UnsafeEnabled { mi := &file_authorization_v2_authorization_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1212,13 +1222,13 @@ func (x *GetDecisionByTokenResponse) Reset() { } } -func (x *GetDecisionByTokenResponse) String() string { +func (x *GetDecisionByTokenMultiResourceRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetDecisionByTokenResponse) ProtoMessage() {} +func (*GetDecisionByTokenMultiResourceRequest) ProtoMessage() {} -func (x *GetDecisionByTokenResponse) ProtoReflect() protoreflect.Message { +func (x *GetDecisionByTokenMultiResourceRequest) ProtoReflect() protoreflect.Message { mi := &file_authorization_v2_authorization_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1230,14 +1240,93 @@ func (x *GetDecisionByTokenResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetDecisionByTokenResponse.ProtoReflect.Descriptor instead. -func (*GetDecisionByTokenResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use GetDecisionByTokenMultiResourceRequest.ProtoReflect.Descriptor instead. +func (*GetDecisionByTokenMultiResourceRequest) Descriptor() ([]byte, []int) { return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{16} } -func (x *GetDecisionByTokenResponse) GetDecisionResponse() *GetDecisionResponse { +func (x *GetDecisionByTokenMultiResourceRequest) GetToken() *Token { if x != nil { - return x.DecisionResponse + return x.Token + } + return nil +} + +func (x *GetDecisionByTokenMultiResourceRequest) GetAction() *policy.Action { + if x != nil { + return x.Action + } + return nil +} + +func (x *GetDecisionByTokenMultiResourceRequest) GetResources() []*Resource { + if x != nil { + return x.Resources + } + return nil +} + +type GetDecisionByTokenMultiResourceResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Action *policy.Action `protobuf:"bytes,1,opt,name=action,proto3" json:"action,omitempty"` + // convenience flag indicating global resource decisions result (permit/deny) + AllPermitted *wrapperspb.BoolValue `protobuf:"bytes,2,opt,name=all_permitted,json=allPermitted,proto3" json:"all_permitted,omitempty"` + // individual resource decisions + ResourceDecisions []*ResourceDecision `protobuf:"bytes,4,rep,name=resource_decisions,json=resourceDecisions,proto3" json:"resource_decisions,omitempty"` +} + +func (x *GetDecisionByTokenMultiResourceResponse) Reset() { + *x = GetDecisionByTokenMultiResourceResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_authorization_v2_authorization_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetDecisionByTokenMultiResourceResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetDecisionByTokenMultiResourceResponse) ProtoMessage() {} + +func (x *GetDecisionByTokenMultiResourceResponse) ProtoReflect() protoreflect.Message { + mi := &file_authorization_v2_authorization_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetDecisionByTokenMultiResourceResponse.ProtoReflect.Descriptor instead. +func (*GetDecisionByTokenMultiResourceResponse) Descriptor() ([]byte, []int) { + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{17} +} + +func (x *GetDecisionByTokenMultiResourceResponse) GetAction() *policy.Action { + if x != nil { + return x.Action + } + return nil +} + +func (x *GetDecisionByTokenMultiResourceResponse) GetAllPermitted() *wrapperspb.BoolValue { + if x != nil { + return x.AllPermitted + } + return nil +} + +func (x *GetDecisionByTokenMultiResourceResponse) GetResourceDecisions() []*ResourceDecision { + if x != nil { + return x.ResourceDecisions } return nil } @@ -1253,7 +1342,7 @@ type EntityEntitlements_ActionsList struct { func (x *EntityEntitlements_ActionsList) Reset() { *x = EntityEntitlements_ActionsList{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[17] + mi := &file_authorization_v2_authorization_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1266,7 +1355,7 @@ func (x *EntityEntitlements_ActionsList) String() string { func (*EntityEntitlements_ActionsList) ProtoMessage() {} func (x *EntityEntitlements_ActionsList) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[17] + mi := &file_authorization_v2_authorization_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1300,7 +1389,7 @@ type Resource_AttributeValues struct { func (x *Resource_AttributeValues) Reset() { *x = Resource_AttributeValues{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[19] + mi := &file_authorization_v2_authorization_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1313,7 +1402,7 @@ func (x *Resource_AttributeValues) String() string { func (*Resource_AttributeValues) ProtoMessage() {} func (x *Resource_AttributeValues) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[19] + mi := &file_authorization_v2_authorization_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1497,9 +1586,9 @@ var file_authorization_v2_authorization_proto_rawDesc = []byte{ 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, - 0x0d, 0x61, 0x6c, 0x6c, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x18, 0x02, + 0x0d, 0x61, 0x6c, 0x6c, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x12, 0x51, @@ -1531,7 +1620,7 @@ var file_authorization_v2_authorization_proto_rawDesc = []byte{ 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x1c, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, - 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, + 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x1a, 0x77, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x88, 0x01, 0x01, 0x42, 0x1f, 0x0a, 0x1d, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, @@ -1542,95 +1631,133 @@ var file_authorization_v2_authorization_proto_rawDesc = []byte{ 0x32, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x22, 0xa6, 0x02, 0x0a, 0x14, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x35, 0x0a, - 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, - 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x05, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2e, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x3a, 0x67, 0xba, 0x48, 0x64, 0x1a, 0x62, 0x0a, 0x2b, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, - 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x1c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x15, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, - 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x22, 0x6e, 0x0a, - 0x19, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x51, 0x0a, 0x10, 0x64, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0f, 0x64, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x70, 0x0a, - 0x1a, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x11, 0x64, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x10, 0x64, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, - 0x4c, 0x0a, 0x08, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x14, 0x44, - 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, - 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, - 0x4e, 0x5f, 0x44, 0x45, 0x4e, 0x59, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x45, 0x43, 0x49, - 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x32, 0xc1, 0x04, - 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5c, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x75, + 0x65, 0x6e, 0x74, 0x73, 0x22, 0xab, 0x02, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x35, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, + 0x01, 0x01, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2e, 0x0a, 0x06, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, + 0x01, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x0a, 0x08, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, + 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3a, 0x67, 0xba, 0x48, 0x64, 0x1a, 0x62, + 0x0a, 0x2b, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x1c, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, + 0x62, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x15, 0x68, 0x61, 0x73, + 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, + 0x65, 0x29, 0x22, 0x70, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x52, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x83, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x12, 0x31, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x0f, 0x47, 0x65, - 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x12, 0x28, 0x2e, + 0x73, 0x65, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xce, 0x02, 0x0a, 0x26, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x35, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x32, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, + 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2e, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x92, 0x01, 0x02, + 0x08, 0x01, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x3a, 0x76, 0xba, + 0x48, 0x73, 0x1a, 0x71, 0x0a, 0x3a, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x64, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, + 0x12, 0x1c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75, + 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x15, + 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x22, 0xe5, 0x01, 0x0a, 0x27, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4d, 0x75, 0x6c, 0x74, + 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, + 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x61, 0x6c, + 0x6c, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x12, 0x51, 0x0a, 0x12, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2a, 0x4c, 0x0a, + 0x08, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x14, 0x44, 0x45, 0x43, + 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, + 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, + 0x44, 0x45, 0x4e, 0x59, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, + 0x4f, 0x4e, 0x5f, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x32, 0xdc, 0x05, 0x0a, 0x14, + 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x5c, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, + 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x83, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, + 0x31, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, + 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x44, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x12, 0x28, 0x2e, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, + 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x71, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2b, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x98, 0x01, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4d, 0x75, 0x6c, 0x74, + 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x38, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, + 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4d, + 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x68, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x12, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x71, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2b, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, - 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x45, 0x6e, - 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x28, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, - 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, - 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x42, 0xd5, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x42, 0x12, 0x41, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, - 0x5a, 0x48, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, - 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, 0x6f, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x3b, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x32, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, - 0xaa, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x56, 0x32, 0xca, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x1c, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, + 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xd5, 0x01, 0x0a, 0x14, 0x63, + 0x6f, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x42, 0x12, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x48, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, + 0x67, 0x6f, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2f, 0x76, 0x32, 0x3b, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x76, 0x32, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x10, 0x41, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0xe2, + 0x02, 0x1c, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, + 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, + 0x11, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, + 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1646,78 +1773,86 @@ func file_authorization_v2_authorization_proto_rawDescGZIP() []byte { } var file_authorization_v2_authorization_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_authorization_v2_authorization_proto_msgTypes = make([]protoimpl.MessageInfo, 20) +var file_authorization_v2_authorization_proto_msgTypes = make([]protoimpl.MessageInfo, 21) var file_authorization_v2_authorization_proto_goTypes = []interface{}{ - (Decision)(0), // 0: authorization.v2.Decision - (Entity_Category)(0), // 1: authorization.v2.Entity.Category - (*Token)(nil), // 2: authorization.v2.Token - (*Entity)(nil), // 3: authorization.v2.Entity - (*EntityChain)(nil), // 4: authorization.v2.EntityChain - (*EntityEntitlements)(nil), // 5: authorization.v2.EntityEntitlements - (*Resource)(nil), // 6: authorization.v2.Resource - (*ResourceDecision)(nil), // 7: authorization.v2.ResourceDecision - (*GetDecisionRequest)(nil), // 8: authorization.v2.GetDecisionRequest - (*GetDecisionResponse)(nil), // 9: authorization.v2.GetDecisionResponse - (*GetDecisionMultiResourceRequest)(nil), // 10: authorization.v2.GetDecisionMultiResourceRequest - (*GetDecisionMultiResourceResponse)(nil), // 11: authorization.v2.GetDecisionMultiResourceResponse - (*GetDecisionBulkRequest)(nil), // 12: authorization.v2.GetDecisionBulkRequest - (*GetDecisionBulkResponse)(nil), // 13: authorization.v2.GetDecisionBulkResponse - (*GetEntitlementsRequest)(nil), // 14: authorization.v2.GetEntitlementsRequest - (*GetEntitlementsResponse)(nil), // 15: authorization.v2.GetEntitlementsResponse - (*TokenDecisionRequest)(nil), // 16: authorization.v2.TokenDecisionRequest - (*GetDecisionByTokenRequest)(nil), // 17: authorization.v2.GetDecisionByTokenRequest - (*GetDecisionByTokenResponse)(nil), // 18: authorization.v2.GetDecisionByTokenResponse - (*EntityEntitlements_ActionsList)(nil), // 19: authorization.v2.EntityEntitlements.ActionsList - nil, // 20: authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry - (*Resource_AttributeValues)(nil), // 21: authorization.v2.Resource.AttributeValues - (*anypb.Any)(nil), // 22: google.protobuf.Any - (*policy.Action)(nil), // 23: policy.Action - (*wrapperspb.BoolValue)(nil), // 24: google.protobuf.BoolValue + (Decision)(0), // 0: authorization.v2.Decision + (Entity_Category)(0), // 1: authorization.v2.Entity.Category + (*Token)(nil), // 2: authorization.v2.Token + (*Entity)(nil), // 3: authorization.v2.Entity + (*EntityChain)(nil), // 4: authorization.v2.EntityChain + (*EntityEntitlements)(nil), // 5: authorization.v2.EntityEntitlements + (*Resource)(nil), // 6: authorization.v2.Resource + (*ResourceDecision)(nil), // 7: authorization.v2.ResourceDecision + (*GetDecisionRequest)(nil), // 8: authorization.v2.GetDecisionRequest + (*GetDecisionResponse)(nil), // 9: authorization.v2.GetDecisionResponse + (*GetDecisionMultiResourceRequest)(nil), // 10: authorization.v2.GetDecisionMultiResourceRequest + (*GetDecisionMultiResourceResponse)(nil), // 11: authorization.v2.GetDecisionMultiResourceResponse + (*GetDecisionBulkRequest)(nil), // 12: authorization.v2.GetDecisionBulkRequest + (*GetDecisionBulkResponse)(nil), // 13: authorization.v2.GetDecisionBulkResponse + (*GetEntitlementsRequest)(nil), // 14: authorization.v2.GetEntitlementsRequest + (*GetEntitlementsResponse)(nil), // 15: authorization.v2.GetEntitlementsResponse + (*GetDecisionByTokenRequest)(nil), // 16: authorization.v2.GetDecisionByTokenRequest + (*GetDecisionByTokenResponse)(nil), // 17: authorization.v2.GetDecisionByTokenResponse + (*GetDecisionByTokenMultiResourceRequest)(nil), // 18: authorization.v2.GetDecisionByTokenMultiResourceRequest + (*GetDecisionByTokenMultiResourceResponse)(nil), // 19: authorization.v2.GetDecisionByTokenMultiResourceResponse + (*EntityEntitlements_ActionsList)(nil), // 20: authorization.v2.EntityEntitlements.ActionsList + nil, // 21: authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry + (*Resource_AttributeValues)(nil), // 22: authorization.v2.Resource.AttributeValues + (*anypb.Any)(nil), // 23: google.protobuf.Any + (*policy.Action)(nil), // 24: policy.Action + (*wrapperspb.BoolValue)(nil), // 25: google.protobuf.BoolValue } var file_authorization_v2_authorization_proto_depIdxs = []int32{ - 22, // 0: authorization.v2.Entity.claims:type_name -> google.protobuf.Any + 23, // 0: authorization.v2.Entity.claims:type_name -> google.protobuf.Any 1, // 1: authorization.v2.Entity.category:type_name -> authorization.v2.Entity.Category 3, // 2: authorization.v2.EntityChain.entities:type_name -> authorization.v2.Entity - 20, // 3: authorization.v2.EntityEntitlements.actions_per_attribute_value_fqn:type_name -> authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry - 21, // 4: authorization.v2.Resource.attribute_values:type_name -> authorization.v2.Resource.AttributeValues + 21, // 3: authorization.v2.EntityEntitlements.actions_per_attribute_value_fqn:type_name -> authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry + 22, // 4: authorization.v2.Resource.attribute_values:type_name -> authorization.v2.Resource.AttributeValues 0, // 5: authorization.v2.ResourceDecision.decision:type_name -> authorization.v2.Decision 4, // 6: authorization.v2.GetDecisionRequest.entity:type_name -> authorization.v2.EntityChain - 23, // 7: authorization.v2.GetDecisionRequest.action:type_name -> policy.Action + 24, // 7: authorization.v2.GetDecisionRequest.action:type_name -> policy.Action 6, // 8: authorization.v2.GetDecisionRequest.resource:type_name -> authorization.v2.Resource - 23, // 9: authorization.v2.GetDecisionResponse.action:type_name -> policy.Action + 24, // 9: authorization.v2.GetDecisionResponse.action:type_name -> policy.Action 7, // 10: authorization.v2.GetDecisionResponse.decision:type_name -> authorization.v2.ResourceDecision 4, // 11: authorization.v2.GetDecisionMultiResourceRequest.entity:type_name -> authorization.v2.EntityChain - 23, // 12: authorization.v2.GetDecisionMultiResourceRequest.action:type_name -> policy.Action + 24, // 12: authorization.v2.GetDecisionMultiResourceRequest.action:type_name -> policy.Action 6, // 13: authorization.v2.GetDecisionMultiResourceRequest.resources:type_name -> authorization.v2.Resource - 23, // 14: authorization.v2.GetDecisionMultiResourceResponse.action:type_name -> policy.Action - 24, // 15: authorization.v2.GetDecisionMultiResourceResponse.all_permitted:type_name -> google.protobuf.BoolValue + 24, // 14: authorization.v2.GetDecisionMultiResourceResponse.action:type_name -> policy.Action + 25, // 15: authorization.v2.GetDecisionMultiResourceResponse.all_permitted:type_name -> google.protobuf.BoolValue 7, // 16: authorization.v2.GetDecisionMultiResourceResponse.resource_decisions:type_name -> authorization.v2.ResourceDecision 10, // 17: authorization.v2.GetDecisionBulkRequest.decision_requests:type_name -> authorization.v2.GetDecisionMultiResourceRequest 11, // 18: authorization.v2.GetDecisionBulkResponse.decision_responses:type_name -> authorization.v2.GetDecisionMultiResourceResponse 3, // 19: authorization.v2.GetEntitlementsRequest.entities:type_name -> authorization.v2.Entity 5, // 20: authorization.v2.GetEntitlementsResponse.entitlements:type_name -> authorization.v2.EntityEntitlements - 2, // 21: authorization.v2.TokenDecisionRequest.token:type_name -> authorization.v2.Token - 23, // 22: authorization.v2.TokenDecisionRequest.action:type_name -> policy.Action - 6, // 23: authorization.v2.TokenDecisionRequest.resource:type_name -> authorization.v2.Resource - 16, // 24: authorization.v2.GetDecisionByTokenRequest.decision_request:type_name -> authorization.v2.TokenDecisionRequest - 9, // 25: authorization.v2.GetDecisionByTokenResponse.decision_response:type_name -> authorization.v2.GetDecisionResponse - 23, // 26: authorization.v2.EntityEntitlements.ActionsList.actions:type_name -> policy.Action - 19, // 27: authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry.value:type_name -> authorization.v2.EntityEntitlements.ActionsList - 8, // 28: authorization.v2.AuthorizationService.GetDecision:input_type -> authorization.v2.GetDecisionRequest - 10, // 29: authorization.v2.AuthorizationService.GetDecisionMultiResource:input_type -> authorization.v2.GetDecisionMultiResourceRequest - 12, // 30: authorization.v2.AuthorizationService.GetDecisionBulk:input_type -> authorization.v2.GetDecisionBulkRequest - 17, // 31: authorization.v2.AuthorizationService.GetDecisionByToken:input_type -> authorization.v2.GetDecisionByTokenRequest - 14, // 32: authorization.v2.AuthorizationService.GetEntitlements:input_type -> authorization.v2.GetEntitlementsRequest - 9, // 33: authorization.v2.AuthorizationService.GetDecision:output_type -> authorization.v2.GetDecisionResponse - 11, // 34: authorization.v2.AuthorizationService.GetDecisionMultiResource:output_type -> authorization.v2.GetDecisionMultiResourceResponse - 13, // 35: authorization.v2.AuthorizationService.GetDecisionBulk:output_type -> authorization.v2.GetDecisionBulkResponse - 18, // 36: authorization.v2.AuthorizationService.GetDecisionByToken:output_type -> authorization.v2.GetDecisionByTokenResponse - 15, // 37: authorization.v2.AuthorizationService.GetEntitlements:output_type -> authorization.v2.GetEntitlementsResponse - 33, // [33:38] is the sub-list for method output_type - 28, // [28:33] is the sub-list for method input_type - 28, // [28:28] is the sub-list for extension type_name - 28, // [28:28] is the sub-list for extension extendee - 0, // [0:28] is the sub-list for field type_name + 2, // 21: authorization.v2.GetDecisionByTokenRequest.token:type_name -> authorization.v2.Token + 24, // 22: authorization.v2.GetDecisionByTokenRequest.action:type_name -> policy.Action + 6, // 23: authorization.v2.GetDecisionByTokenRequest.resource:type_name -> authorization.v2.Resource + 9, // 24: authorization.v2.GetDecisionByTokenResponse.decision_response:type_name -> authorization.v2.GetDecisionResponse + 2, // 25: authorization.v2.GetDecisionByTokenMultiResourceRequest.token:type_name -> authorization.v2.Token + 24, // 26: authorization.v2.GetDecisionByTokenMultiResourceRequest.action:type_name -> policy.Action + 6, // 27: authorization.v2.GetDecisionByTokenMultiResourceRequest.resources:type_name -> authorization.v2.Resource + 24, // 28: authorization.v2.GetDecisionByTokenMultiResourceResponse.action:type_name -> policy.Action + 25, // 29: authorization.v2.GetDecisionByTokenMultiResourceResponse.all_permitted:type_name -> google.protobuf.BoolValue + 7, // 30: authorization.v2.GetDecisionByTokenMultiResourceResponse.resource_decisions:type_name -> authorization.v2.ResourceDecision + 24, // 31: authorization.v2.EntityEntitlements.ActionsList.actions:type_name -> policy.Action + 20, // 32: authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry.value:type_name -> authorization.v2.EntityEntitlements.ActionsList + 8, // 33: authorization.v2.AuthorizationService.GetDecision:input_type -> authorization.v2.GetDecisionRequest + 10, // 34: authorization.v2.AuthorizationService.GetDecisionMultiResource:input_type -> authorization.v2.GetDecisionMultiResourceRequest + 12, // 35: authorization.v2.AuthorizationService.GetDecisionBulk:input_type -> authorization.v2.GetDecisionBulkRequest + 16, // 36: authorization.v2.AuthorizationService.GetDecisionByToken:input_type -> authorization.v2.GetDecisionByTokenRequest + 18, // 37: authorization.v2.AuthorizationService.GetDecisionByTokenMultiResource:input_type -> authorization.v2.GetDecisionByTokenMultiResourceRequest + 14, // 38: authorization.v2.AuthorizationService.GetEntitlements:input_type -> authorization.v2.GetEntitlementsRequest + 9, // 39: authorization.v2.AuthorizationService.GetDecision:output_type -> authorization.v2.GetDecisionResponse + 11, // 40: authorization.v2.AuthorizationService.GetDecisionMultiResource:output_type -> authorization.v2.GetDecisionMultiResourceResponse + 13, // 41: authorization.v2.AuthorizationService.GetDecisionBulk:output_type -> authorization.v2.GetDecisionBulkResponse + 17, // 42: authorization.v2.AuthorizationService.GetDecisionByToken:output_type -> authorization.v2.GetDecisionByTokenResponse + 19, // 43: authorization.v2.AuthorizationService.GetDecisionByTokenMultiResource:output_type -> authorization.v2.GetDecisionByTokenMultiResourceResponse + 15, // 44: authorization.v2.AuthorizationService.GetEntitlements:output_type -> authorization.v2.GetEntitlementsResponse + 39, // [39:45] is the sub-list for method output_type + 33, // [33:39] is the sub-list for method input_type + 33, // [33:33] is the sub-list for extension type_name + 33, // [33:33] is the sub-list for extension extendee + 0, // [0:33] is the sub-list for field type_name } func init() { file_authorization_v2_authorization_proto_init() } @@ -1895,7 +2030,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TokenDecisionRequest); i { + switch v := v.(*GetDecisionByTokenRequest); i { case 0: return &v.state case 1: @@ -1907,7 +2042,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDecisionByTokenRequest); i { + switch v := v.(*GetDecisionByTokenResponse); i { case 0: return &v.state case 1: @@ -1919,7 +2054,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDecisionByTokenResponse); i { + switch v := v.(*GetDecisionByTokenMultiResourceRequest); i { case 0: return &v.state case 1: @@ -1931,6 +2066,18 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetDecisionByTokenMultiResourceResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_authorization_v2_authorization_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EntityEntitlements_ActionsList); i { case 0: return &v.state @@ -1942,7 +2089,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Resource_AttributeValues); i { case 0: return &v.state @@ -1973,7 +2120,7 @@ func file_authorization_v2_authorization_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_authorization_v2_authorization_proto_rawDesc, NumEnums: 2, - NumMessages: 20, + NumMessages: 21, NumExtensions: 0, NumServices: 1, }, diff --git a/protocol/go/authorization/v2/authorization_grpc.pb.go b/protocol/go/authorization/v2/authorization_grpc.pb.go index eb5bb12e68..3a005c77f7 100644 --- a/protocol/go/authorization/v2/authorization_grpc.pb.go +++ b/protocol/go/authorization/v2/authorization_grpc.pb.go @@ -19,11 +19,12 @@ import ( const _ = grpc.SupportPackageIsVersion7 const ( - AuthorizationService_GetDecision_FullMethodName = "/authorization.v2.AuthorizationService/GetDecision" - AuthorizationService_GetDecisionMultiResource_FullMethodName = "/authorization.v2.AuthorizationService/GetDecisionMultiResource" - AuthorizationService_GetDecisionBulk_FullMethodName = "/authorization.v2.AuthorizationService/GetDecisionBulk" - AuthorizationService_GetDecisionByToken_FullMethodName = "/authorization.v2.AuthorizationService/GetDecisionByToken" - AuthorizationService_GetEntitlements_FullMethodName = "/authorization.v2.AuthorizationService/GetEntitlements" + AuthorizationService_GetDecision_FullMethodName = "/authorization.v2.AuthorizationService/GetDecision" + AuthorizationService_GetDecisionMultiResource_FullMethodName = "/authorization.v2.AuthorizationService/GetDecisionMultiResource" + AuthorizationService_GetDecisionBulk_FullMethodName = "/authorization.v2.AuthorizationService/GetDecisionBulk" + AuthorizationService_GetDecisionByToken_FullMethodName = "/authorization.v2.AuthorizationService/GetDecisionByToken" + AuthorizationService_GetDecisionByTokenMultiResource_FullMethodName = "/authorization.v2.AuthorizationService/GetDecisionByTokenMultiResource" + AuthorizationService_GetEntitlements_FullMethodName = "/authorization.v2.AuthorizationService/GetEntitlements" ) // AuthorizationServiceClient is the client API for AuthorizationService service. @@ -34,6 +35,7 @@ type AuthorizationServiceClient interface { GetDecisionMultiResource(ctx context.Context, in *GetDecisionMultiResourceRequest, opts ...grpc.CallOption) (*GetDecisionMultiResourceResponse, error) GetDecisionBulk(ctx context.Context, in *GetDecisionBulkRequest, opts ...grpc.CallOption) (*GetDecisionBulkResponse, error) GetDecisionByToken(ctx context.Context, in *GetDecisionByTokenRequest, opts ...grpc.CallOption) (*GetDecisionByTokenResponse, error) + GetDecisionByTokenMultiResource(ctx context.Context, in *GetDecisionByTokenMultiResourceRequest, opts ...grpc.CallOption) (*GetDecisionByTokenMultiResourceResponse, error) GetEntitlements(ctx context.Context, in *GetEntitlementsRequest, opts ...grpc.CallOption) (*GetEntitlementsResponse, error) } @@ -81,6 +83,15 @@ func (c *authorizationServiceClient) GetDecisionByToken(ctx context.Context, in return out, nil } +func (c *authorizationServiceClient) GetDecisionByTokenMultiResource(ctx context.Context, in *GetDecisionByTokenMultiResourceRequest, opts ...grpc.CallOption) (*GetDecisionByTokenMultiResourceResponse, error) { + out := new(GetDecisionByTokenMultiResourceResponse) + err := c.cc.Invoke(ctx, AuthorizationService_GetDecisionByTokenMultiResource_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *authorizationServiceClient) GetEntitlements(ctx context.Context, in *GetEntitlementsRequest, opts ...grpc.CallOption) (*GetEntitlementsResponse, error) { out := new(GetEntitlementsResponse) err := c.cc.Invoke(ctx, AuthorizationService_GetEntitlements_FullMethodName, in, out, opts...) @@ -98,6 +109,7 @@ type AuthorizationServiceServer interface { GetDecisionMultiResource(context.Context, *GetDecisionMultiResourceRequest) (*GetDecisionMultiResourceResponse, error) GetDecisionBulk(context.Context, *GetDecisionBulkRequest) (*GetDecisionBulkResponse, error) GetDecisionByToken(context.Context, *GetDecisionByTokenRequest) (*GetDecisionByTokenResponse, error) + GetDecisionByTokenMultiResource(context.Context, *GetDecisionByTokenMultiResourceRequest) (*GetDecisionByTokenMultiResourceResponse, error) GetEntitlements(context.Context, *GetEntitlementsRequest) (*GetEntitlementsResponse, error) mustEmbedUnimplementedAuthorizationServiceServer() } @@ -118,6 +130,9 @@ func (UnimplementedAuthorizationServiceServer) GetDecisionBulk(context.Context, func (UnimplementedAuthorizationServiceServer) GetDecisionByToken(context.Context, *GetDecisionByTokenRequest) (*GetDecisionByTokenResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetDecisionByToken not implemented") } +func (UnimplementedAuthorizationServiceServer) GetDecisionByTokenMultiResource(context.Context, *GetDecisionByTokenMultiResourceRequest) (*GetDecisionByTokenMultiResourceResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetDecisionByTokenMultiResource not implemented") +} func (UnimplementedAuthorizationServiceServer) GetEntitlements(context.Context, *GetEntitlementsRequest) (*GetEntitlementsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetEntitlements not implemented") } @@ -206,6 +221,24 @@ func _AuthorizationService_GetDecisionByToken_Handler(srv interface{}, ctx conte return interceptor(ctx, in, info, handler) } +func _AuthorizationService_GetDecisionByTokenMultiResource_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetDecisionByTokenMultiResourceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AuthorizationServiceServer).GetDecisionByTokenMultiResource(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: AuthorizationService_GetDecisionByTokenMultiResource_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AuthorizationServiceServer).GetDecisionByTokenMultiResource(ctx, req.(*GetDecisionByTokenMultiResourceRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _AuthorizationService_GetEntitlements_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(GetEntitlementsRequest) if err := dec(in); err != nil { @@ -247,6 +280,10 @@ var AuthorizationService_ServiceDesc = grpc.ServiceDesc{ MethodName: "GetDecisionByToken", Handler: _AuthorizationService_GetDecisionByToken_Handler, }, + { + MethodName: "GetDecisionByTokenMultiResource", + Handler: _AuthorizationService_GetDecisionByTokenMultiResource_Handler, + }, { MethodName: "GetEntitlements", Handler: _AuthorizationService_GetEntitlements_Handler, diff --git a/protocol/go/authorization/v2/authorizationv2connect/authorization.connect.go b/protocol/go/authorization/v2/authorizationv2connect/authorization.connect.go index 5bd5a2cdd7..fad108edec 100644 --- a/protocol/go/authorization/v2/authorizationv2connect/authorization.connect.go +++ b/protocol/go/authorization/v2/authorizationv2connect/authorization.connect.go @@ -45,6 +45,9 @@ const ( // AuthorizationServiceGetDecisionByTokenProcedure is the fully-qualified name of the // AuthorizationService's GetDecisionByToken RPC. AuthorizationServiceGetDecisionByTokenProcedure = "/authorization.v2.AuthorizationService/GetDecisionByToken" + // AuthorizationServiceGetDecisionByTokenMultiResourceProcedure is the fully-qualified name of the + // AuthorizationService's GetDecisionByTokenMultiResource RPC. + AuthorizationServiceGetDecisionByTokenMultiResourceProcedure = "/authorization.v2.AuthorizationService/GetDecisionByTokenMultiResource" // AuthorizationServiceGetEntitlementsProcedure is the fully-qualified name of the // AuthorizationService's GetEntitlements RPC. AuthorizationServiceGetEntitlementsProcedure = "/authorization.v2.AuthorizationService/GetEntitlements" @@ -52,12 +55,13 @@ const ( // These variables are the protoreflect.Descriptor objects for the RPCs defined in this package. var ( - authorizationServiceServiceDescriptor = v2.File_authorization_v2_authorization_proto.Services().ByName("AuthorizationService") - authorizationServiceGetDecisionMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetDecision") - authorizationServiceGetDecisionMultiResourceMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetDecisionMultiResource") - authorizationServiceGetDecisionBulkMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetDecisionBulk") - authorizationServiceGetDecisionByTokenMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetDecisionByToken") - authorizationServiceGetEntitlementsMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetEntitlements") + authorizationServiceServiceDescriptor = v2.File_authorization_v2_authorization_proto.Services().ByName("AuthorizationService") + authorizationServiceGetDecisionMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetDecision") + authorizationServiceGetDecisionMultiResourceMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetDecisionMultiResource") + authorizationServiceGetDecisionBulkMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetDecisionBulk") + authorizationServiceGetDecisionByTokenMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetDecisionByToken") + authorizationServiceGetDecisionByTokenMultiResourceMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetDecisionByTokenMultiResource") + authorizationServiceGetEntitlementsMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetEntitlements") ) // AuthorizationServiceClient is a client for the authorization.v2.AuthorizationService service. @@ -66,6 +70,7 @@ type AuthorizationServiceClient interface { GetDecisionMultiResource(context.Context, *connect.Request[v2.GetDecisionMultiResourceRequest]) (*connect.Response[v2.GetDecisionMultiResourceResponse], error) GetDecisionBulk(context.Context, *connect.Request[v2.GetDecisionBulkRequest]) (*connect.Response[v2.GetDecisionBulkResponse], error) GetDecisionByToken(context.Context, *connect.Request[v2.GetDecisionByTokenRequest]) (*connect.Response[v2.GetDecisionByTokenResponse], error) + GetDecisionByTokenMultiResource(context.Context, *connect.Request[v2.GetDecisionByTokenMultiResourceRequest]) (*connect.Response[v2.GetDecisionByTokenMultiResourceResponse], error) GetEntitlements(context.Context, *connect.Request[v2.GetEntitlementsRequest]) (*connect.Response[v2.GetEntitlementsResponse], error) } @@ -103,6 +108,12 @@ func NewAuthorizationServiceClient(httpClient connect.HTTPClient, baseURL string connect.WithSchema(authorizationServiceGetDecisionByTokenMethodDescriptor), connect.WithClientOptions(opts...), ), + getDecisionByTokenMultiResource: connect.NewClient[v2.GetDecisionByTokenMultiResourceRequest, v2.GetDecisionByTokenMultiResourceResponse]( + httpClient, + baseURL+AuthorizationServiceGetDecisionByTokenMultiResourceProcedure, + connect.WithSchema(authorizationServiceGetDecisionByTokenMultiResourceMethodDescriptor), + connect.WithClientOptions(opts...), + ), getEntitlements: connect.NewClient[v2.GetEntitlementsRequest, v2.GetEntitlementsResponse]( httpClient, baseURL+AuthorizationServiceGetEntitlementsProcedure, @@ -114,11 +125,12 @@ func NewAuthorizationServiceClient(httpClient connect.HTTPClient, baseURL string // authorizationServiceClient implements AuthorizationServiceClient. type authorizationServiceClient struct { - getDecision *connect.Client[v2.GetDecisionRequest, v2.GetDecisionResponse] - getDecisionMultiResource *connect.Client[v2.GetDecisionMultiResourceRequest, v2.GetDecisionMultiResourceResponse] - getDecisionBulk *connect.Client[v2.GetDecisionBulkRequest, v2.GetDecisionBulkResponse] - getDecisionByToken *connect.Client[v2.GetDecisionByTokenRequest, v2.GetDecisionByTokenResponse] - getEntitlements *connect.Client[v2.GetEntitlementsRequest, v2.GetEntitlementsResponse] + getDecision *connect.Client[v2.GetDecisionRequest, v2.GetDecisionResponse] + getDecisionMultiResource *connect.Client[v2.GetDecisionMultiResourceRequest, v2.GetDecisionMultiResourceResponse] + getDecisionBulk *connect.Client[v2.GetDecisionBulkRequest, v2.GetDecisionBulkResponse] + getDecisionByToken *connect.Client[v2.GetDecisionByTokenRequest, v2.GetDecisionByTokenResponse] + getDecisionByTokenMultiResource *connect.Client[v2.GetDecisionByTokenMultiResourceRequest, v2.GetDecisionByTokenMultiResourceResponse] + getEntitlements *connect.Client[v2.GetEntitlementsRequest, v2.GetEntitlementsResponse] } // GetDecision calls authorization.v2.AuthorizationService.GetDecision. @@ -141,6 +153,12 @@ func (c *authorizationServiceClient) GetDecisionByToken(ctx context.Context, req return c.getDecisionByToken.CallUnary(ctx, req) } +// GetDecisionByTokenMultiResource calls +// authorization.v2.AuthorizationService.GetDecisionByTokenMultiResource. +func (c *authorizationServiceClient) GetDecisionByTokenMultiResource(ctx context.Context, req *connect.Request[v2.GetDecisionByTokenMultiResourceRequest]) (*connect.Response[v2.GetDecisionByTokenMultiResourceResponse], error) { + return c.getDecisionByTokenMultiResource.CallUnary(ctx, req) +} + // GetEntitlements calls authorization.v2.AuthorizationService.GetEntitlements. func (c *authorizationServiceClient) GetEntitlements(ctx context.Context, req *connect.Request[v2.GetEntitlementsRequest]) (*connect.Response[v2.GetEntitlementsResponse], error) { return c.getEntitlements.CallUnary(ctx, req) @@ -153,6 +171,7 @@ type AuthorizationServiceHandler interface { GetDecisionMultiResource(context.Context, *connect.Request[v2.GetDecisionMultiResourceRequest]) (*connect.Response[v2.GetDecisionMultiResourceResponse], error) GetDecisionBulk(context.Context, *connect.Request[v2.GetDecisionBulkRequest]) (*connect.Response[v2.GetDecisionBulkResponse], error) GetDecisionByToken(context.Context, *connect.Request[v2.GetDecisionByTokenRequest]) (*connect.Response[v2.GetDecisionByTokenResponse], error) + GetDecisionByTokenMultiResource(context.Context, *connect.Request[v2.GetDecisionByTokenMultiResourceRequest]) (*connect.Response[v2.GetDecisionByTokenMultiResourceResponse], error) GetEntitlements(context.Context, *connect.Request[v2.GetEntitlementsRequest]) (*connect.Response[v2.GetEntitlementsResponse], error) } @@ -186,6 +205,12 @@ func NewAuthorizationServiceHandler(svc AuthorizationServiceHandler, opts ...con connect.WithSchema(authorizationServiceGetDecisionByTokenMethodDescriptor), connect.WithHandlerOptions(opts...), ) + authorizationServiceGetDecisionByTokenMultiResourceHandler := connect.NewUnaryHandler( + AuthorizationServiceGetDecisionByTokenMultiResourceProcedure, + svc.GetDecisionByTokenMultiResource, + connect.WithSchema(authorizationServiceGetDecisionByTokenMultiResourceMethodDescriptor), + connect.WithHandlerOptions(opts...), + ) authorizationServiceGetEntitlementsHandler := connect.NewUnaryHandler( AuthorizationServiceGetEntitlementsProcedure, svc.GetEntitlements, @@ -202,6 +227,8 @@ func NewAuthorizationServiceHandler(svc AuthorizationServiceHandler, opts ...con authorizationServiceGetDecisionBulkHandler.ServeHTTP(w, r) case AuthorizationServiceGetDecisionByTokenProcedure: authorizationServiceGetDecisionByTokenHandler.ServeHTTP(w, r) + case AuthorizationServiceGetDecisionByTokenMultiResourceProcedure: + authorizationServiceGetDecisionByTokenMultiResourceHandler.ServeHTTP(w, r) case AuthorizationServiceGetEntitlementsProcedure: authorizationServiceGetEntitlementsHandler.ServeHTTP(w, r) default: @@ -229,6 +256,10 @@ func (UnimplementedAuthorizationServiceHandler) GetDecisionByToken(context.Conte return nil, connect.NewError(connect.CodeUnimplemented, errors.New("authorization.v2.AuthorizationService.GetDecisionByToken is not implemented")) } +func (UnimplementedAuthorizationServiceHandler) GetDecisionByTokenMultiResource(context.Context, *connect.Request[v2.GetDecisionByTokenMultiResourceRequest]) (*connect.Response[v2.GetDecisionByTokenMultiResourceResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("authorization.v2.AuthorizationService.GetDecisionByTokenMultiResource is not implemented")) +} + func (UnimplementedAuthorizationServiceHandler) GetEntitlements(context.Context, *connect.Request[v2.GetEntitlementsRequest]) (*connect.Response[v2.GetEntitlementsResponse], error) { return nil, connect.NewError(connect.CodeUnimplemented, errors.New("authorization.v2.AuthorizationService.GetEntitlements is not implemented")) } diff --git a/service/authorization/v2/authorization.proto b/service/authorization/v2/authorization.proto index c1fe62dc5b..6736538574 100644 --- a/service/authorization/v2/authorization.proto +++ b/service/authorization/v2/authorization.proto @@ -145,10 +145,10 @@ message GetDecisionMultiResourceRequest { message GetDecisionMultiResourceResponse { // ephemeral id for tracking between request and response string ephemeral_entity_chain_id = 1; - // name on action is required - policy.Action action = 3; + // name on action is to be relied upon + policy.Action action = 2; // convenience flag indicating global resource decisions result (permit/deny) - google.protobuf.BoolValue all_permitted = 2; + google.protobuf.BoolValue all_permitted = 3; // individual resource decisions repeated ResourceDecision resource_decisions = 4; } @@ -177,40 +177,66 @@ message GetEntitlementsRequest { ]; // optional parameter to return all entitled values for attribute definitions with hierarchy rules, propagating // down the hierarchical values instead of returning solely the value that is directly entitled - optional bool with_comprehensive_hierarchy = 3; + optional bool with_comprehensive_hierarchy = 2; } message GetEntitlementsResponse { repeated EntityEntitlements entitlements = 1; } -// Can the entity (PE or NPE) represented by this token take the provided action on the single resource -message TokenDecisionRequest { +// Can the entity (PE or NPE) represented by this token access? +// 1. one token +// 2. one action +// 3. one resource +message GetDecisionByTokenRequest { Token token = 1 [(buf.validate.field).required = true]; // name on action is required policy.Action action = 2 [(buf.validate.field).required = true]; Resource resource = 3 [(buf.validate.field).required = true]; - // Add CEL validation for the nested field option (buf.validate.message).cel = { id: "token_decision_request.action_name_required" message: "action.name must be provided" expression: "has(this.action.name)" }; } - -message GetDecisionByTokenRequest { - TokenDecisionRequest decision_request = 1; -} message GetDecisionByTokenResponse { GetDecisionResponse decision_response = 1; } +// Can the entity (PE or NPE) represented by this token access? +// 1. one token +// 2. one action +// 3. multiple resource +message GetDecisionByTokenMultiResourceRequest { + Token token = 1 [(buf.validate.field).required = true]; + // name on action is required + policy.Action action = 2 [(buf.validate.field).required = true]; + repeated Resource resources = 3 [ + (buf.validate.field).required = true, + (buf.validate.field).repeated = {min_items: 1} + ]; + + option (buf.validate.message).cel = { + id: "token_decision_multi_resource_request.action_name_required" + message: "action.name must be provided" + expression: "has(this.action.name)" + }; +} +message GetDecisionByTokenMultiResourceResponse { + policy.Action action = 1; + // convenience flag indicating global resource decisions result (permit/deny) + google.protobuf.BoolValue all_permitted = 2; + // individual resource decisions + repeated ResourceDecision resource_decisions = 4; +} + service AuthorizationService { rpc GetDecision(GetDecisionRequest) returns (GetDecisionResponse) {} rpc GetDecisionMultiResource(GetDecisionMultiResourceRequest) returns (GetDecisionMultiResourceResponse) {} rpc GetDecisionBulk(GetDecisionBulkRequest) returns (GetDecisionBulkResponse) {} rpc GetDecisionByToken(GetDecisionByTokenRequest) returns (GetDecisionByTokenResponse) {} + rpc GetDecisionByTokenMultiResource(GetDecisionByTokenMultiResourceRequest) returns (GetDecisionByTokenMultiResourceResponse) {} rpc GetEntitlements(GetEntitlementsRequest) returns (GetEntitlementsResponse) {} } From 066cb553d282505ddb93e1a45f4748dde2f9e75f Mon Sep 17 00:00:00 2001 From: jakedoublev Date: Tue, 13 May 2025 11:42:34 -0700 Subject: [PATCH 24/49] deprecated comments --- docs/grpc/index.html | 6 +- .../authorization/authorization.swagger.json | 6 +- .../go/authorization/authorization_grpc.pb.go | 12 +- .../authorization.connect.go | 12 +- service/authorization/authorization.proto | 161 +++++++++--------- 5 files changed, 97 insertions(+), 100 deletions(-) diff --git a/docs/grpc/index.html b/docs/grpc/index.html index 24cf21e510..b33e857656 100644 --- a/docs/grpc/index.html +++ b/docs/grpc/index.html @@ -4119,21 +4119,21 @@

      AuthorizationService

      GetDecisions GetDecisionsRequest GetDecisionsResponse -

      Deprecated: Use AuthorizationV2.GetDecisionBulk method instead

      +

      Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetMultiResourceDecision, GetBulkDecision)

      GetDecisionsByToken GetDecisionsByTokenRequest GetDecisionsByTokenResponse -

      Deprecated: Use AuthorizationV2.GetDecisionBulkByToken method instead

      +

      Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetMultiResourceDecision)

      GetEntitlements GetEntitlementsRequest GetEntitlementsResponse -

      Deprecated: Use AuthorizationV2.GetEntitlements method instead

      +

      Deprecated: Use AuthorizationV2 method instead (GetEntitlements)

      diff --git a/docs/openapi/authorization/authorization.swagger.json b/docs/openapi/authorization/authorization.swagger.json index 58443ba5dd..e6ba5e2aa6 100644 --- a/docs/openapi/authorization/authorization.swagger.json +++ b/docs/openapi/authorization/authorization.swagger.json @@ -18,7 +18,7 @@ "paths": { "/v1/authorization": { "post": { - "summary": "Deprecated: Use AuthorizationV2.GetDecisionBulk method instead", + "summary": "Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetMultiResourceDecision, GetBulkDecision)", "operationId": "AuthorizationService_GetDecisions", "responses": { "200": { @@ -51,7 +51,7 @@ }, "/v1/entitlements": { "post": { - "summary": "Deprecated: Use AuthorizationV2.GetEntitlements method instead", + "summary": "Deprecated: Use AuthorizationV2 method instead (GetEntitlements)", "operationId": "AuthorizationService_GetEntitlements", "responses": { "200": { @@ -85,7 +85,7 @@ }, "/v1/token/authorization": { "post": { - "summary": "Deprecated: Use AuthorizationV2.GetDecisionBulkByToken method instead", + "summary": "Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetMultiResourceDecision)", "operationId": "AuthorizationService_GetDecisionsByToken", "responses": { "200": { diff --git a/protocol/go/authorization/authorization_grpc.pb.go b/protocol/go/authorization/authorization_grpc.pb.go index 9943bb5f07..9b0d1239c7 100644 --- a/protocol/go/authorization/authorization_grpc.pb.go +++ b/protocol/go/authorization/authorization_grpc.pb.go @@ -28,11 +28,11 @@ const ( // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. type AuthorizationServiceClient interface { - // Deprecated: Use AuthorizationV2.GetDecisionBulk method instead + // Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetMultiResourceDecision, GetBulkDecision) GetDecisions(ctx context.Context, in *GetDecisionsRequest, opts ...grpc.CallOption) (*GetDecisionsResponse, error) - // Deprecated: Use AuthorizationV2.GetDecisionBulkByToken method instead + // Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetMultiResourceDecision) GetDecisionsByToken(ctx context.Context, in *GetDecisionsByTokenRequest, opts ...grpc.CallOption) (*GetDecisionsByTokenResponse, error) - // Deprecated: Use AuthorizationV2.GetEntitlements method instead + // Deprecated: Use AuthorizationV2 method instead (GetEntitlements) GetEntitlements(ctx context.Context, in *GetEntitlementsRequest, opts ...grpc.CallOption) (*GetEntitlementsResponse, error) } @@ -75,11 +75,11 @@ func (c *authorizationServiceClient) GetEntitlements(ctx context.Context, in *Ge // All implementations must embed UnimplementedAuthorizationServiceServer // for forward compatibility type AuthorizationServiceServer interface { - // Deprecated: Use AuthorizationV2.GetDecisionBulk method instead + // Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetMultiResourceDecision, GetBulkDecision) GetDecisions(context.Context, *GetDecisionsRequest) (*GetDecisionsResponse, error) - // Deprecated: Use AuthorizationV2.GetDecisionBulkByToken method instead + // Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetMultiResourceDecision) GetDecisionsByToken(context.Context, *GetDecisionsByTokenRequest) (*GetDecisionsByTokenResponse, error) - // Deprecated: Use AuthorizationV2.GetEntitlements method instead + // Deprecated: Use AuthorizationV2 method instead (GetEntitlements) GetEntitlements(context.Context, *GetEntitlementsRequest) (*GetEntitlementsResponse, error) mustEmbedUnimplementedAuthorizationServiceServer() } diff --git a/protocol/go/authorization/authorizationconnect/authorization.connect.go b/protocol/go/authorization/authorizationconnect/authorization.connect.go index 8b2eba51f9..4282d343b4 100644 --- a/protocol/go/authorization/authorizationconnect/authorization.connect.go +++ b/protocol/go/authorization/authorizationconnect/authorization.connect.go @@ -54,11 +54,11 @@ var ( // AuthorizationServiceClient is a client for the authorization.AuthorizationService service. type AuthorizationServiceClient interface { - // Deprecated: Use AuthorizationV2.GetDecisionBulk method instead + // Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetMultiResourceDecision, GetBulkDecision) GetDecisions(context.Context, *connect.Request[authorization.GetDecisionsRequest]) (*connect.Response[authorization.GetDecisionsResponse], error) - // Deprecated: Use AuthorizationV2.GetDecisionBulkByToken method instead + // Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetMultiResourceDecision) GetDecisionsByToken(context.Context, *connect.Request[authorization.GetDecisionsByTokenRequest]) (*connect.Response[authorization.GetDecisionsByTokenResponse], error) - // Deprecated: Use AuthorizationV2.GetEntitlements method instead + // Deprecated: Use AuthorizationV2 method instead (GetEntitlements) GetEntitlements(context.Context, *connect.Request[authorization.GetEntitlementsRequest]) (*connect.Response[authorization.GetEntitlementsResponse], error) } @@ -118,11 +118,11 @@ func (c *authorizationServiceClient) GetEntitlements(ctx context.Context, req *c // AuthorizationServiceHandler is an implementation of the authorization.AuthorizationService // service. type AuthorizationServiceHandler interface { - // Deprecated: Use AuthorizationV2.GetDecisionBulk method instead + // Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetMultiResourceDecision, GetBulkDecision) GetDecisions(context.Context, *connect.Request[authorization.GetDecisionsRequest]) (*connect.Response[authorization.GetDecisionsResponse], error) - // Deprecated: Use AuthorizationV2.GetDecisionBulkByToken method instead + // Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetMultiResourceDecision) GetDecisionsByToken(context.Context, *connect.Request[authorization.GetDecisionsByTokenRequest]) (*connect.Response[authorization.GetDecisionsByTokenResponse], error) - // Deprecated: Use AuthorizationV2.GetEntitlements method instead + // Deprecated: Use AuthorizationV2 method instead (GetEntitlements) GetEntitlements(context.Context, *connect.Request[authorization.GetEntitlementsRequest]) (*connect.Response[authorization.GetEntitlementsResponse], error) } diff --git a/service/authorization/authorization.proto b/service/authorization/authorization.proto index a1d0343d8d..25537f3f76 100644 --- a/service/authorization/authorization.proto +++ b/service/authorization/authorization.proto @@ -4,10 +4,8 @@ package authorization; import "google/api/annotations.proto"; import "google/protobuf/any.proto"; - import "policy/objects.proto"; - message Token { string id = 1; // ephemeral id for tracking between request and response string jwt = 2; // the token @@ -47,50 +45,50 @@ message EntityChain { } /* - Example Request Get Decisions to answer the question - Do Bob (represented by entity chain ec1) - and Alice (represented by entity chain ec2) have TRANSMIT authorization for - 2 resources; resource1 (attr-set-1) defined by attributes foo:bar resource2 (attr-set-2) defined by attribute foo:bar, color:red ? + Example Request Get Decisions to answer the question - Do Bob (represented by entity chain ec1) + and Alice (represented by entity chain ec2) have TRANSMIT authorization for + 2 resources; resource1 (attr-set-1) defined by attributes foo:bar resource2 (attr-set-2) defined by attribute foo:bar, color:red ? - { - "actions": [ - { - "standard": "STANDARD_ACTION_TRANSMIT" - } - ], - "entityChains": [ - { - "id": "ec1", - "entities": [ - { - "emailAddress": "bob@example.org" - } - ] - }, - { - "id": "ec2", - "entities": [ - { - "userName": "alice@example.org" - } - ] - } - ], - "resourceAttributes": [ - { - "resourceAttributeId": "attr-set-1", - "attributeFqns": [ - "https://www.example.org/attr/foo/value/value1" - ] - }, - { - "resourceAttributeId": "attr-set-2", - "attributeFqns": [ - "https://example.net/attr/attr1/value/value1", - "https://example.net/attr/attr1/value/value2" - ] - } - ] -} + { + "actions": [ + { + "standard": "STANDARD_ACTION_TRANSMIT" + } + ], + "entityChains": [ + { + "id": "ec1", + "entities": [ + { + "emailAddress": "bob@example.org" + } + ] + }, + { + "id": "ec2", + "entities": [ + { + "userName": "alice@example.org" + } + ] + } + ], + "resourceAttributes": [ + { + "resourceAttributeId": "attr-set-1", + "attributeFqns": [ + "https://www.example.org/attr/foo/value/value1" + ] + }, + { + "resourceAttributeId": "attr-set-2", + "attributeFqns": [ + "https://example.net/attr/attr1/value/value1", + "https://example.net/attr/attr1/value/value2" + ] + } + ] + } */ message DecisionRequest { @@ -234,42 +232,41 @@ message GetEntitlementsResponse { repeated EntityEntitlements entitlements = 1; } - /* - Example Request Get Decisions by Token to answer the question - Do Bob and client1 (represented by token tok1) - and Alice and client2 (represented by token tok2) have TRANSMIT authorization for - 2 resources; resource1 (attr-set-1) defined by attributes foo:bar resource2 (attr-set-2) defined by attribute foo:bar, color:red ? + Example Request Get Decisions by Token to answer the question - Do Bob and client1 (represented by token tok1) + and Alice and client2 (represented by token tok2) have TRANSMIT authorization for + 2 resources; resource1 (attr-set-1) defined by attributes foo:bar resource2 (attr-set-2) defined by attribute foo:bar, color:red ? - { - "actions": [ - { - "standard": "STANDARD_ACTION_TRANSMIT" - } - ], - "tokens": [ - { - "id": "tok1", - "jwt": .... - }, - { - "id": "tok2", - "jwt": ..... - } - ], - "resourceAttributes": [ - { - "attributeFqns": [ - "https://www.example.org/attr/foo/value/value1" - ] - }, - { - "attributeFqns": [ - "https://example.net/attr/attr1/value/value1", - "https://example.net/attr/attr1/value/value2" - ] - } - ] -} + { + "actions": [ + { + "standard": "STANDARD_ACTION_TRANSMIT" + } + ], + "tokens": [ + { + "id": "tok1", + "jwt": .... + }, + { + "id": "tok2", + "jwt": ..... + } + ], + "resourceAttributes": [ + { + "attributeFqns": [ + "https://www.example.org/attr/foo/value/value1" + ] + }, + { + "attributeFqns": [ + "https://example.net/attr/attr1/value/value1", + "https://example.net/attr/attr1/value/value2" + ] + } + ] + } */ message TokenDecisionRequest { @@ -287,18 +284,18 @@ message GetDecisionsByTokenResponse { } service AuthorizationService { - // Deprecated: Use AuthorizationV2.GetDecisionBulk method instead + // Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetMultiResourceDecision, GetBulkDecision) rpc GetDecisions(GetDecisionsRequest) returns (GetDecisionsResponse) { option (google.api.http) = { post: "/v1/authorization" body: "*" }; } - // Deprecated: Use AuthorizationV2.GetDecisionBulkByToken method instead + // Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetMultiResourceDecision) rpc GetDecisionsByToken(GetDecisionsByTokenRequest) returns (GetDecisionsByTokenResponse) { option (google.api.http) = {post: "/v1/token/authorization"}; } - // Deprecated: Use AuthorizationV2.GetEntitlements method instead + // Deprecated: Use AuthorizationV2 method instead (GetEntitlements) rpc GetEntitlements(GetEntitlementsRequest) returns (GetEntitlementsResponse) { option (google.api.http) = { post: "/v1/entitlements" From f003f41374a80822bd9fb162345189176bea2994 Mon Sep 17 00:00:00 2001 From: jakedoublev Date: Tue, 13 May 2025 12:28:18 -0700 Subject: [PATCH 25/49] use v1 messages in v2 authz where it makes sense (token and entity chain) --- docs/grpc/index.html | 78 +- .../v2/authorization.swagger.json | 115 +- protocol/go/authorization/authorization.pb.go | 389 +++--- .../go/authorization/v2/authorization.pb.go | 1074 +++++++---------- service/authorization/authorization.proto | 15 +- service/authorization/v2/authorization.proto | 26 +- 6 files changed, 765 insertions(+), 932 deletions(-) diff --git a/docs/grpc/index.html b/docs/grpc/index.html index b33e857656..bfcbf2beac 100644 --- a/docs/grpc/index.html +++ b/docs/grpc/index.html @@ -447,10 +447,6 @@

      Table of Contents

      MEntity -
    • - MEntityChain -
    • -
    • MEntityEntitlements
    • @@ -523,10 +519,6 @@

      Table of Contents

      MResourceDecision -
    • - MToken -
    • -
    • EDecision @@ -4262,37 +4254,6 @@

      Entity

      -

      EntityChain

      -

      A set of related PE and NPE (i.e. authenticating client and user)

      - - - - - - - - - - - - - - - - - - - - - - - -
      FieldTypeLabelDescription
      ephemeral_idstring

      ephemeral id for tracking between request and response

      entitiesEntityrepeated

      - - - - -

      EntityEntitlements

      Entitlements for a given entity, mapping each attribute value FQN to any entitled actions[]

      @@ -4439,7 +4400,7 @@

      GetDecisionByTo token - Token + authorization.Token

      @@ -4515,7 +4476,7 @@

      GetDecisionByTokenRequest token - Token + authorization.Token

      @@ -4577,7 +4538,7 @@

      GetDecisionMultiResour entity - EntityChain + authorization.EntityChain

      The entity chain must be defined

      @@ -4660,7 +4621,7 @@

      GetDecisionRequest

      entity - EntityChain + authorization.EntityChain

      @@ -4884,37 +4845,6 @@

      ResourceDecision

      -

      Token

      -

      - - - - - - - - - - - - - - - - - - - - - - - -
      FieldTypeLabelDescription
      ephemeral_idstring

      ephemeral id for tracking between request and response

      jwtstring

      access token

      - - - - -

      Decision

      diff --git a/docs/openapi/authorization/v2/authorization.swagger.json b/docs/openapi/authorization/v2/authorization.swagger.json index 498c12f75d..32eaaf8059 100644 --- a/docs/openapi/authorization/v2/authorization.swagger.json +++ b/docs/openapi/authorization/v2/authorization.swagger.json @@ -50,6 +50,89 @@ } } }, + "authorizationEntity": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "ephemeral id for tracking between request and response" + }, + "emailAddress": { + "type": "string", + "title": "one of the entity options must be set" + }, + "userName": { + "type": "string" + }, + "remoteClaimsUrl": { + "type": "string" + }, + "uuid": { + "type": "string" + }, + "claims": { + "$ref": "#/definitions/protobufAny" + }, + "custom": { + "$ref": "#/definitions/authorizationEntityCustom" + }, + "clientId": { + "type": "string" + }, + "category": { + "$ref": "#/definitions/authorizationEntityCategory" + } + }, + "title": "PE (Person Entity) or NPE (Non-Person Entity)" + }, + "authorizationEntityCategory": { + "type": "string", + "enum": [ + "CATEGORY_UNSPECIFIED", + "CATEGORY_SUBJECT", + "CATEGORY_ENVIRONMENT" + ], + "default": "CATEGORY_UNSPECIFIED" + }, + "authorizationEntityChain": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "ephemeral id for tracking between request and response" + }, + "entities": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/authorizationEntity" + } + } + }, + "title": "A set of related PE and NPE" + }, + "authorizationEntityCustom": { + "type": "object", + "properties": { + "extension": { + "$ref": "#/definitions/protobufAny" + } + }, + "title": "Entity type for custom entities beyond the standard types" + }, + "authorizationToken": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "ephemeral id for tracking between request and response" + }, + "jwt": { + "type": "string", + "title": "the token" + } + } + }, "authorizationv2Decision": { "type": "string", "enum": [ @@ -100,23 +183,6 @@ ], "default": "CATEGORY_UNSPECIFIED" }, - "authorizationv2EntityChain": { - "type": "object", - "properties": { - "ephemeralId": { - "type": "string", - "title": "ephemeral id for tracking between request and response" - }, - "entities": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/authorizationv2Entity" - } - } - }, - "title": "A set of related PE and NPE (i.e. authenticating client and user)" - }, "authorizationv2EntityEntitlements": { "type": "object", "properties": { @@ -145,19 +211,6 @@ } } }, - "authorizationv2Token": { - "type": "object", - "properties": { - "ephemeralId": { - "type": "string", - "title": "ephemeral id for tracking between request and response" - }, - "jwt": { - "type": "string", - "title": "access token" - } - } - }, "commonMetadata": { "type": "object", "properties": { @@ -279,7 +332,7 @@ "type": "object", "properties": { "entity": { - "$ref": "#/definitions/authorizationv2EntityChain", + "$ref": "#/definitions/authorizationEntityChain", "title": "The entity chain must be defined" }, "action": { diff --git a/protocol/go/authorization/authorization.pb.go b/protocol/go/authorization/authorization.pb.go index 210f7213fe..c074930466 100644 --- a/protocol/go/authorization/authorization.pb.go +++ b/protocol/go/authorization/authorization.pb.go @@ -7,6 +7,7 @@ package authorization import ( + _ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate" policy "github.com/opentdf/platform/protocol/go/policy" _ "google.golang.org/genproto/googleapis/api/annotations" protoreflect "google.golang.org/protobuf/reflect/protoreflect" @@ -126,8 +127,10 @@ type Token struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // ephemeral id for tracking between request and response - Jwt string `protobuf:"bytes,2,opt,name=jwt,proto3" json:"jwt,omitempty"` // the token + // ephemeral id for tracking between request and response + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // the token + Jwt string `protobuf:"bytes,2,opt,name=jwt,proto3" json:"jwt,omitempty"` } func (x *Token) Reset() { @@ -401,7 +404,8 @@ type EntityChain struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // ephemeral id for tracking between request and response + // ephemeral id for tracking between request and response + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` Entities []*Entity `protobuf:"bytes,2,rep,name=entities,proto3" json:"entities,omitempty"` } @@ -1229,199 +1233,202 @@ var file_authorization_authorization_proto_rawDesc = []byte{ 0x0a, 0x21, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, - 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x22, 0x29, 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6a, 0x77, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6a, 0x77, 0x74, 0x22, 0xc9, 0x03, 0x0a, - 0x06, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x25, 0x0a, 0x0d, 0x65, 0x6d, 0x61, 0x69, 0x6c, - 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, - 0x52, 0x0c, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1d, - 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x48, 0x00, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, - 0x11, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x5f, 0x75, - 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0f, 0x72, 0x65, 0x6d, 0x6f, - 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x55, 0x72, 0x6c, 0x12, 0x14, 0x0a, 0x04, 0x75, - 0x75, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x75, 0x75, 0x69, - 0x64, 0x12, 0x2e, 0x0a, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x48, 0x00, 0x52, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, - 0x73, 0x12, 0x35, 0x0a, 0x06, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1b, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x00, - 0x52, 0x06, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x1d, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x63, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x3a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, - 0x6f, 0x72, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x2e, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, - 0x6f, 0x72, 0x79, 0x22, 0x54, 0x0a, 0x08, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, - 0x18, 0x0a, 0x14, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, - 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x41, 0x54, - 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x53, 0x55, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x01, 0x12, - 0x18, 0x0a, 0x14, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x45, 0x4e, 0x56, 0x49, - 0x52, 0x4f, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x42, 0x0d, 0x0a, 0x0b, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x42, 0x0a, 0x0c, 0x45, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x32, 0x0a, 0x09, 0x65, 0x78, 0x74, 0x65, - 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, - 0x79, 0x52, 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x50, 0x0a, 0x0b, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x31, 0x0a, 0x08, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0xcf, - 0x01, 0x0a, 0x0f, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3f, 0x0a, 0x0d, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, - 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x12, 0x51, 0x0a, - 0x13, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x12, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, - 0x22, 0xce, 0x02, 0x0a, 0x10, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x34, 0x0a, - 0x16, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x65, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, - 0x73, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x44, 0x0a, 0x08, 0x64, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x22, 0x4c, 0x0a, 0x08, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, - 0x18, 0x0a, 0x14, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, - 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x45, 0x43, - 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4e, 0x59, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, - 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x54, 0x10, - 0x02, 0x22, 0x62, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4b, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, 0x66, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, - 0x12, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22, 0xfa, 0x01, - 0x0a, 0x16, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x3b, 0x0a, 0x05, 0x73, - 0x63, 0x6f, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x48, 0x00, 0x52, 0x05, - 0x73, 0x63, 0x6f, 0x70, 0x65, 0x88, 0x01, 0x01, 0x12, 0x45, 0x0a, 0x1c, 0x77, 0x69, 0x74, 0x68, - 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, - 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, - 0x52, 0x1a, 0x77, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, - 0x69, 0x76, 0x65, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x88, 0x01, 0x01, 0x42, - 0x08, 0x0a, 0x06, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x42, 0x1f, 0x0a, 0x1d, 0x5f, 0x77, 0x69, - 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, - 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x22, 0x63, 0x0a, 0x12, 0x45, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x12, 0x30, 0x0a, - 0x14, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x5f, 0x66, 0x71, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x61, 0x74, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x73, 0x22, - 0x7b, 0x0a, 0x11, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x61, 0x74, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, - 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x73, 0x22, 0x60, 0x0a, 0x17, - 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xc1, - 0x01, 0x0a, 0x14, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x12, 0x2c, 0x0a, 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, + 0x6f, 0x6e, 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, + 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, + 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x31, + 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x03, 0x6a, 0x77, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x03, 0x6a, 0x77, + 0x74, 0x22, 0xc9, 0x03, 0x0a, 0x06, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x25, 0x0a, 0x0d, + 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0c, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x12, 0x1d, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, + 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x61, + 0x69, 0x6d, 0x73, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, + 0x0f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x55, 0x72, 0x6c, + 0x12, 0x14, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, + 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x2e, 0x0a, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x48, 0x00, 0x52, 0x06, + 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x12, 0x35, 0x0a, 0x06, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x75, 0x73, + 0x74, 0x6f, 0x6d, 0x48, 0x00, 0x52, 0x06, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x1d, 0x0a, + 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, + 0x48, 0x00, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x3a, 0x0a, 0x08, + 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e, + 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x08, + 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x22, 0x54, 0x0a, 0x08, 0x43, 0x61, 0x74, 0x65, + 0x67, 0x6f, 0x72, 0x79, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, + 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x14, + 0x0a, 0x10, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x53, 0x55, 0x42, 0x4a, 0x45, + 0x43, 0x54, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, + 0x5f, 0x45, 0x4e, 0x56, 0x49, 0x52, 0x4f, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x42, 0x0d, + 0x0a, 0x0b, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x42, 0x0a, + 0x0c, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x32, 0x0a, + 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, + 0x6e, 0x22, 0x5d, 0x0a, 0x0b, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x3e, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, + 0x01, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, + 0x22, 0xcf, 0x01, 0x0a, 0x0f, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3f, + 0x0a, 0x0d, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, + 0x6e, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x12, 0x51, 0x0a, 0x13, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x73, 0x22, 0x6e, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x50, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x73, 0x22, 0x6d, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x4e, 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x11, - 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x73, 0x32, 0x9c, 0x03, 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x75, 0x0a, 0x0c, 0x47, 0x65, - 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x22, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, - 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, - 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x3a, 0x01, 0x2a, 0x22, 0x11, - 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x8d, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x6f, - 0x6b, 0x65, 0x6e, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x7d, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x45, - 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x3a, 0x01, 0x2a, 0x22, 0x10, - 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x42, 0xb2, 0x01, 0x0a, 0x11, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x12, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x35, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, - 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x2f, 0x67, 0x6f, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x0d, 0x41, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0xca, 0x02, 0x0d, 0x41, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0xe2, 0x02, 0x19, 0x41, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x73, 0x22, 0xce, 0x02, 0x0a, 0x10, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0d, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, + 0x34, 0x0a, 0x16, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x74, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x14, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x65, 0x73, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x44, 0x0a, + 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x4c, 0x0a, 0x08, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x18, 0x0a, 0x14, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, + 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x44, + 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4e, 0x59, 0x10, 0x01, 0x12, 0x13, + 0x0a, 0x0f, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x45, 0x52, 0x4d, 0x49, + 0x54, 0x10, 0x02, 0x22, 0x62, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4b, 0x0a, 0x11, 0x64, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, 0x66, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x44, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x4e, 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x11, 0x64, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22, + 0xfa, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x08, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x3b, 0x0a, + 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x48, 0x00, + 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x88, 0x01, 0x01, 0x12, 0x45, 0x0a, 0x1c, 0x77, 0x69, + 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, + 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, + 0x48, 0x01, 0x52, 0x1a, 0x77, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, + 0x6e, 0x73, 0x69, 0x76, 0x65, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x88, 0x01, + 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x42, 0x1f, 0x0a, 0x1d, 0x5f, + 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, + 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x22, 0x63, 0x0a, 0x12, + 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x12, + 0x30, 0x0a, 0x14, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x61, + 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, + 0x73, 0x22, 0x7b, 0x0a, 0x11, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, + 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, + 0x66, 0x71, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x61, 0x74, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x73, 0x22, 0x60, + 0x0a, 0x17, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x0c, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x21, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x22, 0xc1, 0x01, 0x0a, 0x14, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x12, 0x2c, 0x0a, 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, + 0x73, 0x12, 0x51, 0x0a, 0x13, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, + 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, + 0x52, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x65, 0x73, 0x22, 0x6e, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x50, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x73, 0x22, 0x6d, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, + 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1f, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x73, 0x32, 0x9c, 0x03, 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x75, 0x0a, 0x0c, + 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x22, 0x2e, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, + 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x23, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x3a, 0x01, 0x2a, + 0x22, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x8d, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x29, 0x2e, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x44, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x7d, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, + 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x3a, 0x01, 0x2a, + 0x22, 0x10, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x42, 0xb2, 0x01, 0x0a, 0x11, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x12, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x35, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, + 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, 0x6f, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x0d, 0x41, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0xca, 0x02, 0x0d, 0x41, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0xe2, 0x02, 0x19, 0x41, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x47, 0x50, 0x42, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/protocol/go/authorization/v2/authorization.pb.go b/protocol/go/authorization/v2/authorization.pb.go index edde78a1c0..1903c3ca93 100644 --- a/protocol/go/authorization/v2/authorization.pb.go +++ b/protocol/go/authorization/v2/authorization.pb.go @@ -8,6 +8,7 @@ package authorizationv2 import ( _ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate" + authorization "github.com/opentdf/platform/protocol/go/authorization" policy "github.com/opentdf/platform/protocol/go/policy" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" @@ -119,64 +120,7 @@ func (x Entity_Category) Number() protoreflect.EnumNumber { // Deprecated: Use Entity_Category.Descriptor instead. func (Entity_Category) EnumDescriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{1, 0} -} - -type Token struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // ephemeral id for tracking between request and response - EphemeralId string `protobuf:"bytes,1,opt,name=ephemeral_id,json=ephemeralId,proto3" json:"ephemeral_id,omitempty"` - // access token - Jwt string `protobuf:"bytes,2,opt,name=jwt,proto3" json:"jwt,omitempty"` -} - -func (x *Token) Reset() { - *x = Token{} - if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Token) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Token) ProtoMessage() {} - -func (x *Token) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Token.ProtoReflect.Descriptor instead. -func (*Token) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{0} -} - -func (x *Token) GetEphemeralId() string { - if x != nil { - return x.EphemeralId - } - return "" -} - -func (x *Token) GetJwt() string { - if x != nil { - return x.Jwt - } - return "" + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{0, 0} } // PE (Person Entity) or NPE (Non-Person Entity) @@ -203,7 +147,7 @@ type Entity struct { func (x *Entity) Reset() { *x = Entity{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[1] + mi := &file_authorization_v2_authorization_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -216,7 +160,7 @@ func (x *Entity) String() string { func (*Entity) ProtoMessage() {} func (x *Entity) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[1] + mi := &file_authorization_v2_authorization_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -229,7 +173,7 @@ func (x *Entity) ProtoReflect() protoreflect.Message { // Deprecated: Use Entity.ProtoReflect.Descriptor instead. func (*Entity) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{1} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{0} } func (x *Entity) GetEphemeralId() string { @@ -325,63 +269,6 @@ func (*Entity_ClientId) isEntity_EntityType() {} func (*Entity_RegisteredResourceValueFqn) isEntity_EntityType() {} -// A set of related PE and NPE (i.e. authenticating client and user) -type EntityChain struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // ephemeral id for tracking between request and response - EphemeralId string `protobuf:"bytes,1,opt,name=ephemeral_id,json=ephemeralId,proto3" json:"ephemeral_id,omitempty"` - Entities []*Entity `protobuf:"bytes,2,rep,name=entities,proto3" json:"entities,omitempty"` -} - -func (x *EntityChain) Reset() { - *x = EntityChain{} - if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *EntityChain) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*EntityChain) ProtoMessage() {} - -func (x *EntityChain) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use EntityChain.ProtoReflect.Descriptor instead. -func (*EntityChain) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{2} -} - -func (x *EntityChain) GetEphemeralId() string { - if x != nil { - return x.EphemeralId - } - return "" -} - -func (x *EntityChain) GetEntities() []*Entity { - if x != nil { - return x.Entities - } - return nil -} - // Entitlements for a given entity, mapping each attribute value FQN to any entitled actions[] type EntityEntitlements struct { state protoimpl.MessageState @@ -396,7 +283,7 @@ type EntityEntitlements struct { func (x *EntityEntitlements) Reset() { *x = EntityEntitlements{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[3] + mi := &file_authorization_v2_authorization_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -409,7 +296,7 @@ func (x *EntityEntitlements) String() string { func (*EntityEntitlements) ProtoMessage() {} func (x *EntityEntitlements) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[3] + mi := &file_authorization_v2_authorization_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -422,7 +309,7 @@ func (x *EntityEntitlements) ProtoReflect() protoreflect.Message { // Deprecated: Use EntityEntitlements.ProtoReflect.Descriptor instead. func (*EntityEntitlements) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{3} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{1} } func (x *EntityEntitlements) GetEphemeralId() string { @@ -457,7 +344,7 @@ type Resource struct { func (x *Resource) Reset() { *x = Resource{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[4] + mi := &file_authorization_v2_authorization_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -470,7 +357,7 @@ func (x *Resource) String() string { func (*Resource) ProtoMessage() {} func (x *Resource) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[4] + mi := &file_authorization_v2_authorization_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -483,7 +370,7 @@ func (x *Resource) ProtoReflect() protoreflect.Message { // Deprecated: Use Resource.ProtoReflect.Descriptor instead. func (*Resource) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{4} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{2} } func (x *Resource) GetEphemeralId() string { @@ -544,7 +431,7 @@ type ResourceDecision struct { func (x *ResourceDecision) Reset() { *x = ResourceDecision{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[5] + mi := &file_authorization_v2_authorization_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -557,7 +444,7 @@ func (x *ResourceDecision) String() string { func (*ResourceDecision) ProtoMessage() {} func (x *ResourceDecision) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[5] + mi := &file_authorization_v2_authorization_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -570,7 +457,7 @@ func (x *ResourceDecision) ProtoReflect() protoreflect.Message { // Deprecated: Use ResourceDecision.ProtoReflect.Descriptor instead. func (*ResourceDecision) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{5} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{3} } func (x *ResourceDecision) GetEphemeralResourceId() string { @@ -596,7 +483,7 @@ type GetDecisionRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Entity *EntityChain `protobuf:"bytes,1,opt,name=entity,proto3" json:"entity,omitempty"` + Entity *authorization.EntityChain `protobuf:"bytes,1,opt,name=entity,proto3" json:"entity,omitempty"` // name on action is required Action *policy.Action `protobuf:"bytes,2,opt,name=action,proto3" json:"action,omitempty"` Resource *Resource `protobuf:"bytes,3,opt,name=resource,proto3" json:"resource,omitempty"` @@ -605,7 +492,7 @@ type GetDecisionRequest struct { func (x *GetDecisionRequest) Reset() { *x = GetDecisionRequest{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[6] + mi := &file_authorization_v2_authorization_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -618,7 +505,7 @@ func (x *GetDecisionRequest) String() string { func (*GetDecisionRequest) ProtoMessage() {} func (x *GetDecisionRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[6] + mi := &file_authorization_v2_authorization_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -631,10 +518,10 @@ func (x *GetDecisionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDecisionRequest.ProtoReflect.Descriptor instead. func (*GetDecisionRequest) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{6} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{4} } -func (x *GetDecisionRequest) GetEntity() *EntityChain { +func (x *GetDecisionRequest) GetEntity() *authorization.EntityChain { if x != nil { return x.Entity } @@ -673,7 +560,7 @@ type GetDecisionResponse struct { func (x *GetDecisionResponse) Reset() { *x = GetDecisionResponse{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[7] + mi := &file_authorization_v2_authorization_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -686,7 +573,7 @@ func (x *GetDecisionResponse) String() string { func (*GetDecisionResponse) ProtoMessage() {} func (x *GetDecisionResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[7] + mi := &file_authorization_v2_authorization_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -699,7 +586,7 @@ func (x *GetDecisionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDecisionResponse.ProtoReflect.Descriptor instead. func (*GetDecisionResponse) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{7} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{5} } func (x *GetDecisionResponse) GetEphemeralEntityChainId() string { @@ -741,7 +628,7 @@ type GetDecisionMultiResourceRequest struct { unknownFields protoimpl.UnknownFields // The entity chain must be defined - Entity *EntityChain `protobuf:"bytes,1,opt,name=entity,proto3" json:"entity,omitempty"` + Entity *authorization.EntityChain `protobuf:"bytes,1,opt,name=entity,proto3" json:"entity,omitempty"` // name on action is required Action *policy.Action `protobuf:"bytes,2,opt,name=action,proto3" json:"action,omitempty"` Resources []*Resource `protobuf:"bytes,3,rep,name=resources,proto3" json:"resources,omitempty"` @@ -750,7 +637,7 @@ type GetDecisionMultiResourceRequest struct { func (x *GetDecisionMultiResourceRequest) Reset() { *x = GetDecisionMultiResourceRequest{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[8] + mi := &file_authorization_v2_authorization_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -763,7 +650,7 @@ func (x *GetDecisionMultiResourceRequest) String() string { func (*GetDecisionMultiResourceRequest) ProtoMessage() {} func (x *GetDecisionMultiResourceRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[8] + mi := &file_authorization_v2_authorization_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -776,10 +663,10 @@ func (x *GetDecisionMultiResourceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDecisionMultiResourceRequest.ProtoReflect.Descriptor instead. func (*GetDecisionMultiResourceRequest) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{8} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{6} } -func (x *GetDecisionMultiResourceRequest) GetEntity() *EntityChain { +func (x *GetDecisionMultiResourceRequest) GetEntity() *authorization.EntityChain { if x != nil { return x.Entity } @@ -818,7 +705,7 @@ type GetDecisionMultiResourceResponse struct { func (x *GetDecisionMultiResourceResponse) Reset() { *x = GetDecisionMultiResourceResponse{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[9] + mi := &file_authorization_v2_authorization_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -831,7 +718,7 @@ func (x *GetDecisionMultiResourceResponse) String() string { func (*GetDecisionMultiResourceResponse) ProtoMessage() {} func (x *GetDecisionMultiResourceResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[9] + mi := &file_authorization_v2_authorization_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -844,7 +731,7 @@ func (x *GetDecisionMultiResourceResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDecisionMultiResourceResponse.ProtoReflect.Descriptor instead. func (*GetDecisionMultiResourceResponse) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{9} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{7} } func (x *GetDecisionMultiResourceResponse) GetEphemeralEntityChainId() string { @@ -890,7 +777,7 @@ type GetDecisionBulkRequest struct { func (x *GetDecisionBulkRequest) Reset() { *x = GetDecisionBulkRequest{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[10] + mi := &file_authorization_v2_authorization_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -903,7 +790,7 @@ func (x *GetDecisionBulkRequest) String() string { func (*GetDecisionBulkRequest) ProtoMessage() {} func (x *GetDecisionBulkRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[10] + mi := &file_authorization_v2_authorization_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -916,7 +803,7 @@ func (x *GetDecisionBulkRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDecisionBulkRequest.ProtoReflect.Descriptor instead. func (*GetDecisionBulkRequest) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{10} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{8} } func (x *GetDecisionBulkRequest) GetDecisionRequests() []*GetDecisionMultiResourceRequest { @@ -937,7 +824,7 @@ type GetDecisionBulkResponse struct { func (x *GetDecisionBulkResponse) Reset() { *x = GetDecisionBulkResponse{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[11] + mi := &file_authorization_v2_authorization_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -950,7 +837,7 @@ func (x *GetDecisionBulkResponse) String() string { func (*GetDecisionBulkResponse) ProtoMessage() {} func (x *GetDecisionBulkResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[11] + mi := &file_authorization_v2_authorization_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -963,7 +850,7 @@ func (x *GetDecisionBulkResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDecisionBulkResponse.ProtoReflect.Descriptor instead. func (*GetDecisionBulkResponse) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{11} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{9} } func (x *GetDecisionBulkResponse) GetDecisionResponses() []*GetDecisionMultiResourceResponse { @@ -993,7 +880,7 @@ type GetEntitlementsRequest struct { func (x *GetEntitlementsRequest) Reset() { *x = GetEntitlementsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[12] + mi := &file_authorization_v2_authorization_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1006,7 +893,7 @@ func (x *GetEntitlementsRequest) String() string { func (*GetEntitlementsRequest) ProtoMessage() {} func (x *GetEntitlementsRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[12] + mi := &file_authorization_v2_authorization_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1019,7 +906,7 @@ func (x *GetEntitlementsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetEntitlementsRequest.ProtoReflect.Descriptor instead. func (*GetEntitlementsRequest) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{12} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{10} } func (x *GetEntitlementsRequest) GetEntities() []*Entity { @@ -1047,7 +934,7 @@ type GetEntitlementsResponse struct { func (x *GetEntitlementsResponse) Reset() { *x = GetEntitlementsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[13] + mi := &file_authorization_v2_authorization_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1060,7 +947,7 @@ func (x *GetEntitlementsResponse) String() string { func (*GetEntitlementsResponse) ProtoMessage() {} func (x *GetEntitlementsResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[13] + mi := &file_authorization_v2_authorization_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1073,7 +960,7 @@ func (x *GetEntitlementsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetEntitlementsResponse.ProtoReflect.Descriptor instead. func (*GetEntitlementsResponse) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{13} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{11} } func (x *GetEntitlementsResponse) GetEntitlements() []*EntityEntitlements { @@ -1092,7 +979,7 @@ type GetDecisionByTokenRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Token *Token `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` + Token *authorization.Token `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` // name on action is required Action *policy.Action `protobuf:"bytes,2,opt,name=action,proto3" json:"action,omitempty"` Resource *Resource `protobuf:"bytes,3,opt,name=resource,proto3" json:"resource,omitempty"` @@ -1101,7 +988,7 @@ type GetDecisionByTokenRequest struct { func (x *GetDecisionByTokenRequest) Reset() { *x = GetDecisionByTokenRequest{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[14] + mi := &file_authorization_v2_authorization_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1114,7 +1001,7 @@ func (x *GetDecisionByTokenRequest) String() string { func (*GetDecisionByTokenRequest) ProtoMessage() {} func (x *GetDecisionByTokenRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[14] + mi := &file_authorization_v2_authorization_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1127,10 +1014,10 @@ func (x *GetDecisionByTokenRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDecisionByTokenRequest.ProtoReflect.Descriptor instead. func (*GetDecisionByTokenRequest) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{14} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{12} } -func (x *GetDecisionByTokenRequest) GetToken() *Token { +func (x *GetDecisionByTokenRequest) GetToken() *authorization.Token { if x != nil { return x.Token } @@ -1162,7 +1049,7 @@ type GetDecisionByTokenResponse struct { func (x *GetDecisionByTokenResponse) Reset() { *x = GetDecisionByTokenResponse{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[15] + mi := &file_authorization_v2_authorization_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1175,7 +1062,7 @@ func (x *GetDecisionByTokenResponse) String() string { func (*GetDecisionByTokenResponse) ProtoMessage() {} func (x *GetDecisionByTokenResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[15] + mi := &file_authorization_v2_authorization_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1188,7 +1075,7 @@ func (x *GetDecisionByTokenResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDecisionByTokenResponse.ProtoReflect.Descriptor instead. func (*GetDecisionByTokenResponse) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{15} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{13} } func (x *GetDecisionByTokenResponse) GetDecisionResponse() *GetDecisionResponse { @@ -1207,7 +1094,7 @@ type GetDecisionByTokenMultiResourceRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Token *Token `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` + Token *authorization.Token `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` // name on action is required Action *policy.Action `protobuf:"bytes,2,opt,name=action,proto3" json:"action,omitempty"` Resources []*Resource `protobuf:"bytes,3,rep,name=resources,proto3" json:"resources,omitempty"` @@ -1216,7 +1103,7 @@ type GetDecisionByTokenMultiResourceRequest struct { func (x *GetDecisionByTokenMultiResourceRequest) Reset() { *x = GetDecisionByTokenMultiResourceRequest{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[16] + mi := &file_authorization_v2_authorization_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1229,7 +1116,7 @@ func (x *GetDecisionByTokenMultiResourceRequest) String() string { func (*GetDecisionByTokenMultiResourceRequest) ProtoMessage() {} func (x *GetDecisionByTokenMultiResourceRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[16] + mi := &file_authorization_v2_authorization_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1242,10 +1129,10 @@ func (x *GetDecisionByTokenMultiResourceRequest) ProtoReflect() protoreflect.Mes // Deprecated: Use GetDecisionByTokenMultiResourceRequest.ProtoReflect.Descriptor instead. func (*GetDecisionByTokenMultiResourceRequest) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{16} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{14} } -func (x *GetDecisionByTokenMultiResourceRequest) GetToken() *Token { +func (x *GetDecisionByTokenMultiResourceRequest) GetToken() *authorization.Token { if x != nil { return x.Token } @@ -1281,7 +1168,7 @@ type GetDecisionByTokenMultiResourceResponse struct { func (x *GetDecisionByTokenMultiResourceResponse) Reset() { *x = GetDecisionByTokenMultiResourceResponse{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[17] + mi := &file_authorization_v2_authorization_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1294,7 +1181,7 @@ func (x *GetDecisionByTokenMultiResourceResponse) String() string { func (*GetDecisionByTokenMultiResourceResponse) ProtoMessage() {} func (x *GetDecisionByTokenMultiResourceResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[17] + mi := &file_authorization_v2_authorization_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1307,7 +1194,7 @@ func (x *GetDecisionByTokenMultiResourceResponse) ProtoReflect() protoreflect.Me // Deprecated: Use GetDecisionByTokenMultiResourceResponse.ProtoReflect.Descriptor instead. func (*GetDecisionByTokenMultiResourceResponse) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{17} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{15} } func (x *GetDecisionByTokenMultiResourceResponse) GetAction() *policy.Action { @@ -1342,7 +1229,7 @@ type EntityEntitlements_ActionsList struct { func (x *EntityEntitlements_ActionsList) Reset() { *x = EntityEntitlements_ActionsList{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[18] + mi := &file_authorization_v2_authorization_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1355,7 +1242,7 @@ func (x *EntityEntitlements_ActionsList) String() string { func (*EntityEntitlements_ActionsList) ProtoMessage() {} func (x *EntityEntitlements_ActionsList) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[18] + mi := &file_authorization_v2_authorization_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1368,7 +1255,7 @@ func (x *EntityEntitlements_ActionsList) ProtoReflect() protoreflect.Message { // Deprecated: Use EntityEntitlements_ActionsList.ProtoReflect.Descriptor instead. func (*EntityEntitlements_ActionsList) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{3, 0} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{1, 0} } func (x *EntityEntitlements_ActionsList) GetActions() []*policy.Action { @@ -1389,7 +1276,7 @@ type Resource_AttributeValues struct { func (x *Resource_AttributeValues) Reset() { *x = Resource_AttributeValues{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[20] + mi := &file_authorization_v2_authorization_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1402,7 +1289,7 @@ func (x *Resource_AttributeValues) String() string { func (*Resource_AttributeValues) ProtoMessage() {} func (x *Resource_AttributeValues) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[20] + mi := &file_authorization_v2_authorization_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1415,7 +1302,7 @@ func (x *Resource_AttributeValues) ProtoReflect() protoreflect.Message { // Deprecated: Use Resource_AttributeValues.ProtoReflect.Descriptor instead. func (*Resource_AttributeValues) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{4, 0} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{2, 0} } func (x *Resource_AttributeValues) GetFqns() []string { @@ -1431,333 +1318,323 @@ var file_authorization_v2_authorization_proto_rawDesc = []byte{ 0x0a, 0x24, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x14, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x44, 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, - 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, - 0x49, 0x64, 0x12, 0x18, 0x0a, 0x03, 0x6a, 0x77, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x03, 0x6a, 0x77, 0x74, 0x22, 0xa9, 0x03, 0x0a, - 0x06, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, - 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, - 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0d, 0x65, 0x6d, - 0x61, 0x69, 0x6c, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x48, 0x00, 0x52, 0x0c, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x12, 0x1d, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, - 0x12, 0x2e, 0x0a, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x48, 0x00, 0x52, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, - 0x12, 0x1d, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, - 0x43, 0x0a, 0x1d, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x1a, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, - 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x46, 0x71, 0x6e, 0x12, 0x3d, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x2e, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, - 0x6f, 0x72, 0x79, 0x22, 0x54, 0x0a, 0x08, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, - 0x18, 0x0a, 0x14, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, - 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x41, 0x54, - 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x53, 0x55, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x01, 0x12, - 0x18, 0x0a, 0x14, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x45, 0x4e, 0x56, 0x49, - 0x52, 0x4f, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x42, 0x0d, 0x0a, 0x0b, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x73, 0x0a, 0x0b, 0x45, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, - 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, - 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x41, 0x0a, 0x08, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x92, 0x01, - 0x02, 0x08, 0x01, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0x81, 0x03, - 0x0a, 0x12, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x1a, 0x21, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x62, 0x75, 0x66, + 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2f, 0x6f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa9, 0x03, 0x0a, 0x06, 0x45, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, - 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x8b, 0x01, 0x0a, 0x1f, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x45, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, - 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, - 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x46, 0x71, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x1b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x46, 0x71, 0x6e, 0x1a, 0x37, 0x0a, 0x0b, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x80, - 0x01, 0x0a, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x46, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, - 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x22, 0xfe, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x21, - 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, - 0x64, 0x12, 0x57, 0x0a, 0x10, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x48, 0x00, 0x52, 0x0f, 0x61, 0x74, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x43, 0x0a, 0x1d, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x48, 0x00, 0x52, 0x1a, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x1a, - 0x25, 0x0a, 0x0f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x04, 0x66, 0x71, 0x6e, 0x73, 0x42, 0x0a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x22, 0x7e, 0x0a, 0x10, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x0a, 0x15, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, - 0x72, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x08, 0x64, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, - 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x22, 0xaa, 0x02, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x06, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0d, 0x65, 0x6d, 0x61, 0x69, 0x6c, + 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, + 0x52, 0x0c, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1d, + 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x48, 0x00, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, + 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x41, 0x6e, 0x79, 0x48, 0x00, 0x52, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x12, 0x1d, 0x0a, + 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x48, 0x00, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x1d, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x1a, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, + 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, + 0x6e, 0x12, 0x3d, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x43, 0x61, + 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, + 0x22, 0x54, 0x0a, 0x08, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x18, 0x0a, 0x14, + 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, + 0x52, 0x59, 0x5f, 0x53, 0x55, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, + 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x45, 0x4e, 0x56, 0x49, 0x52, 0x4f, 0x4e, + 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x42, 0x0d, 0x0a, 0x0b, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x81, 0x03, 0x0a, 0x12, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x21, 0x0a, 0x0c, + 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, + 0x8b, 0x01, 0x0a, 0x1f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, + 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, + 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, - 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x2e, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, + 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x1b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x1a, 0x37, 0x0a, + 0x0b, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x07, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, + 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x80, 0x01, 0x0a, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x46, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xfe, 0x01, 0x0a, 0x08, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, + 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, + 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x57, 0x0a, 0x10, 0x61, 0x74, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, + 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x48, + 0x00, 0x52, 0x0f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x73, 0x12, 0x43, 0x0a, 0x1d, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, + 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, + 0x66, 0x71, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x1a, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x1a, 0x25, 0x0a, 0x0f, 0x41, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, + 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, 0x6e, 0x73, 0x42, 0x0a, + 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x7e, 0x0a, 0x10, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x32, + 0x0a, 0x15, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x65, + 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x49, 0x64, 0x12, 0x36, 0x0a, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xa7, 0x02, 0x0a, 0x12, 0x47, + 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x3a, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x06, 0xba, + 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x2e, 0x0a, + 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, + 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x06, 0xba, + 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x0a, + 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x06, 0xba, 0x48, 0x03, + 0xc8, 0x01, 0x01, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3a, 0x65, 0xba, + 0x48, 0x62, 0x1a, 0x60, 0x0a, 0x29, 0x67, 0x65, 0x74, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, + 0x1c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75, 0x73, + 0x74, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x15, 0x68, + 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, + 0x61, 0x6d, 0x65, 0x29, 0x22, 0xec, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x19, + 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x16, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x15, 0x65, 0x70, 0x68, 0x65, 0x6d, + 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, + 0x6c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x06, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, + 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x0a, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x22, 0xc1, 0x02, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, + 0x61, 0x69, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x12, 0x2e, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, + 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x3a, 0x6b, 0xba, 0x48, 0x68, 0x1a, + 0x66, 0x0a, 0x2f, 0x67, 0x65, 0x74, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, + 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, + 0x65, 0x64, 0x12, 0x1c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, + 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, + 0x1a, 0x15, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x22, 0x99, 0x02, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x44, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x19, + 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x16, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x3f, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, + 0x12, 0x51, 0x0a, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x52, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x22, 0x78, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5e, 0x0a, + 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x10, 0x64, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, 0x7c, 0x0a, + 0x17, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22, 0xc3, 0x01, 0x0a, 0x16, + 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, + 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, + 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x1c, 0x77, 0x69, 0x74, + 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, + 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, + 0x00, 0x52, 0x1a, 0x77, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, + 0x73, 0x69, 0x76, 0x65, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x88, 0x01, 0x01, + 0x42, 0x1f, 0x0a, 0x1d, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, + 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, + 0x79, 0x22, 0x63, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0c, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, + 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xa8, 0x02, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x44, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, + 0x01, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2e, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x08, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3a, 0x65, 0xba, 0x48, 0x62, 0x1a, 0x60, 0x0a, - 0x29, 0x67, 0x65, 0x74, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x1c, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, - 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x15, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, - 0x69, 0x73, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x22, - 0xec, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x65, 0x70, 0x68, 0x65, 0x6d, - 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x65, 0x70, 0x68, 0x65, - 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, - 0x49, 0x64, 0x12, 0x32, 0x0a, 0x15, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x13, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3e, - 0x0a, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xc4, - 0x02, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, - 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, - 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x12, 0x2e, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x45, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x3a, 0x6b, 0xba, 0x48, 0x68, 0x1a, 0x66, 0x0a, - 0x2f, 0x67, 0x65, 0x74, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x75, - 0x6c, 0x74, 0x69, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, - 0x12, 0x1c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75, - 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x15, - 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x22, 0x99, 0x02, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x65, 0x70, - 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, - 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x65, - 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, - 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, - 0x0d, 0x61, 0x6c, 0x6c, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x12, 0x51, - 0x0a, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x11, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x22, 0x78, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5e, 0x0a, 0x11, 0x64, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, 0x7c, 0x0a, 0x17, 0x47, - 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22, 0xc3, 0x01, 0x0a, 0x16, 0x47, 0x65, - 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x08, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x1c, 0x77, 0x69, 0x74, 0x68, 0x5f, - 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, - 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, - 0x1a, 0x77, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, - 0x76, 0x65, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x88, 0x01, 0x01, 0x42, 0x1f, - 0x0a, 0x1d, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, - 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x22, - 0x63, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0c, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x22, 0xab, 0x02, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x35, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, - 0x01, 0x01, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2e, 0x0a, 0x06, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, - 0x01, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x0a, 0x08, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, - 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3a, 0x67, 0xba, 0x48, 0x64, 0x1a, 0x62, - 0x0a, 0x2b, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x1c, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, - 0x62, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x15, 0x68, 0x61, 0x73, - 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, - 0x65, 0x29, 0x22, 0x70, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x52, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x61, 0x75, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3a, 0x67, 0xba, 0x48, 0x64, 0x1a, 0x62, 0x0a, + 0x2b, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x1c, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, + 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x15, 0x68, 0x61, 0x73, 0x28, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, + 0x29, 0x22, 0x70, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x52, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, + 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0xcb, 0x02, 0x0a, 0x26, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, + 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x05, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x12, 0x2e, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x3a, 0x76, 0xba, 0x48, 0x73, 0x1a, 0x71, + 0x0a, 0x3a, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x1c, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, + 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x15, 0x68, 0x61, 0x73, 0x28, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, + 0x29, 0x22, 0xe5, 0x01, 0x0a, 0x27, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, + 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, + 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x5f, 0x70, 0x65, 0x72, + 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, + 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x50, 0x65, 0x72, + 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x12, 0x51, 0x0a, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2a, 0x4c, 0x0a, 0x08, 0x44, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x14, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, + 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, + 0x11, 0x0a, 0x0d, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4e, 0x59, + 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x50, + 0x45, 0x52, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x32, 0xdc, 0x05, 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x12, 0x5c, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, + 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x83, + 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, + 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x31, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, - 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0xce, 0x02, 0x0a, 0x26, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x35, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, + 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, - 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2e, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x92, 0x01, 0x02, - 0x08, 0x01, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x3a, 0x76, 0xba, - 0x48, 0x73, 0x1a, 0x71, 0x0a, 0x3a, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x64, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, - 0x12, 0x1c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75, - 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x15, - 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x22, 0xe5, 0x01, 0x0a, 0x27, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4d, 0x75, 0x6c, 0x74, - 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, - 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x61, 0x6c, - 0x6c, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x12, 0x51, 0x0a, 0x12, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2a, 0x4c, 0x0a, - 0x08, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x14, 0x44, 0x45, 0x43, - 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, - 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, - 0x44, 0x45, 0x4e, 0x59, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, - 0x4f, 0x4e, 0x5f, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x32, 0xdc, 0x05, 0x0a, 0x14, - 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x12, 0x5c, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, - 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x83, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, - 0x31, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, - 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x44, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x12, 0x28, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, - 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x71, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2b, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, + 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x12, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x71, + 0x0a, 0x12, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2b, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2c, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x12, 0x98, 0x01, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x38, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x98, 0x01, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4d, 0x75, 0x6c, 0x74, - 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x38, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x39, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x0f, + 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, + 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, - 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4d, - 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x68, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x12, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xd5, 0x01, 0x0a, 0x14, 0x63, - 0x6f, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x32, 0x42, 0x12, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x48, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, - 0x67, 0x6f, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2f, 0x76, 0x32, 0x3b, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x76, 0x32, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x10, 0x41, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0xe2, - 0x02, 0x1c, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, - 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, - 0x11, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, - 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xd5, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x42, + 0x12, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x48, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, 0x6f, 0x2f, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x3b, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x32, 0xa2, + 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x1c, 0x41, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0x5c, 0x47, + 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x41, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1773,86 +1650,85 @@ func file_authorization_v2_authorization_proto_rawDescGZIP() []byte { } var file_authorization_v2_authorization_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_authorization_v2_authorization_proto_msgTypes = make([]protoimpl.MessageInfo, 21) +var file_authorization_v2_authorization_proto_msgTypes = make([]protoimpl.MessageInfo, 19) var file_authorization_v2_authorization_proto_goTypes = []interface{}{ (Decision)(0), // 0: authorization.v2.Decision (Entity_Category)(0), // 1: authorization.v2.Entity.Category - (*Token)(nil), // 2: authorization.v2.Token - (*Entity)(nil), // 3: authorization.v2.Entity - (*EntityChain)(nil), // 4: authorization.v2.EntityChain - (*EntityEntitlements)(nil), // 5: authorization.v2.EntityEntitlements - (*Resource)(nil), // 6: authorization.v2.Resource - (*ResourceDecision)(nil), // 7: authorization.v2.ResourceDecision - (*GetDecisionRequest)(nil), // 8: authorization.v2.GetDecisionRequest - (*GetDecisionResponse)(nil), // 9: authorization.v2.GetDecisionResponse - (*GetDecisionMultiResourceRequest)(nil), // 10: authorization.v2.GetDecisionMultiResourceRequest - (*GetDecisionMultiResourceResponse)(nil), // 11: authorization.v2.GetDecisionMultiResourceResponse - (*GetDecisionBulkRequest)(nil), // 12: authorization.v2.GetDecisionBulkRequest - (*GetDecisionBulkResponse)(nil), // 13: authorization.v2.GetDecisionBulkResponse - (*GetEntitlementsRequest)(nil), // 14: authorization.v2.GetEntitlementsRequest - (*GetEntitlementsResponse)(nil), // 15: authorization.v2.GetEntitlementsResponse - (*GetDecisionByTokenRequest)(nil), // 16: authorization.v2.GetDecisionByTokenRequest - (*GetDecisionByTokenResponse)(nil), // 17: authorization.v2.GetDecisionByTokenResponse - (*GetDecisionByTokenMultiResourceRequest)(nil), // 18: authorization.v2.GetDecisionByTokenMultiResourceRequest - (*GetDecisionByTokenMultiResourceResponse)(nil), // 19: authorization.v2.GetDecisionByTokenMultiResourceResponse - (*EntityEntitlements_ActionsList)(nil), // 20: authorization.v2.EntityEntitlements.ActionsList - nil, // 21: authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry - (*Resource_AttributeValues)(nil), // 22: authorization.v2.Resource.AttributeValues - (*anypb.Any)(nil), // 23: google.protobuf.Any - (*policy.Action)(nil), // 24: policy.Action - (*wrapperspb.BoolValue)(nil), // 25: google.protobuf.BoolValue + (*Entity)(nil), // 2: authorization.v2.Entity + (*EntityEntitlements)(nil), // 3: authorization.v2.EntityEntitlements + (*Resource)(nil), // 4: authorization.v2.Resource + (*ResourceDecision)(nil), // 5: authorization.v2.ResourceDecision + (*GetDecisionRequest)(nil), // 6: authorization.v2.GetDecisionRequest + (*GetDecisionResponse)(nil), // 7: authorization.v2.GetDecisionResponse + (*GetDecisionMultiResourceRequest)(nil), // 8: authorization.v2.GetDecisionMultiResourceRequest + (*GetDecisionMultiResourceResponse)(nil), // 9: authorization.v2.GetDecisionMultiResourceResponse + (*GetDecisionBulkRequest)(nil), // 10: authorization.v2.GetDecisionBulkRequest + (*GetDecisionBulkResponse)(nil), // 11: authorization.v2.GetDecisionBulkResponse + (*GetEntitlementsRequest)(nil), // 12: authorization.v2.GetEntitlementsRequest + (*GetEntitlementsResponse)(nil), // 13: authorization.v2.GetEntitlementsResponse + (*GetDecisionByTokenRequest)(nil), // 14: authorization.v2.GetDecisionByTokenRequest + (*GetDecisionByTokenResponse)(nil), // 15: authorization.v2.GetDecisionByTokenResponse + (*GetDecisionByTokenMultiResourceRequest)(nil), // 16: authorization.v2.GetDecisionByTokenMultiResourceRequest + (*GetDecisionByTokenMultiResourceResponse)(nil), // 17: authorization.v2.GetDecisionByTokenMultiResourceResponse + (*EntityEntitlements_ActionsList)(nil), // 18: authorization.v2.EntityEntitlements.ActionsList + nil, // 19: authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry + (*Resource_AttributeValues)(nil), // 20: authorization.v2.Resource.AttributeValues + (*anypb.Any)(nil), // 21: google.protobuf.Any + (*authorization.EntityChain)(nil), // 22: authorization.EntityChain + (*policy.Action)(nil), // 23: policy.Action + (*wrapperspb.BoolValue)(nil), // 24: google.protobuf.BoolValue + (*authorization.Token)(nil), // 25: authorization.Token } var file_authorization_v2_authorization_proto_depIdxs = []int32{ - 23, // 0: authorization.v2.Entity.claims:type_name -> google.protobuf.Any + 21, // 0: authorization.v2.Entity.claims:type_name -> google.protobuf.Any 1, // 1: authorization.v2.Entity.category:type_name -> authorization.v2.Entity.Category - 3, // 2: authorization.v2.EntityChain.entities:type_name -> authorization.v2.Entity - 21, // 3: authorization.v2.EntityEntitlements.actions_per_attribute_value_fqn:type_name -> authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry - 22, // 4: authorization.v2.Resource.attribute_values:type_name -> authorization.v2.Resource.AttributeValues - 0, // 5: authorization.v2.ResourceDecision.decision:type_name -> authorization.v2.Decision - 4, // 6: authorization.v2.GetDecisionRequest.entity:type_name -> authorization.v2.EntityChain - 24, // 7: authorization.v2.GetDecisionRequest.action:type_name -> policy.Action - 6, // 8: authorization.v2.GetDecisionRequest.resource:type_name -> authorization.v2.Resource - 24, // 9: authorization.v2.GetDecisionResponse.action:type_name -> policy.Action - 7, // 10: authorization.v2.GetDecisionResponse.decision:type_name -> authorization.v2.ResourceDecision - 4, // 11: authorization.v2.GetDecisionMultiResourceRequest.entity:type_name -> authorization.v2.EntityChain - 24, // 12: authorization.v2.GetDecisionMultiResourceRequest.action:type_name -> policy.Action - 6, // 13: authorization.v2.GetDecisionMultiResourceRequest.resources:type_name -> authorization.v2.Resource - 24, // 14: authorization.v2.GetDecisionMultiResourceResponse.action:type_name -> policy.Action - 25, // 15: authorization.v2.GetDecisionMultiResourceResponse.all_permitted:type_name -> google.protobuf.BoolValue - 7, // 16: authorization.v2.GetDecisionMultiResourceResponse.resource_decisions:type_name -> authorization.v2.ResourceDecision - 10, // 17: authorization.v2.GetDecisionBulkRequest.decision_requests:type_name -> authorization.v2.GetDecisionMultiResourceRequest - 11, // 18: authorization.v2.GetDecisionBulkResponse.decision_responses:type_name -> authorization.v2.GetDecisionMultiResourceResponse - 3, // 19: authorization.v2.GetEntitlementsRequest.entities:type_name -> authorization.v2.Entity - 5, // 20: authorization.v2.GetEntitlementsResponse.entitlements:type_name -> authorization.v2.EntityEntitlements - 2, // 21: authorization.v2.GetDecisionByTokenRequest.token:type_name -> authorization.v2.Token - 24, // 22: authorization.v2.GetDecisionByTokenRequest.action:type_name -> policy.Action - 6, // 23: authorization.v2.GetDecisionByTokenRequest.resource:type_name -> authorization.v2.Resource - 9, // 24: authorization.v2.GetDecisionByTokenResponse.decision_response:type_name -> authorization.v2.GetDecisionResponse - 2, // 25: authorization.v2.GetDecisionByTokenMultiResourceRequest.token:type_name -> authorization.v2.Token - 24, // 26: authorization.v2.GetDecisionByTokenMultiResourceRequest.action:type_name -> policy.Action - 6, // 27: authorization.v2.GetDecisionByTokenMultiResourceRequest.resources:type_name -> authorization.v2.Resource - 24, // 28: authorization.v2.GetDecisionByTokenMultiResourceResponse.action:type_name -> policy.Action - 25, // 29: authorization.v2.GetDecisionByTokenMultiResourceResponse.all_permitted:type_name -> google.protobuf.BoolValue - 7, // 30: authorization.v2.GetDecisionByTokenMultiResourceResponse.resource_decisions:type_name -> authorization.v2.ResourceDecision - 24, // 31: authorization.v2.EntityEntitlements.ActionsList.actions:type_name -> policy.Action - 20, // 32: authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry.value:type_name -> authorization.v2.EntityEntitlements.ActionsList - 8, // 33: authorization.v2.AuthorizationService.GetDecision:input_type -> authorization.v2.GetDecisionRequest - 10, // 34: authorization.v2.AuthorizationService.GetDecisionMultiResource:input_type -> authorization.v2.GetDecisionMultiResourceRequest - 12, // 35: authorization.v2.AuthorizationService.GetDecisionBulk:input_type -> authorization.v2.GetDecisionBulkRequest - 16, // 36: authorization.v2.AuthorizationService.GetDecisionByToken:input_type -> authorization.v2.GetDecisionByTokenRequest - 18, // 37: authorization.v2.AuthorizationService.GetDecisionByTokenMultiResource:input_type -> authorization.v2.GetDecisionByTokenMultiResourceRequest - 14, // 38: authorization.v2.AuthorizationService.GetEntitlements:input_type -> authorization.v2.GetEntitlementsRequest - 9, // 39: authorization.v2.AuthorizationService.GetDecision:output_type -> authorization.v2.GetDecisionResponse - 11, // 40: authorization.v2.AuthorizationService.GetDecisionMultiResource:output_type -> authorization.v2.GetDecisionMultiResourceResponse - 13, // 41: authorization.v2.AuthorizationService.GetDecisionBulk:output_type -> authorization.v2.GetDecisionBulkResponse - 17, // 42: authorization.v2.AuthorizationService.GetDecisionByToken:output_type -> authorization.v2.GetDecisionByTokenResponse - 19, // 43: authorization.v2.AuthorizationService.GetDecisionByTokenMultiResource:output_type -> authorization.v2.GetDecisionByTokenMultiResourceResponse - 15, // 44: authorization.v2.AuthorizationService.GetEntitlements:output_type -> authorization.v2.GetEntitlementsResponse - 39, // [39:45] is the sub-list for method output_type - 33, // [33:39] is the sub-list for method input_type - 33, // [33:33] is the sub-list for extension type_name - 33, // [33:33] is the sub-list for extension extendee - 0, // [0:33] is the sub-list for field type_name + 19, // 2: authorization.v2.EntityEntitlements.actions_per_attribute_value_fqn:type_name -> authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry + 20, // 3: authorization.v2.Resource.attribute_values:type_name -> authorization.v2.Resource.AttributeValues + 0, // 4: authorization.v2.ResourceDecision.decision:type_name -> authorization.v2.Decision + 22, // 5: authorization.v2.GetDecisionRequest.entity:type_name -> authorization.EntityChain + 23, // 6: authorization.v2.GetDecisionRequest.action:type_name -> policy.Action + 4, // 7: authorization.v2.GetDecisionRequest.resource:type_name -> authorization.v2.Resource + 23, // 8: authorization.v2.GetDecisionResponse.action:type_name -> policy.Action + 5, // 9: authorization.v2.GetDecisionResponse.decision:type_name -> authorization.v2.ResourceDecision + 22, // 10: authorization.v2.GetDecisionMultiResourceRequest.entity:type_name -> authorization.EntityChain + 23, // 11: authorization.v2.GetDecisionMultiResourceRequest.action:type_name -> policy.Action + 4, // 12: authorization.v2.GetDecisionMultiResourceRequest.resources:type_name -> authorization.v2.Resource + 23, // 13: authorization.v2.GetDecisionMultiResourceResponse.action:type_name -> policy.Action + 24, // 14: authorization.v2.GetDecisionMultiResourceResponse.all_permitted:type_name -> google.protobuf.BoolValue + 5, // 15: authorization.v2.GetDecisionMultiResourceResponse.resource_decisions:type_name -> authorization.v2.ResourceDecision + 8, // 16: authorization.v2.GetDecisionBulkRequest.decision_requests:type_name -> authorization.v2.GetDecisionMultiResourceRequest + 9, // 17: authorization.v2.GetDecisionBulkResponse.decision_responses:type_name -> authorization.v2.GetDecisionMultiResourceResponse + 2, // 18: authorization.v2.GetEntitlementsRequest.entities:type_name -> authorization.v2.Entity + 3, // 19: authorization.v2.GetEntitlementsResponse.entitlements:type_name -> authorization.v2.EntityEntitlements + 25, // 20: authorization.v2.GetDecisionByTokenRequest.token:type_name -> authorization.Token + 23, // 21: authorization.v2.GetDecisionByTokenRequest.action:type_name -> policy.Action + 4, // 22: authorization.v2.GetDecisionByTokenRequest.resource:type_name -> authorization.v2.Resource + 7, // 23: authorization.v2.GetDecisionByTokenResponse.decision_response:type_name -> authorization.v2.GetDecisionResponse + 25, // 24: authorization.v2.GetDecisionByTokenMultiResourceRequest.token:type_name -> authorization.Token + 23, // 25: authorization.v2.GetDecisionByTokenMultiResourceRequest.action:type_name -> policy.Action + 4, // 26: authorization.v2.GetDecisionByTokenMultiResourceRequest.resources:type_name -> authorization.v2.Resource + 23, // 27: authorization.v2.GetDecisionByTokenMultiResourceResponse.action:type_name -> policy.Action + 24, // 28: authorization.v2.GetDecisionByTokenMultiResourceResponse.all_permitted:type_name -> google.protobuf.BoolValue + 5, // 29: authorization.v2.GetDecisionByTokenMultiResourceResponse.resource_decisions:type_name -> authorization.v2.ResourceDecision + 23, // 30: authorization.v2.EntityEntitlements.ActionsList.actions:type_name -> policy.Action + 18, // 31: authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry.value:type_name -> authorization.v2.EntityEntitlements.ActionsList + 6, // 32: authorization.v2.AuthorizationService.GetDecision:input_type -> authorization.v2.GetDecisionRequest + 8, // 33: authorization.v2.AuthorizationService.GetDecisionMultiResource:input_type -> authorization.v2.GetDecisionMultiResourceRequest + 10, // 34: authorization.v2.AuthorizationService.GetDecisionBulk:input_type -> authorization.v2.GetDecisionBulkRequest + 14, // 35: authorization.v2.AuthorizationService.GetDecisionByToken:input_type -> authorization.v2.GetDecisionByTokenRequest + 16, // 36: authorization.v2.AuthorizationService.GetDecisionByTokenMultiResource:input_type -> authorization.v2.GetDecisionByTokenMultiResourceRequest + 12, // 37: authorization.v2.AuthorizationService.GetEntitlements:input_type -> authorization.v2.GetEntitlementsRequest + 7, // 38: authorization.v2.AuthorizationService.GetDecision:output_type -> authorization.v2.GetDecisionResponse + 9, // 39: authorization.v2.AuthorizationService.GetDecisionMultiResource:output_type -> authorization.v2.GetDecisionMultiResourceResponse + 11, // 40: authorization.v2.AuthorizationService.GetDecisionBulk:output_type -> authorization.v2.GetDecisionBulkResponse + 15, // 41: authorization.v2.AuthorizationService.GetDecisionByToken:output_type -> authorization.v2.GetDecisionByTokenResponse + 17, // 42: authorization.v2.AuthorizationService.GetDecisionByTokenMultiResource:output_type -> authorization.v2.GetDecisionByTokenMultiResourceResponse + 13, // 43: authorization.v2.AuthorizationService.GetEntitlements:output_type -> authorization.v2.GetEntitlementsResponse + 38, // [38:44] is the sub-list for method output_type + 32, // [32:38] is the sub-list for method input_type + 32, // [32:32] is the sub-list for extension type_name + 32, // [32:32] is the sub-list for extension extendee + 0, // [0:32] is the sub-list for field type_name } func init() { file_authorization_v2_authorization_proto_init() } @@ -1862,18 +1738,6 @@ func file_authorization_v2_authorization_proto_init() { } if !protoimpl.UnsafeEnabled { file_authorization_v2_authorization_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Token); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_authorization_v2_authorization_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Entity); i { case 0: return &v.state @@ -1885,19 +1749,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EntityChain); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_authorization_v2_authorization_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EntityEntitlements); i { case 0: return &v.state @@ -1909,7 +1761,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Resource); i { case 0: return &v.state @@ -1921,7 +1773,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ResourceDecision); i { case 0: return &v.state @@ -1933,7 +1785,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetDecisionRequest); i { case 0: return &v.state @@ -1945,7 +1797,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetDecisionResponse); i { case 0: return &v.state @@ -1957,7 +1809,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetDecisionMultiResourceRequest); i { case 0: return &v.state @@ -1969,7 +1821,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetDecisionMultiResourceResponse); i { case 0: return &v.state @@ -1981,7 +1833,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetDecisionBulkRequest); i { case 0: return &v.state @@ -1993,7 +1845,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetDecisionBulkResponse); i { case 0: return &v.state @@ -2005,7 +1857,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetEntitlementsRequest); i { case 0: return &v.state @@ -2017,7 +1869,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetEntitlementsResponse); i { case 0: return &v.state @@ -2029,7 +1881,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetDecisionByTokenRequest); i { case 0: return &v.state @@ -2041,7 +1893,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetDecisionByTokenResponse); i { case 0: return &v.state @@ -2053,7 +1905,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetDecisionByTokenMultiResourceRequest); i { case 0: return &v.state @@ -2065,7 +1917,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetDecisionByTokenMultiResourceResponse); i { case 0: return &v.state @@ -2077,7 +1929,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EntityEntitlements_ActionsList); i { case 0: return &v.state @@ -2089,7 +1941,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Resource_AttributeValues); i { case 0: return &v.state @@ -2102,25 +1954,25 @@ func file_authorization_v2_authorization_proto_init() { } } } - file_authorization_v2_authorization_proto_msgTypes[1].OneofWrappers = []interface{}{ + file_authorization_v2_authorization_proto_msgTypes[0].OneofWrappers = []interface{}{ (*Entity_EmailAddress)(nil), (*Entity_UserName)(nil), (*Entity_Claims)(nil), (*Entity_ClientId)(nil), (*Entity_RegisteredResourceValueFqn)(nil), } - file_authorization_v2_authorization_proto_msgTypes[4].OneofWrappers = []interface{}{ + file_authorization_v2_authorization_proto_msgTypes[2].OneofWrappers = []interface{}{ (*Resource_AttributeValues_)(nil), (*Resource_RegisteredResourceValueFqn)(nil), } - file_authorization_v2_authorization_proto_msgTypes[12].OneofWrappers = []interface{}{} + file_authorization_v2_authorization_proto_msgTypes[10].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_authorization_v2_authorization_proto_rawDesc, NumEnums: 2, - NumMessages: 21, + NumMessages: 19, NumExtensions: 0, NumServices: 1, }, diff --git a/service/authorization/authorization.proto b/service/authorization/authorization.proto index 25537f3f76..6af0bb706f 100644 --- a/service/authorization/authorization.proto +++ b/service/authorization/authorization.proto @@ -2,13 +2,16 @@ syntax = "proto3"; package authorization; +import "buf/validate/validate.proto"; import "google/api/annotations.proto"; import "google/protobuf/any.proto"; import "policy/objects.proto"; message Token { - string id = 1; // ephemeral id for tracking between request and response - string jwt = 2; // the token + // ephemeral id for tracking between request and response + string id = 1; + // the token + string jwt = 2 [(buf.validate.field).required = true]; } // PE (Person Entity) or NPE (Non-Person Entity) @@ -40,8 +43,12 @@ message EntityCustom { // A set of related PE and NPE message EntityChain { - string id = 1; // ephemeral id for tracking between request and response - repeated Entity entities = 2; + // ephemeral id for tracking between request and response + string id = 1; + repeated Entity entities = 2 [ + (buf.validate.field).required = true, + (buf.validate.field).repeated = {min_items: 1} + ]; } /* diff --git a/service/authorization/v2/authorization.proto b/service/authorization/v2/authorization.proto index 6736538574..be339679f9 100644 --- a/service/authorization/v2/authorization.proto +++ b/service/authorization/v2/authorization.proto @@ -2,6 +2,7 @@ syntax = "proto3"; package authorization.v2; +import "authorization/authorization.proto"; import "buf/validate/validate.proto"; import "google/protobuf/any.proto"; import "google/protobuf/wrappers.proto"; @@ -14,13 +15,6 @@ enum Decision { // DECISION_OBLIGATED = 3; } -message Token { - // ephemeral id for tracking between request and response - string ephemeral_id = 1; - // access token - string jwt = 2 [(buf.validate.field).required = true]; -} - // PE (Person Entity) or NPE (Non-Person Entity) message Entity { // ephemeral id for tracking between request and response @@ -49,16 +43,6 @@ message Entity { // google.protobuf.Any extension = 1; // } -// A set of related PE and NPE (i.e. authenticating client and user) -message EntityChain { - // ephemeral id for tracking between request and response - string ephemeral_id = 1; - repeated Entity entities = 2 [ - (buf.validate.field).required = true, - (buf.validate.field).repeated = {min_items: 1} - ]; -} - // Entitlements for a given entity, mapping each attribute value FQN to any entitled actions[] message EntityEntitlements { message ActionsList { @@ -97,7 +81,7 @@ message ResourceDecision { // 2. one action // 3. one resource message GetDecisionRequest { - EntityChain entity = 1 [(buf.validate.field).required = true]; + authorization.EntityChain entity = 1 [(buf.validate.field).required = true]; // name on action is required policy.Action action = 2 [(buf.validate.field).required = true]; Resource resource = 3 [(buf.validate.field).required = true]; @@ -128,7 +112,7 @@ message GetDecisionResponse { // Note: this is a more performant bulk request for multiple resource decisions message GetDecisionMultiResourceRequest { // The entity chain must be defined - EntityChain entity = 1 [(buf.validate.field).required = true]; + authorization.EntityChain entity = 1 [(buf.validate.field).required = true]; // name on action is required policy.Action action = 2 [(buf.validate.field).required = true]; repeated Resource resources = 3 [ @@ -188,7 +172,7 @@ message GetEntitlementsResponse { // 2. one action // 3. one resource message GetDecisionByTokenRequest { - Token token = 1 [(buf.validate.field).required = true]; + authorization.Token token = 1 [(buf.validate.field).required = true]; // name on action is required policy.Action action = 2 [(buf.validate.field).required = true]; Resource resource = 3 [(buf.validate.field).required = true]; @@ -208,7 +192,7 @@ message GetDecisionByTokenResponse { // 2. one action // 3. multiple resource message GetDecisionByTokenMultiResourceRequest { - Token token = 1 [(buf.validate.field).required = true]; + authorization.Token token = 1 [(buf.validate.field).required = true]; // name on action is required policy.Action action = 2 [(buf.validate.field).required = true]; repeated Resource resources = 3 [ From 75b37bd584ebb53385493a50e0d418067ba293d8 Mon Sep 17 00:00:00 2001 From: jakedoublev Date: Tue, 13 May 2025 13:06:52 -0700 Subject: [PATCH 26/49] rm extraneous resource ID --- docs/grpc/index.html | 9 +- .../v2/authorization.swagger.json | 6 +- .../go/authorization/v2/authorization.pb.go | 412 +++++++++--------- service/authorization/v2/authorization.proto | 8 +- 4 files changed, 205 insertions(+), 230 deletions(-) diff --git a/docs/grpc/index.html b/docs/grpc/index.html index bfcbf2beac..ae664cd37f 100644 --- a/docs/grpc/index.html +++ b/docs/grpc/index.html @@ -4664,13 +4664,6 @@

      GetDecisionResponse

      ephemeral id for tracking between request and response

      - - ephemeral_resource_id - string - -

      ephemeral id for tracking between request and response

      - - action policy.Action @@ -4685,7 +4678,7 @@

      GetDecisionResponse

      the decision on the resource optional list of obligations represented in URI format -repeated string obligations = 5;

      +repeated string obligations = 4;

      diff --git a/docs/openapi/authorization/v2/authorization.swagger.json b/docs/openapi/authorization/v2/authorization.swagger.json index 32eaaf8059..977dad0677 100644 --- a/docs/openapi/authorization/v2/authorization.swagger.json +++ b/docs/openapi/authorization/v2/authorization.swagger.json @@ -381,17 +381,13 @@ "type": "string", "title": "ephemeral id for tracking between request and response" }, - "ephemeralResourceId": { - "type": "string", - "title": "ephemeral id for tracking between request and response" - }, "action": { "$ref": "#/definitions/policyAction", "title": "name on action is required" }, "decision": { "$ref": "#/definitions/v2ResourceDecision", - "description": "optional list of obligations represented in URI format\n repeated string obligations = 5;", + "description": "optional list of obligations represented in URI format\n repeated string obligations = 4;", "title": "the decision on the resource" } } diff --git a/protocol/go/authorization/v2/authorization.pb.go b/protocol/go/authorization/v2/authorization.pb.go index 1903c3ca93..266d5019d2 100644 --- a/protocol/go/authorization/v2/authorization.pb.go +++ b/protocol/go/authorization/v2/authorization.pb.go @@ -549,12 +549,10 @@ type GetDecisionResponse struct { // ephemeral id for tracking between request and response EphemeralEntityChainId string `protobuf:"bytes,1,opt,name=ephemeral_entity_chain_id,json=ephemeralEntityChainId,proto3" json:"ephemeral_entity_chain_id,omitempty"` - // ephemeral id for tracking between request and response - EphemeralResourceId string `protobuf:"bytes,2,opt,name=ephemeral_resource_id,json=ephemeralResourceId,proto3" json:"ephemeral_resource_id,omitempty"` // name on action is required - Action *policy.Action `protobuf:"bytes,3,opt,name=action,proto3" json:"action,omitempty"` + Action *policy.Action `protobuf:"bytes,2,opt,name=action,proto3" json:"action,omitempty"` // the decision on the resource - Decision *ResourceDecision `protobuf:"bytes,4,opt,name=decision,proto3" json:"decision,omitempty"` + Decision *ResourceDecision `protobuf:"bytes,3,opt,name=decision,proto3" json:"decision,omitempty"` } func (x *GetDecisionResponse) Reset() { @@ -596,13 +594,6 @@ func (x *GetDecisionResponse) GetEphemeralEntityChainId() string { return "" } -func (x *GetDecisionResponse) GetEphemeralResourceId() string { - if x != nil { - return x.EphemeralResourceId - } - return "" -} - func (x *GetDecisionResponse) GetAction() *policy.Action { if x != nil { return x.Action @@ -1421,220 +1412,217 @@ var file_authorization_v2_authorization_proto_rawDesc = []byte{ 0x1c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x15, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, - 0x61, 0x6d, 0x65, 0x29, 0x22, 0xec, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, + 0x61, 0x6d, 0x65, 0x29, 0x22, 0xb8, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x15, 0x65, 0x70, 0x68, 0x65, 0x6d, - 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, - 0x6c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x06, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x0a, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x22, 0xc1, 0x02, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, - 0x61, 0x69, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x12, 0x2e, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, - 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x3a, 0x6b, 0xba, 0x48, 0x68, 0x1a, - 0x66, 0x0a, 0x2f, 0x67, 0x65, 0x74, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, - 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, - 0x65, 0x64, 0x12, 0x1c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, - 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, - 0x1a, 0x15, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x22, 0x99, 0x02, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x44, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x19, - 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x16, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x3f, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, - 0x12, 0x51, 0x0a, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x22, 0x78, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5e, 0x0a, - 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x10, 0x64, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, 0x7c, 0x0a, - 0x17, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x3e, 0x0a, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, + 0xc1, 0x02, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, + 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, + 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, + 0x2e, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, + 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x45, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x0b, + 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x3a, 0x6b, 0xba, 0x48, 0x68, 0x1a, 0x66, 0x0a, 0x2f, 0x67, + 0x65, 0x74, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x75, 0x6c, 0x74, + 0x69, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x1c, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, + 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x15, 0x68, 0x61, + 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, + 0x6d, 0x65, 0x29, 0x22, 0x99, 0x02, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x65, 0x70, 0x68, 0x65, + 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x65, 0x70, 0x68, + 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, + 0x6e, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x0d, 0x61, + 0x6c, 0x6c, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, + 0x61, 0x6c, 0x6c, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x12, 0x51, 0x0a, 0x12, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, + 0x78, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, + 0x6c, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5e, 0x0a, 0x11, 0x64, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22, 0xc3, 0x01, 0x0a, 0x16, - 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, - 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, - 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x1c, 0x77, 0x69, 0x74, - 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, - 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, - 0x00, 0x52, 0x1a, 0x77, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, - 0x73, 0x69, 0x76, 0x65, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x88, 0x01, 0x01, - 0x42, 0x1f, 0x0a, 0x1d, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, - 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, - 0x79, 0x22, 0x63, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0c, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, - 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xa8, 0x02, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x44, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, - 0x01, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2e, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, - 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x08, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3a, 0x67, 0xba, 0x48, 0x64, 0x1a, 0x62, 0x0a, - 0x2b, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x1c, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, - 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x15, 0x68, 0x61, 0x73, 0x28, - 0x74, 0x68, 0x69, 0x73, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, - 0x29, 0x22, 0x70, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x52, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, - 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0xcb, 0x02, 0x0a, 0x26, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, - 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x05, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x12, 0x2e, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x3a, 0x76, 0xba, 0x48, 0x73, 0x1a, 0x71, - 0x0a, 0x3a, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x1c, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, - 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x15, 0x68, 0x61, 0x73, 0x28, - 0x74, 0x68, 0x69, 0x73, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, - 0x29, 0x22, 0xe5, 0x01, 0x0a, 0x27, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, - 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, - 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x5f, 0x70, 0x65, 0x72, - 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, - 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x50, 0x65, 0x72, - 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x12, 0x51, 0x0a, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2a, 0x4c, 0x0a, 0x08, 0x44, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x14, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, - 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, - 0x11, 0x0a, 0x0d, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4e, 0x59, - 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x50, - 0x45, 0x52, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x32, 0xdc, 0x05, 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x12, 0x5c, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, - 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x83, - 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, - 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x31, 0x2e, 0x61, 0x75, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, 0x7c, 0x0a, 0x17, 0x47, 0x65, 0x74, + 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x32, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, + 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22, 0xc3, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x45, + 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x41, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x42, 0x0b, + 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x08, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x1c, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, + 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, + 0x61, 0x72, 0x63, 0x68, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x1a, 0x77, + 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, + 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x88, 0x01, 0x01, 0x42, 0x1f, 0x0a, 0x1d, + 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, + 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x22, 0x63, 0x0a, + 0x17, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, + 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x22, 0xa8, 0x02, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x32, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x14, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x05, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2e, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x3a, 0x67, 0xba, 0x48, 0x64, 0x1a, 0x62, 0x0a, 0x2b, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, + 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x1c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x15, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x22, 0x70, 0x0a, + 0x1a, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x11, 0x64, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x10, 0x64, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0xcb, 0x02, 0x0a, 0x26, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, + 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x05, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x42, + 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2e, + 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, + 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x06, + 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, + 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x0b, 0xba, + 0x48, 0x08, 0xc8, 0x01, 0x01, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x3a, 0x76, 0xba, 0x48, 0x73, 0x1a, 0x71, 0x0a, 0x3a, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x75, 0x6c, + 0x74, 0x69, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, + 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x1c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x15, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x22, 0xe5, 0x01, + 0x0a, 0x27, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x3f, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, + 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, + 0x65, 0x64, 0x12, 0x51, 0x0a, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x64, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, + 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2a, 0x4c, 0x0a, 0x08, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x18, 0x0a, 0x14, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, + 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x44, + 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4e, 0x59, 0x10, 0x01, 0x12, 0x13, + 0x0a, 0x0f, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x45, 0x52, 0x4d, 0x49, + 0x54, 0x10, 0x02, 0x32, 0xdc, 0x05, 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5c, 0x0a, 0x0b, + 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, + 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x83, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, - 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, - 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x12, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x31, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x71, - 0x0a, 0x12, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2b, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2c, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, + 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x68, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, + 0x75, 0x6c, 0x6b, 0x12, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, + 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x71, 0x0a, 0x12, 0x47, 0x65, + 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x12, 0x2b, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, + 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, + 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x98, 0x01, + 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x12, 0x38, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x00, 0x12, 0x98, 0x01, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x38, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x39, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, - 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x0f, - 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, - 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xd5, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x42, - 0x12, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x48, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, 0x6f, 0x2f, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x3b, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x32, 0xa2, - 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x1c, 0x41, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0x5c, 0x47, - 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x41, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, + 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x45, + 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x28, 0x2e, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, + 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, + 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x42, 0xd5, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x42, 0x12, 0x41, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, + 0x01, 0x5a, 0x48, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, + 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, 0x6f, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x3b, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x32, 0xa2, 0x02, 0x03, 0x41, 0x58, + 0x58, 0xaa, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x1c, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( diff --git a/service/authorization/v2/authorization.proto b/service/authorization/v2/authorization.proto index be339679f9..6add3b4804 100644 --- a/service/authorization/v2/authorization.proto +++ b/service/authorization/v2/authorization.proto @@ -95,14 +95,12 @@ message GetDecisionRequest { message GetDecisionResponse { // ephemeral id for tracking between request and response string ephemeral_entity_chain_id = 1; - // ephemeral id for tracking between request and response - string ephemeral_resource_id = 2; // name on action is required - policy.Action action = 3; + policy.Action action = 2; // the decision on the resource - ResourceDecision decision = 4; + ResourceDecision decision = 3; // optional list of obligations represented in URI format - // repeated string obligations = 5; + // repeated string obligations = 4; } // Can the entity (PE or NPE) access? From d4444b80900145527b70cfda6307f7f5eb6885c1 Mon Sep 17 00:00:00 2001 From: jakedoublev Date: Tue, 13 May 2025 14:08:22 -0700 Subject: [PATCH 27/49] pare back responses, proto comments, better validation --- docs/grpc/index.html | 162 ++- .../authorization/authorization.swagger.json | 6 +- .../v2/authorization.swagger.json | 128 +-- .../go/authorization/authorization_grpc.pb.go | 12 +- .../authorization.connect.go | 12 +- .../go/authorization/v2/authorization.pb.go | 937 +++++++++++------- .../authorization/v2/authorization_grpc.pb.go | 37 + .../authorization.connect.go | 30 + .../entityresolution/entity_resolution.pb.go | 177 ++-- service/authorization/authorization.proto | 6 +- service/authorization/v2/authorization.proto | 67 +- .../entityresolution/entity_resolution.proto | 60 +- 12 files changed, 954 insertions(+), 680 deletions(-) diff --git a/docs/grpc/index.html b/docs/grpc/index.html index ae664cd37f..a049309cc9 100644 --- a/docs/grpc/index.html +++ b/docs/grpc/index.html @@ -447,6 +447,10 @@

      Table of Contents

      MEntity
    • +
    • + MEntityChain +
    • +
    • MEntityEntitlements
    • @@ -499,6 +503,14 @@

      Table of Contents

      MGetDecisionResponse +
    • + MGetEntitlementsByTokenRequest +
    • + +
    • + MGetEntitlementsByTokenResponse +
    • +
    • MGetEntitlementsRequest
    • @@ -4111,21 +4123,21 @@

      AuthorizationService

      GetDecisions GetDecisionsRequest GetDecisionsResponse -

      Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetMultiResourceDecision, GetBulkDecision)

      +

      Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetDecisionMultiResource, GetDecisionBulk)

      GetDecisionsByToken GetDecisionsByTokenRequest GetDecisionsByTokenResponse -

      Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetMultiResourceDecision)

      +

      Deprecated: Use AuthorizationV2 methods instead (GetDecisionByToken, GetDecisionByTokenMultiResource)

      GetEntitlements GetEntitlementsRequest GetEntitlementsResponse -

      Deprecated: Use AuthorizationV2 method instead (GetEntitlements)

      +

      Deprecated: Use AuthorizationV2 method instead (GetEntitlements, GetEntitlementsByToken)

      @@ -4254,6 +4266,37 @@

      Entity

      +

      EntityChain

      +

      A set of related PE and NPE

      + + + + + + + + + + + + + + + + + + + + + + + +
      FieldTypeLabelDescription
      ephemeral_chain_idstring

      ephemeral id for tracking between request and response

      entitiesEntityrepeated

      + + + + +

      EntityEntitlements

      Entitlements for a given entity, mapping each attribute value FQN to any entitled actions[]

      @@ -4436,13 +4479,6 @@

      GetDecisionByT - - action - policy.Action - -

      - - all_permitted google.protobuf.BoolValue @@ -4538,9 +4574,9 @@

      GetDecisionMultiResour entity - authorization.EntityChain + EntityChain -

      The entity chain must be defined

      +

      entity chain must be defined

      @@ -4574,20 +4610,6 @@

      GetDecisionMultiResou - - ephemeral_entity_chain_id - string - -

      ephemeral id for tracking between request and response

      - - - - action - policy.Action - -

      name on action is to be relied upon

      - - all_permitted google.protobuf.BoolValue @@ -4621,7 +4643,7 @@

      GetDecisionRequest

      entity - authorization.EntityChain + EntityChain

      @@ -4658,27 +4680,69 @@

      GetDecisionResponse

      - ephemeral_entity_chain_id - string + decision + ResourceDecision -

      ephemeral id for tracking between request and response

      +

      decision on the resource + +optional list of obligations represented in URI format +repeated string obligations = 2;

      + + + + + + + +

      GetEntitlementsByTokenRequest

      +

      What can the entity (PE or NPE, represented by the token) do, broken down as permitted actions on attribute value FQNs?

      + + + + + + + + - - + + - + - - - - + + + + + + +
      FieldTypeLabelDescription
      actionpolicy.Actiontokenauthorization.Token

      name on action is required

      decisionResourceDecision

      the decision on the resource +

      with_comprehensive_hierarchybooloptional

      optional parameter to return all entitled values for attribute definitions with hierarchy rules, propagating +down the hierarchical values instead of returning solely the value that is directly entitled

      -optional list of obligations represented in URI format -repeated string obligations = 4;

      + + + + +

      GetEntitlementsByTokenResponse

      +

      + + + + + + + + + + + + + @@ -4689,7 +4753,7 @@

      GetDecisionResponse

      GetEntitlementsRequest

      -

      What can the entity do, broken down as permitted actions on attribute value FQNs

      Note: the v1 API parameter 'scope' has been dropped, and it is recommended to use

      GetDecision if the resource is known

      +

      What can the entity (PE or NPE, represented by the entity chain) do, broken down as permitted actions on attribute value FQNs?

      Note: the v1 API parameter 'scope' has been dropped, and it is recommended to use

      GetDecision if the resource is known

      FieldTypeLabelDescription
      entitlementsEntityEntitlementsrepeated

      @@ -4699,11 +4763,10 @@

      GetEntitlementsRequest

      - - - - + + + + @@ -4828,7 +4891,7 @@

      ResourceDecision

      - + @@ -4952,6 +5015,13 @@

      AuthorizationService

      + + + + + + +
      entitiesEntityrepeated

      list of requested entities -todo: should this be an entity chain?

      entity_chainEntityChain

      decision Decision

      the decision result

      decision result

      GetEntitlementsByTokenGetEntitlementsByTokenRequestGetEntitlementsByTokenResponse

      diff --git a/docs/openapi/authorization/authorization.swagger.json b/docs/openapi/authorization/authorization.swagger.json index e6ba5e2aa6..c7176bf91d 100644 --- a/docs/openapi/authorization/authorization.swagger.json +++ b/docs/openapi/authorization/authorization.swagger.json @@ -18,7 +18,7 @@ "paths": { "/v1/authorization": { "post": { - "summary": "Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetMultiResourceDecision, GetBulkDecision)", + "summary": "Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetDecisionMultiResource, GetDecisionBulk)", "operationId": "AuthorizationService_GetDecisions", "responses": { "200": { @@ -51,7 +51,7 @@ }, "/v1/entitlements": { "post": { - "summary": "Deprecated: Use AuthorizationV2 method instead (GetEntitlements)", + "summary": "Deprecated: Use AuthorizationV2 method instead (GetEntitlements, GetEntitlementsByToken)", "operationId": "AuthorizationService_GetEntitlements", "responses": { "200": { @@ -85,7 +85,7 @@ }, "/v1/token/authorization": { "post": { - "summary": "Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetMultiResourceDecision)", + "summary": "Deprecated: Use AuthorizationV2 methods instead (GetDecisionByToken, GetDecisionByTokenMultiResource)", "operationId": "AuthorizationService_GetDecisionsByToken", "responses": { "200": { diff --git a/docs/openapi/authorization/v2/authorization.swagger.json b/docs/openapi/authorization/v2/authorization.swagger.json index 977dad0677..0e8996b403 100644 --- a/docs/openapi/authorization/v2/authorization.swagger.json +++ b/docs/openapi/authorization/v2/authorization.swagger.json @@ -50,76 +50,6 @@ } } }, - "authorizationEntity": { - "type": "object", - "properties": { - "id": { - "type": "string", - "title": "ephemeral id for tracking between request and response" - }, - "emailAddress": { - "type": "string", - "title": "one of the entity options must be set" - }, - "userName": { - "type": "string" - }, - "remoteClaimsUrl": { - "type": "string" - }, - "uuid": { - "type": "string" - }, - "claims": { - "$ref": "#/definitions/protobufAny" - }, - "custom": { - "$ref": "#/definitions/authorizationEntityCustom" - }, - "clientId": { - "type": "string" - }, - "category": { - "$ref": "#/definitions/authorizationEntityCategory" - } - }, - "title": "PE (Person Entity) or NPE (Non-Person Entity)" - }, - "authorizationEntityCategory": { - "type": "string", - "enum": [ - "CATEGORY_UNSPECIFIED", - "CATEGORY_SUBJECT", - "CATEGORY_ENVIRONMENT" - ], - "default": "CATEGORY_UNSPECIFIED" - }, - "authorizationEntityChain": { - "type": "object", - "properties": { - "id": { - "type": "string", - "title": "ephemeral id for tracking between request and response" - }, - "entities": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/authorizationEntity" - } - } - }, - "title": "A set of related PE and NPE" - }, - "authorizationEntityCustom": { - "type": "object", - "properties": { - "extension": { - "$ref": "#/definitions/protobufAny" - } - }, - "title": "Entity type for custom entities beyond the standard types" - }, "authorizationToken": { "type": "object", "properties": { @@ -183,6 +113,23 @@ ], "default": "CATEGORY_UNSPECIFIED" }, + "authorizationv2EntityChain": { + "type": "object", + "properties": { + "ephemeralChainId": { + "type": "string", + "title": "ephemeral id for tracking between request and response" + }, + "entities": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/authorizationv2Entity" + } + } + }, + "title": "A set of related PE and NPE" + }, "authorizationv2EntityEntitlements": { "type": "object", "properties": { @@ -303,9 +250,6 @@ "v2GetDecisionByTokenMultiResourceResponse": { "type": "object", "properties": { - "action": { - "$ref": "#/definitions/policyAction" - }, "allPermitted": { "type": "boolean", "title": "convenience flag indicating global resource decisions result (permit/deny)" @@ -332,8 +276,8 @@ "type": "object", "properties": { "entity": { - "$ref": "#/definitions/authorizationEntityChain", - "title": "The entity chain must be defined" + "$ref": "#/definitions/authorizationv2EntityChain", + "title": "entity chain must be defined" }, "action": { "$ref": "#/definitions/policyAction", @@ -352,14 +296,6 @@ "v2GetDecisionMultiResourceResponse": { "type": "object", "properties": { - "ephemeralEntityChainId": { - "type": "string", - "title": "ephemeral id for tracking between request and response" - }, - "action": { - "$ref": "#/definitions/policyAction", - "title": "name on action is to be relied upon" - }, "allPermitted": { "type": "boolean", "title": "convenience flag indicating global resource decisions result (permit/deny)" @@ -377,18 +313,22 @@ "v2GetDecisionResponse": { "type": "object", "properties": { - "ephemeralEntityChainId": { - "type": "string", - "title": "ephemeral id for tracking between request and response" - }, - "action": { - "$ref": "#/definitions/policyAction", - "title": "name on action is required" - }, "decision": { "$ref": "#/definitions/v2ResourceDecision", - "description": "optional list of obligations represented in URI format\n repeated string obligations = 4;", - "title": "the decision on the resource" + "description": "optional list of obligations represented in URI format\n repeated string obligations = 2;", + "title": "decision on the resource" + } + } + }, + "v2GetEntitlementsByTokenResponse": { + "type": "object", + "properties": { + "entitlements": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/authorizationv2EntityEntitlements" + } } } }, @@ -417,7 +357,7 @@ }, "decision": { "$ref": "#/definitions/authorizationv2Decision", - "title": "the decision result" + "title": "decision result" } } } diff --git a/protocol/go/authorization/authorization_grpc.pb.go b/protocol/go/authorization/authorization_grpc.pb.go index 9b0d1239c7..ddcb5506e6 100644 --- a/protocol/go/authorization/authorization_grpc.pb.go +++ b/protocol/go/authorization/authorization_grpc.pb.go @@ -28,11 +28,11 @@ const ( // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. type AuthorizationServiceClient interface { - // Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetMultiResourceDecision, GetBulkDecision) + // Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetDecisionMultiResource, GetDecisionBulk) GetDecisions(ctx context.Context, in *GetDecisionsRequest, opts ...grpc.CallOption) (*GetDecisionsResponse, error) - // Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetMultiResourceDecision) + // Deprecated: Use AuthorizationV2 methods instead (GetDecisionByToken, GetDecisionByTokenMultiResource) GetDecisionsByToken(ctx context.Context, in *GetDecisionsByTokenRequest, opts ...grpc.CallOption) (*GetDecisionsByTokenResponse, error) - // Deprecated: Use AuthorizationV2 method instead (GetEntitlements) + // Deprecated: Use AuthorizationV2 method instead (GetEntitlements, GetEntitlementsByToken) GetEntitlements(ctx context.Context, in *GetEntitlementsRequest, opts ...grpc.CallOption) (*GetEntitlementsResponse, error) } @@ -75,11 +75,11 @@ func (c *authorizationServiceClient) GetEntitlements(ctx context.Context, in *Ge // All implementations must embed UnimplementedAuthorizationServiceServer // for forward compatibility type AuthorizationServiceServer interface { - // Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetMultiResourceDecision, GetBulkDecision) + // Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetDecisionMultiResource, GetDecisionBulk) GetDecisions(context.Context, *GetDecisionsRequest) (*GetDecisionsResponse, error) - // Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetMultiResourceDecision) + // Deprecated: Use AuthorizationV2 methods instead (GetDecisionByToken, GetDecisionByTokenMultiResource) GetDecisionsByToken(context.Context, *GetDecisionsByTokenRequest) (*GetDecisionsByTokenResponse, error) - // Deprecated: Use AuthorizationV2 method instead (GetEntitlements) + // Deprecated: Use AuthorizationV2 method instead (GetEntitlements, GetEntitlementsByToken) GetEntitlements(context.Context, *GetEntitlementsRequest) (*GetEntitlementsResponse, error) mustEmbedUnimplementedAuthorizationServiceServer() } diff --git a/protocol/go/authorization/authorizationconnect/authorization.connect.go b/protocol/go/authorization/authorizationconnect/authorization.connect.go index 4282d343b4..71262ad008 100644 --- a/protocol/go/authorization/authorizationconnect/authorization.connect.go +++ b/protocol/go/authorization/authorizationconnect/authorization.connect.go @@ -54,11 +54,11 @@ var ( // AuthorizationServiceClient is a client for the authorization.AuthorizationService service. type AuthorizationServiceClient interface { - // Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetMultiResourceDecision, GetBulkDecision) + // Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetDecisionMultiResource, GetDecisionBulk) GetDecisions(context.Context, *connect.Request[authorization.GetDecisionsRequest]) (*connect.Response[authorization.GetDecisionsResponse], error) - // Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetMultiResourceDecision) + // Deprecated: Use AuthorizationV2 methods instead (GetDecisionByToken, GetDecisionByTokenMultiResource) GetDecisionsByToken(context.Context, *connect.Request[authorization.GetDecisionsByTokenRequest]) (*connect.Response[authorization.GetDecisionsByTokenResponse], error) - // Deprecated: Use AuthorizationV2 method instead (GetEntitlements) + // Deprecated: Use AuthorizationV2 method instead (GetEntitlements, GetEntitlementsByToken) GetEntitlements(context.Context, *connect.Request[authorization.GetEntitlementsRequest]) (*connect.Response[authorization.GetEntitlementsResponse], error) } @@ -118,11 +118,11 @@ func (c *authorizationServiceClient) GetEntitlements(ctx context.Context, req *c // AuthorizationServiceHandler is an implementation of the authorization.AuthorizationService // service. type AuthorizationServiceHandler interface { - // Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetMultiResourceDecision, GetBulkDecision) + // Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetDecisionMultiResource, GetDecisionBulk) GetDecisions(context.Context, *connect.Request[authorization.GetDecisionsRequest]) (*connect.Response[authorization.GetDecisionsResponse], error) - // Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetMultiResourceDecision) + // Deprecated: Use AuthorizationV2 methods instead (GetDecisionByToken, GetDecisionByTokenMultiResource) GetDecisionsByToken(context.Context, *connect.Request[authorization.GetDecisionsByTokenRequest]) (*connect.Response[authorization.GetDecisionsByTokenResponse], error) - // Deprecated: Use AuthorizationV2 method instead (GetEntitlements) + // Deprecated: Use AuthorizationV2 method instead (GetEntitlements, GetEntitlementsByToken) GetEntitlements(context.Context, *connect.Request[authorization.GetEntitlementsRequest]) (*connect.Response[authorization.GetEntitlementsResponse], error) } diff --git a/protocol/go/authorization/v2/authorization.pb.go b/protocol/go/authorization/v2/authorization.pb.go index 266d5019d2..ae2183de69 100644 --- a/protocol/go/authorization/v2/authorization.pb.go +++ b/protocol/go/authorization/v2/authorization.pb.go @@ -120,7 +120,64 @@ func (x Entity_Category) Number() protoreflect.EnumNumber { // Deprecated: Use Entity_Category.Descriptor instead. func (Entity_Category) EnumDescriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{0, 0} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{1, 0} +} + +// A set of related PE and NPE +type EntityChain struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // ephemeral id for tracking between request and response + EphemeralChainId string `protobuf:"bytes,1,opt,name=ephemeral_chain_id,json=ephemeralChainId,proto3" json:"ephemeral_chain_id,omitempty"` + Entities []*Entity `protobuf:"bytes,2,rep,name=entities,proto3" json:"entities,omitempty"` +} + +func (x *EntityChain) Reset() { + *x = EntityChain{} + if protoimpl.UnsafeEnabled { + mi := &file_authorization_v2_authorization_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EntityChain) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EntityChain) ProtoMessage() {} + +func (x *EntityChain) ProtoReflect() protoreflect.Message { + mi := &file_authorization_v2_authorization_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EntityChain.ProtoReflect.Descriptor instead. +func (*EntityChain) Descriptor() ([]byte, []int) { + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{0} +} + +func (x *EntityChain) GetEphemeralChainId() string { + if x != nil { + return x.EphemeralChainId + } + return "" +} + +func (x *EntityChain) GetEntities() []*Entity { + if x != nil { + return x.Entities + } + return nil } // PE (Person Entity) or NPE (Non-Person Entity) @@ -147,7 +204,7 @@ type Entity struct { func (x *Entity) Reset() { *x = Entity{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[0] + mi := &file_authorization_v2_authorization_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -160,7 +217,7 @@ func (x *Entity) String() string { func (*Entity) ProtoMessage() {} func (x *Entity) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[0] + mi := &file_authorization_v2_authorization_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -173,7 +230,7 @@ func (x *Entity) ProtoReflect() protoreflect.Message { // Deprecated: Use Entity.ProtoReflect.Descriptor instead. func (*Entity) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{0} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{1} } func (x *Entity) GetEphemeralId() string { @@ -283,7 +340,7 @@ type EntityEntitlements struct { func (x *EntityEntitlements) Reset() { *x = EntityEntitlements{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[1] + mi := &file_authorization_v2_authorization_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -296,7 +353,7 @@ func (x *EntityEntitlements) String() string { func (*EntityEntitlements) ProtoMessage() {} func (x *EntityEntitlements) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[1] + mi := &file_authorization_v2_authorization_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -309,7 +366,7 @@ func (x *EntityEntitlements) ProtoReflect() protoreflect.Message { // Deprecated: Use EntityEntitlements.ProtoReflect.Descriptor instead. func (*EntityEntitlements) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{1} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{2} } func (x *EntityEntitlements) GetEphemeralId() string { @@ -344,7 +401,7 @@ type Resource struct { func (x *Resource) Reset() { *x = Resource{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[2] + mi := &file_authorization_v2_authorization_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -357,7 +414,7 @@ func (x *Resource) String() string { func (*Resource) ProtoMessage() {} func (x *Resource) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[2] + mi := &file_authorization_v2_authorization_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -370,7 +427,7 @@ func (x *Resource) ProtoReflect() protoreflect.Message { // Deprecated: Use Resource.ProtoReflect.Descriptor instead. func (*Resource) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{2} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{3} } func (x *Resource) GetEphemeralId() string { @@ -424,14 +481,14 @@ type ResourceDecision struct { // ephemeral id for tracking between request and response EphemeralResourceId string `protobuf:"bytes,1,opt,name=ephemeral_resource_id,json=ephemeralResourceId,proto3" json:"ephemeral_resource_id,omitempty"` - // the decision result + // decision result Decision Decision `protobuf:"varint,3,opt,name=decision,proto3,enum=authorization.v2.Decision" json:"decision,omitempty"` } func (x *ResourceDecision) Reset() { *x = ResourceDecision{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[3] + mi := &file_authorization_v2_authorization_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -444,7 +501,7 @@ func (x *ResourceDecision) String() string { func (*ResourceDecision) ProtoMessage() {} func (x *ResourceDecision) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[3] + mi := &file_authorization_v2_authorization_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -457,7 +514,7 @@ func (x *ResourceDecision) ProtoReflect() protoreflect.Message { // Deprecated: Use ResourceDecision.ProtoReflect.Descriptor instead. func (*ResourceDecision) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{3} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{4} } func (x *ResourceDecision) GetEphemeralResourceId() string { @@ -483,7 +540,7 @@ type GetDecisionRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Entity *authorization.EntityChain `protobuf:"bytes,1,opt,name=entity,proto3" json:"entity,omitempty"` + Entity *EntityChain `protobuf:"bytes,1,opt,name=entity,proto3" json:"entity,omitempty"` // name on action is required Action *policy.Action `protobuf:"bytes,2,opt,name=action,proto3" json:"action,omitempty"` Resource *Resource `protobuf:"bytes,3,opt,name=resource,proto3" json:"resource,omitempty"` @@ -492,7 +549,7 @@ type GetDecisionRequest struct { func (x *GetDecisionRequest) Reset() { *x = GetDecisionRequest{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[4] + mi := &file_authorization_v2_authorization_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -505,7 +562,7 @@ func (x *GetDecisionRequest) String() string { func (*GetDecisionRequest) ProtoMessage() {} func (x *GetDecisionRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[4] + mi := &file_authorization_v2_authorization_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -518,10 +575,10 @@ func (x *GetDecisionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDecisionRequest.ProtoReflect.Descriptor instead. func (*GetDecisionRequest) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{4} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{5} } -func (x *GetDecisionRequest) GetEntity() *authorization.EntityChain { +func (x *GetDecisionRequest) GetEntity() *EntityChain { if x != nil { return x.Entity } @@ -547,18 +604,14 @@ type GetDecisionResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // ephemeral id for tracking between request and response - EphemeralEntityChainId string `protobuf:"bytes,1,opt,name=ephemeral_entity_chain_id,json=ephemeralEntityChainId,proto3" json:"ephemeral_entity_chain_id,omitempty"` - // name on action is required - Action *policy.Action `protobuf:"bytes,2,opt,name=action,proto3" json:"action,omitempty"` - // the decision on the resource - Decision *ResourceDecision `protobuf:"bytes,3,opt,name=decision,proto3" json:"decision,omitempty"` + // decision on the resource + Decision *ResourceDecision `protobuf:"bytes,1,opt,name=decision,proto3" json:"decision,omitempty"` } func (x *GetDecisionResponse) Reset() { *x = GetDecisionResponse{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[5] + mi := &file_authorization_v2_authorization_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -571,7 +624,7 @@ func (x *GetDecisionResponse) String() string { func (*GetDecisionResponse) ProtoMessage() {} func (x *GetDecisionResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[5] + mi := &file_authorization_v2_authorization_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -584,21 +637,7 @@ func (x *GetDecisionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDecisionResponse.ProtoReflect.Descriptor instead. func (*GetDecisionResponse) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{5} -} - -func (x *GetDecisionResponse) GetEphemeralEntityChainId() string { - if x != nil { - return x.EphemeralEntityChainId - } - return "" -} - -func (x *GetDecisionResponse) GetAction() *policy.Action { - if x != nil { - return x.Action - } - return nil + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{6} } func (x *GetDecisionResponse) GetDecision() *ResourceDecision { @@ -618,8 +657,8 @@ type GetDecisionMultiResourceRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // The entity chain must be defined - Entity *authorization.EntityChain `protobuf:"bytes,1,opt,name=entity,proto3" json:"entity,omitempty"` + // entity chain must be defined + Entity *EntityChain `protobuf:"bytes,1,opt,name=entity,proto3" json:"entity,omitempty"` // name on action is required Action *policy.Action `protobuf:"bytes,2,opt,name=action,proto3" json:"action,omitempty"` Resources []*Resource `protobuf:"bytes,3,rep,name=resources,proto3" json:"resources,omitempty"` @@ -628,7 +667,7 @@ type GetDecisionMultiResourceRequest struct { func (x *GetDecisionMultiResourceRequest) Reset() { *x = GetDecisionMultiResourceRequest{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[6] + mi := &file_authorization_v2_authorization_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -641,7 +680,7 @@ func (x *GetDecisionMultiResourceRequest) String() string { func (*GetDecisionMultiResourceRequest) ProtoMessage() {} func (x *GetDecisionMultiResourceRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[6] + mi := &file_authorization_v2_authorization_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -654,10 +693,10 @@ func (x *GetDecisionMultiResourceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDecisionMultiResourceRequest.ProtoReflect.Descriptor instead. func (*GetDecisionMultiResourceRequest) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{6} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{7} } -func (x *GetDecisionMultiResourceRequest) GetEntity() *authorization.EntityChain { +func (x *GetDecisionMultiResourceRequest) GetEntity() *EntityChain { if x != nil { return x.Entity } @@ -683,20 +722,16 @@ type GetDecisionMultiResourceResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // ephemeral id for tracking between request and response - EphemeralEntityChainId string `protobuf:"bytes,1,opt,name=ephemeral_entity_chain_id,json=ephemeralEntityChainId,proto3" json:"ephemeral_entity_chain_id,omitempty"` - // name on action is to be relied upon - Action *policy.Action `protobuf:"bytes,2,opt,name=action,proto3" json:"action,omitempty"` // convenience flag indicating global resource decisions result (permit/deny) - AllPermitted *wrapperspb.BoolValue `protobuf:"bytes,3,opt,name=all_permitted,json=allPermitted,proto3" json:"all_permitted,omitempty"` + AllPermitted *wrapperspb.BoolValue `protobuf:"bytes,1,opt,name=all_permitted,json=allPermitted,proto3" json:"all_permitted,omitempty"` // individual resource decisions - ResourceDecisions []*ResourceDecision `protobuf:"bytes,4,rep,name=resource_decisions,json=resourceDecisions,proto3" json:"resource_decisions,omitempty"` + ResourceDecisions []*ResourceDecision `protobuf:"bytes,2,rep,name=resource_decisions,json=resourceDecisions,proto3" json:"resource_decisions,omitempty"` } func (x *GetDecisionMultiResourceResponse) Reset() { *x = GetDecisionMultiResourceResponse{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[7] + mi := &file_authorization_v2_authorization_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -709,7 +744,7 @@ func (x *GetDecisionMultiResourceResponse) String() string { func (*GetDecisionMultiResourceResponse) ProtoMessage() {} func (x *GetDecisionMultiResourceResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[7] + mi := &file_authorization_v2_authorization_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -722,21 +757,7 @@ func (x *GetDecisionMultiResourceResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDecisionMultiResourceResponse.ProtoReflect.Descriptor instead. func (*GetDecisionMultiResourceResponse) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{7} -} - -func (x *GetDecisionMultiResourceResponse) GetEphemeralEntityChainId() string { - if x != nil { - return x.EphemeralEntityChainId - } - return "" -} - -func (x *GetDecisionMultiResourceResponse) GetAction() *policy.Action { - if x != nil { - return x.Action - } - return nil + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{8} } func (x *GetDecisionMultiResourceResponse) GetAllPermitted() *wrapperspb.BoolValue { @@ -768,7 +789,7 @@ type GetDecisionBulkRequest struct { func (x *GetDecisionBulkRequest) Reset() { *x = GetDecisionBulkRequest{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[8] + mi := &file_authorization_v2_authorization_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -781,7 +802,7 @@ func (x *GetDecisionBulkRequest) String() string { func (*GetDecisionBulkRequest) ProtoMessage() {} func (x *GetDecisionBulkRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[8] + mi := &file_authorization_v2_authorization_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -794,7 +815,7 @@ func (x *GetDecisionBulkRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDecisionBulkRequest.ProtoReflect.Descriptor instead. func (*GetDecisionBulkRequest) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{8} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{9} } func (x *GetDecisionBulkRequest) GetDecisionRequests() []*GetDecisionMultiResourceRequest { @@ -815,7 +836,7 @@ type GetDecisionBulkResponse struct { func (x *GetDecisionBulkResponse) Reset() { *x = GetDecisionBulkResponse{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[9] + mi := &file_authorization_v2_authorization_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -828,7 +849,7 @@ func (x *GetDecisionBulkResponse) String() string { func (*GetDecisionBulkResponse) ProtoMessage() {} func (x *GetDecisionBulkResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[9] + mi := &file_authorization_v2_authorization_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -841,7 +862,7 @@ func (x *GetDecisionBulkResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDecisionBulkResponse.ProtoReflect.Descriptor instead. func (*GetDecisionBulkResponse) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{9} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{10} } func (x *GetDecisionBulkResponse) GetDecisionResponses() []*GetDecisionMultiResourceResponse { @@ -851,7 +872,7 @@ func (x *GetDecisionBulkResponse) GetDecisionResponses() []*GetDecisionMultiReso return nil } -// What can the entity do, broken down as permitted actions on attribute value FQNs +// What can the entity (PE or NPE, represented by the entity chain) do, broken down as permitted actions on attribute value FQNs? // // Note: the v1 API parameter 'scope' has been dropped, and it is recommended to use // GetDecision if the resource is known @@ -860,9 +881,7 @@ type GetEntitlementsRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // list of requested entities - // todo: should this be an entity chain? - Entities []*Entity `protobuf:"bytes,1,rep,name=entities,proto3" json:"entities,omitempty"` + EntityChain *EntityChain `protobuf:"bytes,1,opt,name=entity_chain,json=entityChain,proto3" json:"entity_chain,omitempty"` // optional parameter to return all entitled values for attribute definitions with hierarchy rules, propagating // down the hierarchical values instead of returning solely the value that is directly entitled WithComprehensiveHierarchy *bool `protobuf:"varint,2,opt,name=with_comprehensive_hierarchy,json=withComprehensiveHierarchy,proto3,oneof" json:"with_comprehensive_hierarchy,omitempty"` @@ -871,7 +890,7 @@ type GetEntitlementsRequest struct { func (x *GetEntitlementsRequest) Reset() { *x = GetEntitlementsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[10] + mi := &file_authorization_v2_authorization_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -884,7 +903,7 @@ func (x *GetEntitlementsRequest) String() string { func (*GetEntitlementsRequest) ProtoMessage() {} func (x *GetEntitlementsRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[10] + mi := &file_authorization_v2_authorization_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -897,12 +916,12 @@ func (x *GetEntitlementsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetEntitlementsRequest.ProtoReflect.Descriptor instead. func (*GetEntitlementsRequest) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{10} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{11} } -func (x *GetEntitlementsRequest) GetEntities() []*Entity { +func (x *GetEntitlementsRequest) GetEntityChain() *EntityChain { if x != nil { - return x.Entities + return x.EntityChain } return nil } @@ -925,7 +944,7 @@ type GetEntitlementsResponse struct { func (x *GetEntitlementsResponse) Reset() { *x = GetEntitlementsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[11] + mi := &file_authorization_v2_authorization_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -938,7 +957,7 @@ func (x *GetEntitlementsResponse) String() string { func (*GetEntitlementsResponse) ProtoMessage() {} func (x *GetEntitlementsResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[11] + mi := &file_authorization_v2_authorization_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -951,7 +970,7 @@ func (x *GetEntitlementsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetEntitlementsResponse.ProtoReflect.Descriptor instead. func (*GetEntitlementsResponse) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{11} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{12} } func (x *GetEntitlementsResponse) GetEntitlements() []*EntityEntitlements { @@ -961,6 +980,111 @@ func (x *GetEntitlementsResponse) GetEntitlements() []*EntityEntitlements { return nil } +// What can the entity (PE or NPE, represented by the token) do, broken down as permitted actions on attribute value FQNs? +type GetEntitlementsByTokenRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Token *authorization.Token `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` + // optional parameter to return all entitled values for attribute definitions with hierarchy rules, propagating + // down the hierarchical values instead of returning solely the value that is directly entitled + WithComprehensiveHierarchy *bool `protobuf:"varint,2,opt,name=with_comprehensive_hierarchy,json=withComprehensiveHierarchy,proto3,oneof" json:"with_comprehensive_hierarchy,omitempty"` +} + +func (x *GetEntitlementsByTokenRequest) Reset() { + *x = GetEntitlementsByTokenRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_authorization_v2_authorization_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetEntitlementsByTokenRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetEntitlementsByTokenRequest) ProtoMessage() {} + +func (x *GetEntitlementsByTokenRequest) ProtoReflect() protoreflect.Message { + mi := &file_authorization_v2_authorization_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetEntitlementsByTokenRequest.ProtoReflect.Descriptor instead. +func (*GetEntitlementsByTokenRequest) Descriptor() ([]byte, []int) { + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{13} +} + +func (x *GetEntitlementsByTokenRequest) GetToken() *authorization.Token { + if x != nil { + return x.Token + } + return nil +} + +func (x *GetEntitlementsByTokenRequest) GetWithComprehensiveHierarchy() bool { + if x != nil && x.WithComprehensiveHierarchy != nil { + return *x.WithComprehensiveHierarchy + } + return false +} + +type GetEntitlementsByTokenResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Entitlements []*EntityEntitlements `protobuf:"bytes,1,rep,name=entitlements,proto3" json:"entitlements,omitempty"` +} + +func (x *GetEntitlementsByTokenResponse) Reset() { + *x = GetEntitlementsByTokenResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_authorization_v2_authorization_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetEntitlementsByTokenResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetEntitlementsByTokenResponse) ProtoMessage() {} + +func (x *GetEntitlementsByTokenResponse) ProtoReflect() protoreflect.Message { + mi := &file_authorization_v2_authorization_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetEntitlementsByTokenResponse.ProtoReflect.Descriptor instead. +func (*GetEntitlementsByTokenResponse) Descriptor() ([]byte, []int) { + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{14} +} + +func (x *GetEntitlementsByTokenResponse) GetEntitlements() []*EntityEntitlements { + if x != nil { + return x.Entitlements + } + return nil +} + // Can the entity (PE or NPE) represented by this token access? // 1. one token // 2. one action @@ -979,7 +1103,7 @@ type GetDecisionByTokenRequest struct { func (x *GetDecisionByTokenRequest) Reset() { *x = GetDecisionByTokenRequest{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[12] + mi := &file_authorization_v2_authorization_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -992,7 +1116,7 @@ func (x *GetDecisionByTokenRequest) String() string { func (*GetDecisionByTokenRequest) ProtoMessage() {} func (x *GetDecisionByTokenRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[12] + mi := &file_authorization_v2_authorization_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1005,7 +1129,7 @@ func (x *GetDecisionByTokenRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDecisionByTokenRequest.ProtoReflect.Descriptor instead. func (*GetDecisionByTokenRequest) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{12} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{15} } func (x *GetDecisionByTokenRequest) GetToken() *authorization.Token { @@ -1040,7 +1164,7 @@ type GetDecisionByTokenResponse struct { func (x *GetDecisionByTokenResponse) Reset() { *x = GetDecisionByTokenResponse{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[13] + mi := &file_authorization_v2_authorization_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1053,7 +1177,7 @@ func (x *GetDecisionByTokenResponse) String() string { func (*GetDecisionByTokenResponse) ProtoMessage() {} func (x *GetDecisionByTokenResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[13] + mi := &file_authorization_v2_authorization_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1066,7 +1190,7 @@ func (x *GetDecisionByTokenResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDecisionByTokenResponse.ProtoReflect.Descriptor instead. func (*GetDecisionByTokenResponse) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{13} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{16} } func (x *GetDecisionByTokenResponse) GetDecisionResponse() *GetDecisionResponse { @@ -1094,7 +1218,7 @@ type GetDecisionByTokenMultiResourceRequest struct { func (x *GetDecisionByTokenMultiResourceRequest) Reset() { *x = GetDecisionByTokenMultiResourceRequest{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[14] + mi := &file_authorization_v2_authorization_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1107,7 +1231,7 @@ func (x *GetDecisionByTokenMultiResourceRequest) String() string { func (*GetDecisionByTokenMultiResourceRequest) ProtoMessage() {} func (x *GetDecisionByTokenMultiResourceRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[14] + mi := &file_authorization_v2_authorization_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1120,7 +1244,7 @@ func (x *GetDecisionByTokenMultiResourceRequest) ProtoReflect() protoreflect.Mes // Deprecated: Use GetDecisionByTokenMultiResourceRequest.ProtoReflect.Descriptor instead. func (*GetDecisionByTokenMultiResourceRequest) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{14} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{17} } func (x *GetDecisionByTokenMultiResourceRequest) GetToken() *authorization.Token { @@ -1149,17 +1273,16 @@ type GetDecisionByTokenMultiResourceResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Action *policy.Action `protobuf:"bytes,1,opt,name=action,proto3" json:"action,omitempty"` // convenience flag indicating global resource decisions result (permit/deny) - AllPermitted *wrapperspb.BoolValue `protobuf:"bytes,2,opt,name=all_permitted,json=allPermitted,proto3" json:"all_permitted,omitempty"` + AllPermitted *wrapperspb.BoolValue `protobuf:"bytes,1,opt,name=all_permitted,json=allPermitted,proto3" json:"all_permitted,omitempty"` // individual resource decisions - ResourceDecisions []*ResourceDecision `protobuf:"bytes,4,rep,name=resource_decisions,json=resourceDecisions,proto3" json:"resource_decisions,omitempty"` + ResourceDecisions []*ResourceDecision `protobuf:"bytes,2,rep,name=resource_decisions,json=resourceDecisions,proto3" json:"resource_decisions,omitempty"` } func (x *GetDecisionByTokenMultiResourceResponse) Reset() { *x = GetDecisionByTokenMultiResourceResponse{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[15] + mi := &file_authorization_v2_authorization_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1172,7 +1295,7 @@ func (x *GetDecisionByTokenMultiResourceResponse) String() string { func (*GetDecisionByTokenMultiResourceResponse) ProtoMessage() {} func (x *GetDecisionByTokenMultiResourceResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[15] + mi := &file_authorization_v2_authorization_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1185,14 +1308,7 @@ func (x *GetDecisionByTokenMultiResourceResponse) ProtoReflect() protoreflect.Me // Deprecated: Use GetDecisionByTokenMultiResourceResponse.ProtoReflect.Descriptor instead. func (*GetDecisionByTokenMultiResourceResponse) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{15} -} - -func (x *GetDecisionByTokenMultiResourceResponse) GetAction() *policy.Action { - if x != nil { - return x.Action - } - return nil + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{18} } func (x *GetDecisionByTokenMultiResourceResponse) GetAllPermitted() *wrapperspb.BoolValue { @@ -1220,7 +1336,7 @@ type EntityEntitlements_ActionsList struct { func (x *EntityEntitlements_ActionsList) Reset() { *x = EntityEntitlements_ActionsList{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[16] + mi := &file_authorization_v2_authorization_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1233,7 +1349,7 @@ func (x *EntityEntitlements_ActionsList) String() string { func (*EntityEntitlements_ActionsList) ProtoMessage() {} func (x *EntityEntitlements_ActionsList) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[16] + mi := &file_authorization_v2_authorization_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1246,7 +1362,7 @@ func (x *EntityEntitlements_ActionsList) ProtoReflect() protoreflect.Message { // Deprecated: Use EntityEntitlements_ActionsList.ProtoReflect.Descriptor instead. func (*EntityEntitlements_ActionsList) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{1, 0} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{2, 0} } func (x *EntityEntitlements_ActionsList) GetActions() []*policy.Action { @@ -1267,7 +1383,7 @@ type Resource_AttributeValues struct { func (x *Resource_AttributeValues) Reset() { *x = Resource_AttributeValues{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[18] + mi := &file_authorization_v2_authorization_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1280,7 +1396,7 @@ func (x *Resource_AttributeValues) String() string { func (*Resource_AttributeValues) ProtoMessage() {} func (x *Resource_AttributeValues) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[18] + mi := &file_authorization_v2_authorization_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1293,7 +1409,7 @@ func (x *Resource_AttributeValues) ProtoReflect() protoreflect.Message { // Deprecated: Use Resource_AttributeValues.ProtoReflect.Descriptor instead. func (*Resource_AttributeValues) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{2, 0} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{3, 0} } func (x *Resource_AttributeValues) GetFqns() []string { @@ -1318,7 +1434,15 @@ var file_authorization_v2_authorization_proto_rawDesc = []byte{ 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2f, 0x6f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa9, 0x03, 0x0a, 0x06, 0x45, 0x6e, + 0x63, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x7e, 0x0a, 0x0b, 0x45, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x2c, 0x0a, 0x12, 0x65, 0x70, 0x68, 0x65, + 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x43, + 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x41, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, + 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, + 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0xa9, 0x03, 0x0a, 0x06, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0d, 0x65, 0x6d, 0x61, 0x69, 0x6c, @@ -1393,104 +1517,111 @@ var file_authorization_v2_authorization_proto_rawDesc = []byte{ 0x49, 0x64, 0x12, 0x36, 0x0a, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xa7, 0x02, 0x0a, 0x12, 0x47, + 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xaa, 0x02, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x3a, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x06, 0xba, - 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x2e, 0x0a, - 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, - 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x06, 0xba, - 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x0a, - 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x06, 0xba, 0x48, 0x03, - 0xc8, 0x01, 0x01, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3a, 0x65, 0xba, - 0x48, 0x62, 0x1a, 0x60, 0x0a, 0x29, 0x67, 0x65, 0x74, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, - 0x1c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75, 0x73, - 0x74, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x15, 0x68, - 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, - 0x61, 0x6d, 0x65, 0x29, 0x22, 0xb8, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x19, - 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x16, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x3e, 0x0a, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, - 0xc1, 0x02, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, - 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, - 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, - 0x2e, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, - 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x45, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x74, 0x12, 0x3d, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, + 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x12, 0x2e, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x3e, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x0b, - 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x3a, 0x6b, 0xba, 0x48, 0x68, 0x1a, 0x66, 0x0a, 0x2f, 0x67, - 0x65, 0x74, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x75, 0x6c, 0x74, - 0x69, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x1c, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, - 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x15, 0x68, 0x61, - 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, - 0x6d, 0x65, 0x29, 0x22, 0x99, 0x02, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x19, 0x65, 0x70, 0x68, 0x65, - 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x16, 0x65, 0x70, 0x68, - 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, - 0x6e, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3f, 0x0a, 0x0d, 0x61, - 0x6c, 0x6c, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, - 0x61, 0x6c, 0x6c, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x12, 0x51, 0x0a, 0x12, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, - 0x78, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, - 0x6c, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5e, 0x0a, 0x11, 0x64, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, 0x7c, 0x0a, 0x17, 0x47, 0x65, 0x74, - 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x32, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, - 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22, 0xc3, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x45, - 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x41, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x42, 0x0b, - 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x08, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x1c, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, - 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, - 0x61, 0x72, 0x63, 0x68, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x1a, 0x77, - 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, - 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x88, 0x01, 0x01, 0x42, 0x1f, 0x0a, 0x1d, - 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, - 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x22, 0x63, 0x0a, - 0x17, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x06, + 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x3a, 0x65, 0xba, 0x48, 0x62, 0x1a, 0x60, 0x0a, 0x29, 0x67, 0x65, 0x74, 0x5f, 0x64, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, + 0x65, 0x64, 0x12, 0x1c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, + 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, + 0x1a, 0x15, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x22, 0x55, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, + 0x0a, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xc4, + 0x02, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, + 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, + 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x12, 0x2e, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x45, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x3a, 0x6b, 0xba, 0x48, 0x68, 0x1a, 0x66, 0x0a, + 0x2f, 0x67, 0x65, 0x74, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x75, + 0x6c, 0x74, 0x69, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, + 0x12, 0x1c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75, + 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x15, + 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x22, 0xb6, 0x01, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x61, 0x6c, + 0x6c, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x61, + 0x6c, 0x6c, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x12, 0x51, 0x0a, 0x12, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x78, + 0x0a, 0x16, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, + 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5e, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, 0x7c, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x44, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, + 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x32, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, + 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22, 0xca, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x45, 0x6e, + 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x48, 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x0b, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x45, 0x0a, 0x1c, 0x77, + 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, + 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x08, 0x48, 0x00, 0x52, 0x1a, 0x77, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, + 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x88, + 0x01, 0x01, 0x42, 0x1f, 0x0a, 0x1d, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, + 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, + 0x63, 0x68, 0x79, 0x22, 0x63, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, + 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, + 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xbb, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, + 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x42, 0x79, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x05, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x42, + 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x45, + 0x0a, 0x1c, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, + 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x1a, 0x77, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, + 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, + 0x68, 0x79, 0x88, 0x01, 0x01, 0x42, 0x1f, 0x0a, 0x1d, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, + 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, + 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x22, 0x6a, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, + 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, @@ -1542,87 +1673,92 @@ var file_authorization_v2_authorization_proto_rawDesc = []byte{ 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x1c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x15, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, - 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x22, 0xe5, 0x01, + 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x22, 0xbd, 0x01, 0x0a, 0x27, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x3f, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, - 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, - 0x65, 0x64, 0x12, 0x51, 0x0a, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x64, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, - 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2a, 0x4c, 0x0a, 0x08, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x18, 0x0a, 0x14, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, - 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x44, - 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4e, 0x59, 0x10, 0x01, 0x12, 0x13, - 0x0a, 0x0f, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x45, 0x52, 0x4d, 0x49, - 0x54, 0x10, 0x02, 0x32, 0xdc, 0x05, 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5c, 0x0a, 0x0b, - 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, - 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x83, 0x01, 0x0a, 0x18, 0x47, - 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x31, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, - 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x68, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, - 0x75, 0x6c, 0x6b, 0x12, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, + 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x61, 0x6c, + 0x6c, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x12, 0x51, 0x0a, 0x12, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2a, 0x4c, 0x0a, + 0x08, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x14, 0x44, 0x45, 0x43, + 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, + 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, + 0x44, 0x45, 0x4e, 0x59, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, + 0x4f, 0x4e, 0x5f, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x32, 0xdb, 0x06, 0x0a, 0x14, + 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x5c, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x71, 0x0a, 0x12, 0x47, 0x65, - 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x12, 0x2b, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, - 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x98, 0x01, - 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x12, 0x38, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, - 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, + 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x83, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, + 0x31, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, + 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x45, - 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x28, 0x2e, 0x61, 0x75, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x44, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x12, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, - 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, + 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x71, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2b, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x98, 0x01, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4d, 0x75, 0x6c, 0x74, + 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x38, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, + 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4d, + 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x12, 0x68, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x12, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, + 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7d, 0x0a, 0x16, 0x47, 0x65, + 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x42, 0x79, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2f, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, - 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x42, 0xd5, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x42, 0x12, 0x41, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, - 0x01, 0x5a, 0x48, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, - 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, 0x6f, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x3b, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x32, 0xa2, 0x02, 0x03, 0x41, 0x58, - 0x58, 0xaa, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x1c, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xd5, 0x01, 0x0a, 0x14, 0x63, 0x6f, + 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x42, 0x12, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x48, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, + 0x6f, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, + 0x76, 0x32, 0x3b, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x76, 0x32, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x10, 0x41, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0xe2, 0x02, + 0x1c, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, + 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, + 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, + 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1638,82 +1774,86 @@ func file_authorization_v2_authorization_proto_rawDescGZIP() []byte { } var file_authorization_v2_authorization_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_authorization_v2_authorization_proto_msgTypes = make([]protoimpl.MessageInfo, 19) +var file_authorization_v2_authorization_proto_msgTypes = make([]protoimpl.MessageInfo, 22) var file_authorization_v2_authorization_proto_goTypes = []interface{}{ (Decision)(0), // 0: authorization.v2.Decision (Entity_Category)(0), // 1: authorization.v2.Entity.Category - (*Entity)(nil), // 2: authorization.v2.Entity - (*EntityEntitlements)(nil), // 3: authorization.v2.EntityEntitlements - (*Resource)(nil), // 4: authorization.v2.Resource - (*ResourceDecision)(nil), // 5: authorization.v2.ResourceDecision - (*GetDecisionRequest)(nil), // 6: authorization.v2.GetDecisionRequest - (*GetDecisionResponse)(nil), // 7: authorization.v2.GetDecisionResponse - (*GetDecisionMultiResourceRequest)(nil), // 8: authorization.v2.GetDecisionMultiResourceRequest - (*GetDecisionMultiResourceResponse)(nil), // 9: authorization.v2.GetDecisionMultiResourceResponse - (*GetDecisionBulkRequest)(nil), // 10: authorization.v2.GetDecisionBulkRequest - (*GetDecisionBulkResponse)(nil), // 11: authorization.v2.GetDecisionBulkResponse - (*GetEntitlementsRequest)(nil), // 12: authorization.v2.GetEntitlementsRequest - (*GetEntitlementsResponse)(nil), // 13: authorization.v2.GetEntitlementsResponse - (*GetDecisionByTokenRequest)(nil), // 14: authorization.v2.GetDecisionByTokenRequest - (*GetDecisionByTokenResponse)(nil), // 15: authorization.v2.GetDecisionByTokenResponse - (*GetDecisionByTokenMultiResourceRequest)(nil), // 16: authorization.v2.GetDecisionByTokenMultiResourceRequest - (*GetDecisionByTokenMultiResourceResponse)(nil), // 17: authorization.v2.GetDecisionByTokenMultiResourceResponse - (*EntityEntitlements_ActionsList)(nil), // 18: authorization.v2.EntityEntitlements.ActionsList - nil, // 19: authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry - (*Resource_AttributeValues)(nil), // 20: authorization.v2.Resource.AttributeValues - (*anypb.Any)(nil), // 21: google.protobuf.Any - (*authorization.EntityChain)(nil), // 22: authorization.EntityChain - (*policy.Action)(nil), // 23: policy.Action - (*wrapperspb.BoolValue)(nil), // 24: google.protobuf.BoolValue - (*authorization.Token)(nil), // 25: authorization.Token + (*EntityChain)(nil), // 2: authorization.v2.EntityChain + (*Entity)(nil), // 3: authorization.v2.Entity + (*EntityEntitlements)(nil), // 4: authorization.v2.EntityEntitlements + (*Resource)(nil), // 5: authorization.v2.Resource + (*ResourceDecision)(nil), // 6: authorization.v2.ResourceDecision + (*GetDecisionRequest)(nil), // 7: authorization.v2.GetDecisionRequest + (*GetDecisionResponse)(nil), // 8: authorization.v2.GetDecisionResponse + (*GetDecisionMultiResourceRequest)(nil), // 9: authorization.v2.GetDecisionMultiResourceRequest + (*GetDecisionMultiResourceResponse)(nil), // 10: authorization.v2.GetDecisionMultiResourceResponse + (*GetDecisionBulkRequest)(nil), // 11: authorization.v2.GetDecisionBulkRequest + (*GetDecisionBulkResponse)(nil), // 12: authorization.v2.GetDecisionBulkResponse + (*GetEntitlementsRequest)(nil), // 13: authorization.v2.GetEntitlementsRequest + (*GetEntitlementsResponse)(nil), // 14: authorization.v2.GetEntitlementsResponse + (*GetEntitlementsByTokenRequest)(nil), // 15: authorization.v2.GetEntitlementsByTokenRequest + (*GetEntitlementsByTokenResponse)(nil), // 16: authorization.v2.GetEntitlementsByTokenResponse + (*GetDecisionByTokenRequest)(nil), // 17: authorization.v2.GetDecisionByTokenRequest + (*GetDecisionByTokenResponse)(nil), // 18: authorization.v2.GetDecisionByTokenResponse + (*GetDecisionByTokenMultiResourceRequest)(nil), // 19: authorization.v2.GetDecisionByTokenMultiResourceRequest + (*GetDecisionByTokenMultiResourceResponse)(nil), // 20: authorization.v2.GetDecisionByTokenMultiResourceResponse + (*EntityEntitlements_ActionsList)(nil), // 21: authorization.v2.EntityEntitlements.ActionsList + nil, // 22: authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry + (*Resource_AttributeValues)(nil), // 23: authorization.v2.Resource.AttributeValues + (*anypb.Any)(nil), // 24: google.protobuf.Any + (*policy.Action)(nil), // 25: policy.Action + (*wrapperspb.BoolValue)(nil), // 26: google.protobuf.BoolValue + (*authorization.Token)(nil), // 27: authorization.Token } var file_authorization_v2_authorization_proto_depIdxs = []int32{ - 21, // 0: authorization.v2.Entity.claims:type_name -> google.protobuf.Any - 1, // 1: authorization.v2.Entity.category:type_name -> authorization.v2.Entity.Category - 19, // 2: authorization.v2.EntityEntitlements.actions_per_attribute_value_fqn:type_name -> authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry - 20, // 3: authorization.v2.Resource.attribute_values:type_name -> authorization.v2.Resource.AttributeValues - 0, // 4: authorization.v2.ResourceDecision.decision:type_name -> authorization.v2.Decision - 22, // 5: authorization.v2.GetDecisionRequest.entity:type_name -> authorization.EntityChain - 23, // 6: authorization.v2.GetDecisionRequest.action:type_name -> policy.Action - 4, // 7: authorization.v2.GetDecisionRequest.resource:type_name -> authorization.v2.Resource - 23, // 8: authorization.v2.GetDecisionResponse.action:type_name -> policy.Action - 5, // 9: authorization.v2.GetDecisionResponse.decision:type_name -> authorization.v2.ResourceDecision - 22, // 10: authorization.v2.GetDecisionMultiResourceRequest.entity:type_name -> authorization.EntityChain - 23, // 11: authorization.v2.GetDecisionMultiResourceRequest.action:type_name -> policy.Action - 4, // 12: authorization.v2.GetDecisionMultiResourceRequest.resources:type_name -> authorization.v2.Resource - 23, // 13: authorization.v2.GetDecisionMultiResourceResponse.action:type_name -> policy.Action - 24, // 14: authorization.v2.GetDecisionMultiResourceResponse.all_permitted:type_name -> google.protobuf.BoolValue - 5, // 15: authorization.v2.GetDecisionMultiResourceResponse.resource_decisions:type_name -> authorization.v2.ResourceDecision - 8, // 16: authorization.v2.GetDecisionBulkRequest.decision_requests:type_name -> authorization.v2.GetDecisionMultiResourceRequest - 9, // 17: authorization.v2.GetDecisionBulkResponse.decision_responses:type_name -> authorization.v2.GetDecisionMultiResourceResponse - 2, // 18: authorization.v2.GetEntitlementsRequest.entities:type_name -> authorization.v2.Entity - 3, // 19: authorization.v2.GetEntitlementsResponse.entitlements:type_name -> authorization.v2.EntityEntitlements - 25, // 20: authorization.v2.GetDecisionByTokenRequest.token:type_name -> authorization.Token - 23, // 21: authorization.v2.GetDecisionByTokenRequest.action:type_name -> policy.Action - 4, // 22: authorization.v2.GetDecisionByTokenRequest.resource:type_name -> authorization.v2.Resource - 7, // 23: authorization.v2.GetDecisionByTokenResponse.decision_response:type_name -> authorization.v2.GetDecisionResponse - 25, // 24: authorization.v2.GetDecisionByTokenMultiResourceRequest.token:type_name -> authorization.Token - 23, // 25: authorization.v2.GetDecisionByTokenMultiResourceRequest.action:type_name -> policy.Action - 4, // 26: authorization.v2.GetDecisionByTokenMultiResourceRequest.resources:type_name -> authorization.v2.Resource - 23, // 27: authorization.v2.GetDecisionByTokenMultiResourceResponse.action:type_name -> policy.Action - 24, // 28: authorization.v2.GetDecisionByTokenMultiResourceResponse.all_permitted:type_name -> google.protobuf.BoolValue - 5, // 29: authorization.v2.GetDecisionByTokenMultiResourceResponse.resource_decisions:type_name -> authorization.v2.ResourceDecision - 23, // 30: authorization.v2.EntityEntitlements.ActionsList.actions:type_name -> policy.Action - 18, // 31: authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry.value:type_name -> authorization.v2.EntityEntitlements.ActionsList - 6, // 32: authorization.v2.AuthorizationService.GetDecision:input_type -> authorization.v2.GetDecisionRequest - 8, // 33: authorization.v2.AuthorizationService.GetDecisionMultiResource:input_type -> authorization.v2.GetDecisionMultiResourceRequest - 10, // 34: authorization.v2.AuthorizationService.GetDecisionBulk:input_type -> authorization.v2.GetDecisionBulkRequest - 14, // 35: authorization.v2.AuthorizationService.GetDecisionByToken:input_type -> authorization.v2.GetDecisionByTokenRequest - 16, // 36: authorization.v2.AuthorizationService.GetDecisionByTokenMultiResource:input_type -> authorization.v2.GetDecisionByTokenMultiResourceRequest - 12, // 37: authorization.v2.AuthorizationService.GetEntitlements:input_type -> authorization.v2.GetEntitlementsRequest - 7, // 38: authorization.v2.AuthorizationService.GetDecision:output_type -> authorization.v2.GetDecisionResponse - 9, // 39: authorization.v2.AuthorizationService.GetDecisionMultiResource:output_type -> authorization.v2.GetDecisionMultiResourceResponse - 11, // 40: authorization.v2.AuthorizationService.GetDecisionBulk:output_type -> authorization.v2.GetDecisionBulkResponse - 15, // 41: authorization.v2.AuthorizationService.GetDecisionByToken:output_type -> authorization.v2.GetDecisionByTokenResponse - 17, // 42: authorization.v2.AuthorizationService.GetDecisionByTokenMultiResource:output_type -> authorization.v2.GetDecisionByTokenMultiResourceResponse - 13, // 43: authorization.v2.AuthorizationService.GetEntitlements:output_type -> authorization.v2.GetEntitlementsResponse - 38, // [38:44] is the sub-list for method output_type - 32, // [32:38] is the sub-list for method input_type + 3, // 0: authorization.v2.EntityChain.entities:type_name -> authorization.v2.Entity + 24, // 1: authorization.v2.Entity.claims:type_name -> google.protobuf.Any + 1, // 2: authorization.v2.Entity.category:type_name -> authorization.v2.Entity.Category + 22, // 3: authorization.v2.EntityEntitlements.actions_per_attribute_value_fqn:type_name -> authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry + 23, // 4: authorization.v2.Resource.attribute_values:type_name -> authorization.v2.Resource.AttributeValues + 0, // 5: authorization.v2.ResourceDecision.decision:type_name -> authorization.v2.Decision + 2, // 6: authorization.v2.GetDecisionRequest.entity:type_name -> authorization.v2.EntityChain + 25, // 7: authorization.v2.GetDecisionRequest.action:type_name -> policy.Action + 5, // 8: authorization.v2.GetDecisionRequest.resource:type_name -> authorization.v2.Resource + 6, // 9: authorization.v2.GetDecisionResponse.decision:type_name -> authorization.v2.ResourceDecision + 2, // 10: authorization.v2.GetDecisionMultiResourceRequest.entity:type_name -> authorization.v2.EntityChain + 25, // 11: authorization.v2.GetDecisionMultiResourceRequest.action:type_name -> policy.Action + 5, // 12: authorization.v2.GetDecisionMultiResourceRequest.resources:type_name -> authorization.v2.Resource + 26, // 13: authorization.v2.GetDecisionMultiResourceResponse.all_permitted:type_name -> google.protobuf.BoolValue + 6, // 14: authorization.v2.GetDecisionMultiResourceResponse.resource_decisions:type_name -> authorization.v2.ResourceDecision + 9, // 15: authorization.v2.GetDecisionBulkRequest.decision_requests:type_name -> authorization.v2.GetDecisionMultiResourceRequest + 10, // 16: authorization.v2.GetDecisionBulkResponse.decision_responses:type_name -> authorization.v2.GetDecisionMultiResourceResponse + 2, // 17: authorization.v2.GetEntitlementsRequest.entity_chain:type_name -> authorization.v2.EntityChain + 4, // 18: authorization.v2.GetEntitlementsResponse.entitlements:type_name -> authorization.v2.EntityEntitlements + 27, // 19: authorization.v2.GetEntitlementsByTokenRequest.token:type_name -> authorization.Token + 4, // 20: authorization.v2.GetEntitlementsByTokenResponse.entitlements:type_name -> authorization.v2.EntityEntitlements + 27, // 21: authorization.v2.GetDecisionByTokenRequest.token:type_name -> authorization.Token + 25, // 22: authorization.v2.GetDecisionByTokenRequest.action:type_name -> policy.Action + 5, // 23: authorization.v2.GetDecisionByTokenRequest.resource:type_name -> authorization.v2.Resource + 8, // 24: authorization.v2.GetDecisionByTokenResponse.decision_response:type_name -> authorization.v2.GetDecisionResponse + 27, // 25: authorization.v2.GetDecisionByTokenMultiResourceRequest.token:type_name -> authorization.Token + 25, // 26: authorization.v2.GetDecisionByTokenMultiResourceRequest.action:type_name -> policy.Action + 5, // 27: authorization.v2.GetDecisionByTokenMultiResourceRequest.resources:type_name -> authorization.v2.Resource + 26, // 28: authorization.v2.GetDecisionByTokenMultiResourceResponse.all_permitted:type_name -> google.protobuf.BoolValue + 6, // 29: authorization.v2.GetDecisionByTokenMultiResourceResponse.resource_decisions:type_name -> authorization.v2.ResourceDecision + 25, // 30: authorization.v2.EntityEntitlements.ActionsList.actions:type_name -> policy.Action + 21, // 31: authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry.value:type_name -> authorization.v2.EntityEntitlements.ActionsList + 7, // 32: authorization.v2.AuthorizationService.GetDecision:input_type -> authorization.v2.GetDecisionRequest + 9, // 33: authorization.v2.AuthorizationService.GetDecisionMultiResource:input_type -> authorization.v2.GetDecisionMultiResourceRequest + 11, // 34: authorization.v2.AuthorizationService.GetDecisionBulk:input_type -> authorization.v2.GetDecisionBulkRequest + 17, // 35: authorization.v2.AuthorizationService.GetDecisionByToken:input_type -> authorization.v2.GetDecisionByTokenRequest + 19, // 36: authorization.v2.AuthorizationService.GetDecisionByTokenMultiResource:input_type -> authorization.v2.GetDecisionByTokenMultiResourceRequest + 13, // 37: authorization.v2.AuthorizationService.GetEntitlements:input_type -> authorization.v2.GetEntitlementsRequest + 15, // 38: authorization.v2.AuthorizationService.GetEntitlementsByToken:input_type -> authorization.v2.GetEntitlementsByTokenRequest + 8, // 39: authorization.v2.AuthorizationService.GetDecision:output_type -> authorization.v2.GetDecisionResponse + 10, // 40: authorization.v2.AuthorizationService.GetDecisionMultiResource:output_type -> authorization.v2.GetDecisionMultiResourceResponse + 12, // 41: authorization.v2.AuthorizationService.GetDecisionBulk:output_type -> authorization.v2.GetDecisionBulkResponse + 18, // 42: authorization.v2.AuthorizationService.GetDecisionByToken:output_type -> authorization.v2.GetDecisionByTokenResponse + 20, // 43: authorization.v2.AuthorizationService.GetDecisionByTokenMultiResource:output_type -> authorization.v2.GetDecisionByTokenMultiResourceResponse + 14, // 44: authorization.v2.AuthorizationService.GetEntitlements:output_type -> authorization.v2.GetEntitlementsResponse + 16, // 45: authorization.v2.AuthorizationService.GetEntitlementsByToken:output_type -> authorization.v2.GetEntitlementsByTokenResponse + 39, // [39:46] is the sub-list for method output_type + 32, // [32:39] is the sub-list for method input_type 32, // [32:32] is the sub-list for extension type_name 32, // [32:32] is the sub-list for extension extendee 0, // [0:32] is the sub-list for field type_name @@ -1726,7 +1866,7 @@ func file_authorization_v2_authorization_proto_init() { } if !protoimpl.UnsafeEnabled { file_authorization_v2_authorization_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Entity); i { + switch v := v.(*EntityChain); i { case 0: return &v.state case 1: @@ -1738,7 +1878,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EntityEntitlements); i { + switch v := v.(*Entity); i { case 0: return &v.state case 1: @@ -1750,7 +1890,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Resource); i { + switch v := v.(*EntityEntitlements); i { case 0: return &v.state case 1: @@ -1762,7 +1902,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ResourceDecision); i { + switch v := v.(*Resource); i { case 0: return &v.state case 1: @@ -1774,7 +1914,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDecisionRequest); i { + switch v := v.(*ResourceDecision); i { case 0: return &v.state case 1: @@ -1786,7 +1926,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDecisionResponse); i { + switch v := v.(*GetDecisionRequest); i { case 0: return &v.state case 1: @@ -1798,7 +1938,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDecisionMultiResourceRequest); i { + switch v := v.(*GetDecisionResponse); i { case 0: return &v.state case 1: @@ -1810,7 +1950,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDecisionMultiResourceResponse); i { + switch v := v.(*GetDecisionMultiResourceRequest); i { case 0: return &v.state case 1: @@ -1822,7 +1962,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDecisionBulkRequest); i { + switch v := v.(*GetDecisionMultiResourceResponse); i { case 0: return &v.state case 1: @@ -1834,7 +1974,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDecisionBulkResponse); i { + switch v := v.(*GetDecisionBulkRequest); i { case 0: return &v.state case 1: @@ -1846,7 +1986,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetEntitlementsRequest); i { + switch v := v.(*GetDecisionBulkResponse); i { case 0: return &v.state case 1: @@ -1858,7 +1998,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetEntitlementsResponse); i { + switch v := v.(*GetEntitlementsRequest); i { case 0: return &v.state case 1: @@ -1870,7 +2010,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDecisionByTokenRequest); i { + switch v := v.(*GetEntitlementsResponse); i { case 0: return &v.state case 1: @@ -1882,7 +2022,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDecisionByTokenResponse); i { + switch v := v.(*GetEntitlementsByTokenRequest); i { case 0: return &v.state case 1: @@ -1894,7 +2034,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDecisionByTokenMultiResourceRequest); i { + switch v := v.(*GetEntitlementsByTokenResponse); i { case 0: return &v.state case 1: @@ -1906,7 +2046,7 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDecisionByTokenMultiResourceResponse); i { + switch v := v.(*GetDecisionByTokenRequest); i { case 0: return &v.state case 1: @@ -1918,7 +2058,19 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EntityEntitlements_ActionsList); i { + switch v := v.(*GetDecisionByTokenResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_authorization_v2_authorization_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetDecisionByTokenMultiResourceRequest); i { case 0: return &v.state case 1: @@ -1930,6 +2082,30 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetDecisionByTokenMultiResourceResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_authorization_v2_authorization_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EntityEntitlements_ActionsList); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_authorization_v2_authorization_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Resource_AttributeValues); i { case 0: return &v.state @@ -1942,25 +2118,26 @@ func file_authorization_v2_authorization_proto_init() { } } } - file_authorization_v2_authorization_proto_msgTypes[0].OneofWrappers = []interface{}{ + file_authorization_v2_authorization_proto_msgTypes[1].OneofWrappers = []interface{}{ (*Entity_EmailAddress)(nil), (*Entity_UserName)(nil), (*Entity_Claims)(nil), (*Entity_ClientId)(nil), (*Entity_RegisteredResourceValueFqn)(nil), } - file_authorization_v2_authorization_proto_msgTypes[2].OneofWrappers = []interface{}{ + file_authorization_v2_authorization_proto_msgTypes[3].OneofWrappers = []interface{}{ (*Resource_AttributeValues_)(nil), (*Resource_RegisteredResourceValueFqn)(nil), } - file_authorization_v2_authorization_proto_msgTypes[10].OneofWrappers = []interface{}{} + file_authorization_v2_authorization_proto_msgTypes[11].OneofWrappers = []interface{}{} + file_authorization_v2_authorization_proto_msgTypes[13].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_authorization_v2_authorization_proto_rawDesc, NumEnums: 2, - NumMessages: 19, + NumMessages: 22, NumExtensions: 0, NumServices: 1, }, diff --git a/protocol/go/authorization/v2/authorization_grpc.pb.go b/protocol/go/authorization/v2/authorization_grpc.pb.go index 3a005c77f7..9c9959d2c7 100644 --- a/protocol/go/authorization/v2/authorization_grpc.pb.go +++ b/protocol/go/authorization/v2/authorization_grpc.pb.go @@ -25,6 +25,7 @@ const ( AuthorizationService_GetDecisionByToken_FullMethodName = "/authorization.v2.AuthorizationService/GetDecisionByToken" AuthorizationService_GetDecisionByTokenMultiResource_FullMethodName = "/authorization.v2.AuthorizationService/GetDecisionByTokenMultiResource" AuthorizationService_GetEntitlements_FullMethodName = "/authorization.v2.AuthorizationService/GetEntitlements" + AuthorizationService_GetEntitlementsByToken_FullMethodName = "/authorization.v2.AuthorizationService/GetEntitlementsByToken" ) // AuthorizationServiceClient is the client API for AuthorizationService service. @@ -37,6 +38,7 @@ type AuthorizationServiceClient interface { GetDecisionByToken(ctx context.Context, in *GetDecisionByTokenRequest, opts ...grpc.CallOption) (*GetDecisionByTokenResponse, error) GetDecisionByTokenMultiResource(ctx context.Context, in *GetDecisionByTokenMultiResourceRequest, opts ...grpc.CallOption) (*GetDecisionByTokenMultiResourceResponse, error) GetEntitlements(ctx context.Context, in *GetEntitlementsRequest, opts ...grpc.CallOption) (*GetEntitlementsResponse, error) + GetEntitlementsByToken(ctx context.Context, in *GetEntitlementsByTokenRequest, opts ...grpc.CallOption) (*GetEntitlementsByTokenResponse, error) } type authorizationServiceClient struct { @@ -101,6 +103,15 @@ func (c *authorizationServiceClient) GetEntitlements(ctx context.Context, in *Ge return out, nil } +func (c *authorizationServiceClient) GetEntitlementsByToken(ctx context.Context, in *GetEntitlementsByTokenRequest, opts ...grpc.CallOption) (*GetEntitlementsByTokenResponse, error) { + out := new(GetEntitlementsByTokenResponse) + err := c.cc.Invoke(ctx, AuthorizationService_GetEntitlementsByToken_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // AuthorizationServiceServer is the server API for AuthorizationService service. // All implementations must embed UnimplementedAuthorizationServiceServer // for forward compatibility @@ -111,6 +122,7 @@ type AuthorizationServiceServer interface { GetDecisionByToken(context.Context, *GetDecisionByTokenRequest) (*GetDecisionByTokenResponse, error) GetDecisionByTokenMultiResource(context.Context, *GetDecisionByTokenMultiResourceRequest) (*GetDecisionByTokenMultiResourceResponse, error) GetEntitlements(context.Context, *GetEntitlementsRequest) (*GetEntitlementsResponse, error) + GetEntitlementsByToken(context.Context, *GetEntitlementsByTokenRequest) (*GetEntitlementsByTokenResponse, error) mustEmbedUnimplementedAuthorizationServiceServer() } @@ -136,6 +148,9 @@ func (UnimplementedAuthorizationServiceServer) GetDecisionByTokenMultiResource(c func (UnimplementedAuthorizationServiceServer) GetEntitlements(context.Context, *GetEntitlementsRequest) (*GetEntitlementsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetEntitlements not implemented") } +func (UnimplementedAuthorizationServiceServer) GetEntitlementsByToken(context.Context, *GetEntitlementsByTokenRequest) (*GetEntitlementsByTokenResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetEntitlementsByToken not implemented") +} func (UnimplementedAuthorizationServiceServer) mustEmbedUnimplementedAuthorizationServiceServer() {} // UnsafeAuthorizationServiceServer may be embedded to opt out of forward compatibility for this service. @@ -257,6 +272,24 @@ func _AuthorizationService_GetEntitlements_Handler(srv interface{}, ctx context. return interceptor(ctx, in, info, handler) } +func _AuthorizationService_GetEntitlementsByToken_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetEntitlementsByTokenRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AuthorizationServiceServer).GetEntitlementsByToken(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: AuthorizationService_GetEntitlementsByToken_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AuthorizationServiceServer).GetEntitlementsByToken(ctx, req.(*GetEntitlementsByTokenRequest)) + } + return interceptor(ctx, in, info, handler) +} + // AuthorizationService_ServiceDesc is the grpc.ServiceDesc for AuthorizationService service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -288,6 +321,10 @@ var AuthorizationService_ServiceDesc = grpc.ServiceDesc{ MethodName: "GetEntitlements", Handler: _AuthorizationService_GetEntitlements_Handler, }, + { + MethodName: "GetEntitlementsByToken", + Handler: _AuthorizationService_GetEntitlementsByToken_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "authorization/v2/authorization.proto", diff --git a/protocol/go/authorization/v2/authorizationv2connect/authorization.connect.go b/protocol/go/authorization/v2/authorizationv2connect/authorization.connect.go index fad108edec..359e8391c1 100644 --- a/protocol/go/authorization/v2/authorizationv2connect/authorization.connect.go +++ b/protocol/go/authorization/v2/authorizationv2connect/authorization.connect.go @@ -51,6 +51,9 @@ const ( // AuthorizationServiceGetEntitlementsProcedure is the fully-qualified name of the // AuthorizationService's GetEntitlements RPC. AuthorizationServiceGetEntitlementsProcedure = "/authorization.v2.AuthorizationService/GetEntitlements" + // AuthorizationServiceGetEntitlementsByTokenProcedure is the fully-qualified name of the + // AuthorizationService's GetEntitlementsByToken RPC. + AuthorizationServiceGetEntitlementsByTokenProcedure = "/authorization.v2.AuthorizationService/GetEntitlementsByToken" ) // These variables are the protoreflect.Descriptor objects for the RPCs defined in this package. @@ -62,6 +65,7 @@ var ( authorizationServiceGetDecisionByTokenMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetDecisionByToken") authorizationServiceGetDecisionByTokenMultiResourceMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetDecisionByTokenMultiResource") authorizationServiceGetEntitlementsMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetEntitlements") + authorizationServiceGetEntitlementsByTokenMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetEntitlementsByToken") ) // AuthorizationServiceClient is a client for the authorization.v2.AuthorizationService service. @@ -72,6 +76,7 @@ type AuthorizationServiceClient interface { GetDecisionByToken(context.Context, *connect.Request[v2.GetDecisionByTokenRequest]) (*connect.Response[v2.GetDecisionByTokenResponse], error) GetDecisionByTokenMultiResource(context.Context, *connect.Request[v2.GetDecisionByTokenMultiResourceRequest]) (*connect.Response[v2.GetDecisionByTokenMultiResourceResponse], error) GetEntitlements(context.Context, *connect.Request[v2.GetEntitlementsRequest]) (*connect.Response[v2.GetEntitlementsResponse], error) + GetEntitlementsByToken(context.Context, *connect.Request[v2.GetEntitlementsByTokenRequest]) (*connect.Response[v2.GetEntitlementsByTokenResponse], error) } // NewAuthorizationServiceClient constructs a client for the authorization.v2.AuthorizationService @@ -120,6 +125,12 @@ func NewAuthorizationServiceClient(httpClient connect.HTTPClient, baseURL string connect.WithSchema(authorizationServiceGetEntitlementsMethodDescriptor), connect.WithClientOptions(opts...), ), + getEntitlementsByToken: connect.NewClient[v2.GetEntitlementsByTokenRequest, v2.GetEntitlementsByTokenResponse]( + httpClient, + baseURL+AuthorizationServiceGetEntitlementsByTokenProcedure, + connect.WithSchema(authorizationServiceGetEntitlementsByTokenMethodDescriptor), + connect.WithClientOptions(opts...), + ), } } @@ -131,6 +142,7 @@ type authorizationServiceClient struct { getDecisionByToken *connect.Client[v2.GetDecisionByTokenRequest, v2.GetDecisionByTokenResponse] getDecisionByTokenMultiResource *connect.Client[v2.GetDecisionByTokenMultiResourceRequest, v2.GetDecisionByTokenMultiResourceResponse] getEntitlements *connect.Client[v2.GetEntitlementsRequest, v2.GetEntitlementsResponse] + getEntitlementsByToken *connect.Client[v2.GetEntitlementsByTokenRequest, v2.GetEntitlementsByTokenResponse] } // GetDecision calls authorization.v2.AuthorizationService.GetDecision. @@ -164,6 +176,11 @@ func (c *authorizationServiceClient) GetEntitlements(ctx context.Context, req *c return c.getEntitlements.CallUnary(ctx, req) } +// GetEntitlementsByToken calls authorization.v2.AuthorizationService.GetEntitlementsByToken. +func (c *authorizationServiceClient) GetEntitlementsByToken(ctx context.Context, req *connect.Request[v2.GetEntitlementsByTokenRequest]) (*connect.Response[v2.GetEntitlementsByTokenResponse], error) { + return c.getEntitlementsByToken.CallUnary(ctx, req) +} + // AuthorizationServiceHandler is an implementation of the authorization.v2.AuthorizationService // service. type AuthorizationServiceHandler interface { @@ -173,6 +190,7 @@ type AuthorizationServiceHandler interface { GetDecisionByToken(context.Context, *connect.Request[v2.GetDecisionByTokenRequest]) (*connect.Response[v2.GetDecisionByTokenResponse], error) GetDecisionByTokenMultiResource(context.Context, *connect.Request[v2.GetDecisionByTokenMultiResourceRequest]) (*connect.Response[v2.GetDecisionByTokenMultiResourceResponse], error) GetEntitlements(context.Context, *connect.Request[v2.GetEntitlementsRequest]) (*connect.Response[v2.GetEntitlementsResponse], error) + GetEntitlementsByToken(context.Context, *connect.Request[v2.GetEntitlementsByTokenRequest]) (*connect.Response[v2.GetEntitlementsByTokenResponse], error) } // NewAuthorizationServiceHandler builds an HTTP handler from the service implementation. It returns @@ -217,6 +235,12 @@ func NewAuthorizationServiceHandler(svc AuthorizationServiceHandler, opts ...con connect.WithSchema(authorizationServiceGetEntitlementsMethodDescriptor), connect.WithHandlerOptions(opts...), ) + authorizationServiceGetEntitlementsByTokenHandler := connect.NewUnaryHandler( + AuthorizationServiceGetEntitlementsByTokenProcedure, + svc.GetEntitlementsByToken, + connect.WithSchema(authorizationServiceGetEntitlementsByTokenMethodDescriptor), + connect.WithHandlerOptions(opts...), + ) return "/authorization.v2.AuthorizationService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { switch r.URL.Path { case AuthorizationServiceGetDecisionProcedure: @@ -231,6 +255,8 @@ func NewAuthorizationServiceHandler(svc AuthorizationServiceHandler, opts ...con authorizationServiceGetDecisionByTokenMultiResourceHandler.ServeHTTP(w, r) case AuthorizationServiceGetEntitlementsProcedure: authorizationServiceGetEntitlementsHandler.ServeHTTP(w, r) + case AuthorizationServiceGetEntitlementsByTokenProcedure: + authorizationServiceGetEntitlementsByTokenHandler.ServeHTTP(w, r) default: http.NotFound(w, r) } @@ -263,3 +289,7 @@ func (UnimplementedAuthorizationServiceHandler) GetDecisionByTokenMultiResource( func (UnimplementedAuthorizationServiceHandler) GetEntitlements(context.Context, *connect.Request[v2.GetEntitlementsRequest]) (*connect.Response[v2.GetEntitlementsResponse], error) { return nil, connect.NewError(connect.CodeUnimplemented, errors.New("authorization.v2.AuthorizationService.GetEntitlements is not implemented")) } + +func (UnimplementedAuthorizationServiceHandler) GetEntitlementsByToken(context.Context, *connect.Request[v2.GetEntitlementsByTokenRequest]) (*connect.Response[v2.GetEntitlementsByTokenResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("authorization.v2.AuthorizationService.GetEntitlementsByToken is not implemented")) +} diff --git a/protocol/go/entityresolution/entity_resolution.pb.go b/protocol/go/entityresolution/entity_resolution.pb.go index 77187d7bd7..5dce9d6f7e 100644 --- a/protocol/go/entityresolution/entity_resolution.pb.go +++ b/protocol/go/entityresolution/entity_resolution.pb.go @@ -7,6 +7,7 @@ package entityresolution import ( + _ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate" authorization "github.com/opentdf/platform/protocol/go/authorization" v2 "github.com/opentdf/platform/protocol/go/authorization/v2" _ "google.golang.org/genproto/googleapis/api/annotations" @@ -414,91 +415,103 @@ var file_entityresolution_entity_resolution_proto_rawDesc = []byte{ 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x24, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, - 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x86, 0x01, 0x0a, - 0x16, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x39, 0x0a, 0x0b, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x5f, 0x76, 0x32, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x18, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x69, 0x65, 0x73, 0x56, 0x32, 0x22, 0x7b, 0x0a, 0x14, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, - 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x42, 0x0a, - 0x10, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x70, 0x72, 0x6f, 0x70, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, - 0x52, 0x0f, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, - 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, - 0x49, 0x64, 0x22, 0x78, 0x0a, 0x17, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x45, 0x6e, 0x74, - 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, - 0x16, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, + 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa6, 0x02, 0x0a, 0x16, 0x52, 0x65, + 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x39, 0x0a, 0x0b, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x69, 0x65, 0x73, 0x5f, 0x76, 0x32, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, + 0x56, 0x32, 0x3a, 0x9d, 0x01, 0xba, 0x48, 0x99, 0x01, 0x1a, 0x96, 0x01, 0x0a, 0x2c, 0x72, 0x65, + 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x5f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x5f, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x61, 0x74, 0x5f, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x5f, + 0x6f, 0x6e, 0x65, 0x5f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x06, 0x65, 0x69, 0x74, 0x68, + 0x65, 0x72, 0x1a, 0x5e, 0x28, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x68, 0x61, 0x73, 0x28, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x5f, 0x76, 0x32, + 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x21, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x29, 0x20, 0x26, 0x26, 0x20, 0x68, 0x61, 0x73, 0x28, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x5f, 0x76, 0x32, + 0x29, 0x29, 0x22, 0x7b, 0x0a, 0x14, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x70, 0x72, + 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x42, 0x0a, 0x10, 0x61, 0x64, + 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0f, 0x61, + 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x73, 0x12, 0x1f, + 0x0a, 0x0b, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x49, 0x64, 0x22, + 0x78, 0x0a, 0x17, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, + 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x16, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x15, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x70, 0x72, 0x65, 0x73, + 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x8b, 0x01, 0x0a, 0x13, 0x45, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x2e, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, + 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x4f, 0x0a, 0x1f, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, + 0x4a, 0x77, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x06, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x52, 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x22, 0x63, 0x0a, 0x20, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, + 0x6d, 0x4a, 0x77, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x0d, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, + 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x32, 0xd6, 0x02, + 0x0a, 0x17, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, + 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8c, 0x01, 0x0a, 0x0f, 0x52, 0x65, + 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x28, 0x2e, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, + 0x76, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x01, 0x2a, 0x22, 0x19, 0x2f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x70, - 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x8b, 0x01, 0x0a, - 0x13, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x45, - 0x72, 0x72, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x12, 0x2e, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x03, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x4f, 0x0a, 0x1f, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, - 0x72, 0x6f, 0x6d, 0x4a, 0x77, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, - 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x52, 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x22, 0x63, 0x0a, 0x20, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, - 0x46, 0x72, 0x6f, 0x6d, 0x4a, 0x77, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x3f, 0x0a, 0x0d, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, - 0x69, 0x6e, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x73, - 0x32, 0xd6, 0x02, 0x0a, 0x17, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x6c, - 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8c, 0x01, 0x0a, - 0x0f, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, - 0x12, 0x28, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, - 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, - 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x01, 0x2a, - 0x22, 0x19, 0x2f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x12, 0xab, 0x01, 0x0a, 0x18, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, - 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x4a, 0x77, 0x74, 0x12, 0x31, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x12, 0xab, 0x01, 0x0a, 0x18, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, + 0x6f, 0x6d, 0x4a, 0x77, 0x74, 0x12, 0x31, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, + 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x4a, 0x77, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, - 0x6d, 0x4a, 0x77, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, - 0x46, 0x72, 0x6f, 0x6d, 0x4a, 0x77, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x3a, 0x01, 0x2a, 0x22, 0x1d, 0x2f, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x42, 0xc7, 0x01, 0x0a, 0x14, 0x63, 0x6f, - 0x6d, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x42, 0x15, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x38, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2f, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x2f, 0x67, 0x6f, 0x2f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, - 0x75, 0x74, 0x69, 0x6f, 0x6e, 0xa2, 0x02, 0x03, 0x45, 0x58, 0x58, 0xaa, 0x02, 0x10, 0x45, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0xca, 0x02, - 0x10, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, - 0x6e, 0xe2, 0x02, 0x1c, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, - 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0xea, 0x02, 0x10, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6d, 0x4a, 0x77, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x22, 0x3a, 0x01, 0x2a, 0x22, 0x1d, 0x2f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x42, 0xc7, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x42, + 0x15, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, + 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x38, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, + 0x6f, 0x2f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, + 0x6f, 0x6e, 0xa2, 0x02, 0x03, 0x45, 0x58, 0x58, 0xaa, 0x02, 0x10, 0x45, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0xca, 0x02, 0x10, 0x45, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0xe2, 0x02, + 0x1c, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, + 0x6e, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x10, + 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/service/authorization/authorization.proto b/service/authorization/authorization.proto index 6af0bb706f..ca06ad6463 100644 --- a/service/authorization/authorization.proto +++ b/service/authorization/authorization.proto @@ -291,18 +291,18 @@ message GetDecisionsByTokenResponse { } service AuthorizationService { - // Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetMultiResourceDecision, GetBulkDecision) + // Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetDecisionMultiResource, GetDecisionBulk) rpc GetDecisions(GetDecisionsRequest) returns (GetDecisionsResponse) { option (google.api.http) = { post: "/v1/authorization" body: "*" }; } - // Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetMultiResourceDecision) + // Deprecated: Use AuthorizationV2 methods instead (GetDecisionByToken, GetDecisionByTokenMultiResource) rpc GetDecisionsByToken(GetDecisionsByTokenRequest) returns (GetDecisionsByTokenResponse) { option (google.api.http) = {post: "/v1/token/authorization"}; } - // Deprecated: Use AuthorizationV2 method instead (GetEntitlements) + // Deprecated: Use AuthorizationV2 method instead (GetEntitlements, GetEntitlementsByToken) rpc GetEntitlements(GetEntitlementsRequest) returns (GetEntitlementsResponse) { option (google.api.http) = { post: "/v1/entitlements" diff --git a/service/authorization/v2/authorization.proto b/service/authorization/v2/authorization.proto index 6add3b4804..0acbd8b177 100644 --- a/service/authorization/v2/authorization.proto +++ b/service/authorization/v2/authorization.proto @@ -15,6 +15,16 @@ enum Decision { // DECISION_OBLIGATED = 3; } +// A set of related PE and NPE +message EntityChain { + // ephemeral id for tracking between request and response + string ephemeral_chain_id = 1; + repeated Entity entities = 2 [ + (buf.validate.field).required = true, + (buf.validate.field).repeated = {min_items: 1} + ]; +} + // PE (Person Entity) or NPE (Non-Person Entity) message Entity { // ephemeral id for tracking between request and response @@ -38,11 +48,6 @@ message Entity { Category category = 9; } -// Entity type for custom entities beyond the standard types -// message EntityCustom { -// google.protobuf.Any extension = 1; -// } - // Entitlements for a given entity, mapping each attribute value FQN to any entitled actions[] message EntityEntitlements { message ActionsList { @@ -72,7 +77,7 @@ message Resource { message ResourceDecision { // ephemeral id for tracking between request and response string ephemeral_resource_id = 1; - // the decision result + // decision result Decision decision = 3; } @@ -81,7 +86,7 @@ message ResourceDecision { // 2. one action // 3. one resource message GetDecisionRequest { - authorization.EntityChain entity = 1 [(buf.validate.field).required = true]; + EntityChain entity = 1 [(buf.validate.field).required = true]; // name on action is required policy.Action action = 2 [(buf.validate.field).required = true]; Resource resource = 3 [(buf.validate.field).required = true]; @@ -93,14 +98,10 @@ message GetDecisionRequest { }; } message GetDecisionResponse { - // ephemeral id for tracking between request and response - string ephemeral_entity_chain_id = 1; - // name on action is required - policy.Action action = 2; - // the decision on the resource - ResourceDecision decision = 3; + // decision on the resource + ResourceDecision decision = 1; // optional list of obligations represented in URI format - // repeated string obligations = 4; + // repeated string obligations = 2; } // Can the entity (PE or NPE) access? @@ -109,8 +110,8 @@ message GetDecisionResponse { // 3. multiple resources // Note: this is a more performant bulk request for multiple resource decisions message GetDecisionMultiResourceRequest { - // The entity chain must be defined - authorization.EntityChain entity = 1 [(buf.validate.field).required = true]; + // entity chain must be defined + EntityChain entity = 1 [(buf.validate.field).required = true]; // name on action is required policy.Action action = 2 [(buf.validate.field).required = true]; repeated Resource resources = 3 [ @@ -125,14 +126,10 @@ message GetDecisionMultiResourceRequest { }; } message GetDecisionMultiResourceResponse { - // ephemeral id for tracking between request and response - string ephemeral_entity_chain_id = 1; - // name on action is to be relied upon - policy.Action action = 2; // convenience flag indicating global resource decisions result (permit/deny) - google.protobuf.BoolValue all_permitted = 3; + google.protobuf.BoolValue all_permitted = 1; // individual resource decisions - repeated ResourceDecision resource_decisions = 4; + repeated ResourceDecision resource_decisions = 2; } // Can the entities (PE or NPE) access? @@ -146,17 +143,12 @@ message GetDecisionBulkResponse { repeated GetDecisionMultiResourceResponse decision_responses = 1; } -// What can the entity do, broken down as permitted actions on attribute value FQNs +// What can the entity (PE or NPE, represented by the entity chain) do, broken down as permitted actions on attribute value FQNs? // // Note: the v1 API parameter 'scope' has been dropped, and it is recommended to use // GetDecision if the resource is known message GetEntitlementsRequest { - // list of requested entities - // todo: should this be an entity chain? - repeated Entity entities = 1 [ - (buf.validate.field).required = true, - (buf.validate.field).repeated = {min_items: 1} - ]; + EntityChain entity_chain = 1 [(buf.validate.field).required = true]; // optional parameter to return all entitled values for attribute definitions with hierarchy rules, propagating // down the hierarchical values instead of returning solely the value that is directly entitled optional bool with_comprehensive_hierarchy = 2; @@ -165,6 +157,17 @@ message GetEntitlementsResponse { repeated EntityEntitlements entitlements = 1; } +// What can the entity (PE or NPE, represented by the token) do, broken down as permitted actions on attribute value FQNs? +message GetEntitlementsByTokenRequest { + authorization.Token token = 1 [(buf.validate.field).required = true]; + // optional parameter to return all entitled values for attribute definitions with hierarchy rules, propagating + // down the hierarchical values instead of returning solely the value that is directly entitled + optional bool with_comprehensive_hierarchy = 2; +} +message GetEntitlementsByTokenResponse { + repeated EntityEntitlements entitlements = 1; +} + // Can the entity (PE or NPE) represented by this token access? // 1. one token // 2. one action @@ -205,11 +208,10 @@ message GetDecisionByTokenMultiResourceRequest { }; } message GetDecisionByTokenMultiResourceResponse { - policy.Action action = 1; // convenience flag indicating global resource decisions result (permit/deny) - google.protobuf.BoolValue all_permitted = 2; + google.protobuf.BoolValue all_permitted = 1; // individual resource decisions - repeated ResourceDecision resource_decisions = 4; + repeated ResourceDecision resource_decisions = 2; } service AuthorizationService { @@ -221,4 +223,5 @@ service AuthorizationService { rpc GetDecisionByTokenMultiResource(GetDecisionByTokenMultiResourceRequest) returns (GetDecisionByTokenMultiResourceResponse) {} rpc GetEntitlements(GetEntitlementsRequest) returns (GetEntitlementsResponse) {} + rpc GetEntitlementsByToken(GetEntitlementsByTokenRequest) returns (GetEntitlementsByTokenResponse) {} } diff --git a/service/entityresolution/entity_resolution.proto b/service/entityresolution/entity_resolution.proto index 5e04c2788c..82b5656e78 100644 --- a/service/entityresolution/entity_resolution.proto +++ b/service/entityresolution/entity_resolution.proto @@ -4,6 +4,7 @@ package entityresolution; import "authorization/authorization.proto"; import "authorization/v2/authorization.proto"; +import "buf/validate/validate.proto"; import "google/api/annotations.proto"; import "google/protobuf/any.proto"; import "google/protobuf/struct.proto"; @@ -28,6 +29,12 @@ message ResolveEntitiesRequest { // either v1 or v2 authorization entities are permitted, but not both repeated authorization.Entity entities = 1; repeated authorization.v2.Entity entities_v2 = 2; + + option (buf.validate.message).cel = { + id: "resolve_entities_request.at_least_one_entity" + message: "either" + expression: "(has(this.entities) && !has(this.entities_v2) || !has(this.entities) && has(this.entities_v2))" + }; } message EntityRepresentation { @@ -35,7 +42,6 @@ message EntityRepresentation { string original_id = 2; // ephemeral entity id from the request } - /* Example: Get idp attributes for bob and alice { @@ -63,7 +69,6 @@ message EntityNotFoundError { string entity = 4; } - /* Example: Get Entity chains for tokens aaaaaa and bbbbbb { @@ -75,50 +80,49 @@ message EntityNotFoundError { */ message CreateEntityChainFromJwtRequest { - repeated authorization.Token tokens = 1; + repeated authorization.Token tokens = 1; } /* - Example: Return the entity chains from the provided tokens - { - "entity_chains": [ + Example: Return the entity chains from the provided tokens { - "id": "tok1", - "entities": [ - { - "clientId": "client1" - } - ] - }, - { - "id": "tok2", - "entities": [ - { - "userName": "alice", - "clientId": "client2" - } - ] + "entity_chains": [ + { + "id": "tok1", + "entities": [ + { + "clientId": "client1" + } + ] + }, + { + "id": "tok2", + "entities": [ + { + "userName": "alice", + "clientId": "client2" + } + ] + } + ] } - ] - } */ message CreateEntityChainFromJwtResponse { repeated authorization.EntityChain entity_chains = 1; } - service EntityResolutionService { rpc ResolveEntities(ResolveEntitiesRequest) returns (ResolveEntitiesResponse) { option (google.api.http) = { - post: "/entityresolution/resolve" - body: "*"; + post: "/entityresolution/resolve" + body: "*" }; } rpc CreateEntityChainFromJwt(CreateEntityChainFromJwtRequest) returns (CreateEntityChainFromJwtResponse) { option (google.api.http) = { - post: "/entityresolution/entitychain" - body: "*"; + post: "/entityresolution/entitychain" + body: "*" }; } } From 0ddaeea12b4d3fed9315a7ead6adf58ae6b070e2 Mon Sep 17 00:00:00 2001 From: jakedoublev Date: Tue, 13 May 2025 14:47:12 -0700 Subject: [PATCH 28/49] ERS v2 after PR review discussion --- docs/grpc/index.html | 230 ++++++++ .../v2/entity_resolution.swagger.json | 176 ++++++ .../v2/entity_resolution.pb.go | 553 ++++++++++++++++++ .../v2/entity_resolution_grpc.pb.go | 184 ++++++ .../entity_resolution.connect.go | 178 ++++++ .../v2/entity_resolution.proto | 41 ++ 6 files changed, 1362 insertions(+) create mode 100644 docs/openapi/entityresolution/v2/entity_resolution.swagger.json create mode 100644 protocol/go/entityresolution/v2/entity_resolution.pb.go create mode 100644 protocol/go/entityresolution/v2/entity_resolution_grpc.pb.go create mode 100644 protocol/go/entityresolution/v2/entityresolutionv2connect/entity_resolution.connect.go create mode 100644 service/entityresolution/v2/entity_resolution.proto diff --git a/docs/grpc/index.html b/docs/grpc/index.html index a049309cc9..91ccfbee0e 100644 --- a/docs/grpc/index.html +++ b/docs/grpc/index.html @@ -589,6 +589,45 @@

      Table of Contents

      +
    • + entityresolution/v2/entity_resolution.proto + +
    • + +
    • kas/kas.proto
        @@ -5285,6 +5324,197 @@

        Methods with HTTP bindings

        +
        +

        entityresolution/v2/entity_resolution.proto

        Top +
        +

        + + +

        CreateEntityChainFromJwtMultiRequest

        +

        Create an entity chain from multiple JWTs.

        + + + + + + + + + + + + + + + + +
        FieldTypeLabelDescription
        tokenauthorization.Tokenrepeated

        + + + + + +

        CreateEntityChainFromJwtMultiResponse

        +

        + + + + + + + + + + + + + + + + +
        FieldTypeLabelDescription
        entity_chainsauthorization.v2.EntityChainrepeated

        + + + + + +

        CreateEntityChainFromJwtRequest

        +

        Create an entity chain from a single JWT.

        + + + + + + + + + + + + + + + + +
        FieldTypeLabelDescription
        tokenauthorization.Token

        + + + + + +

        CreateEntityChainFromJwtResponse

        +

        + + + + + + + + + + + + + + + + +
        FieldTypeLabelDescription
        entity_chainsauthorization.v2.EntityChain

        + + + + + +

        ResolveEntitiesRequest

        +

        Resolve a set of entities to their representations.

        + + + + + + + + + + + + + + + + +
        FieldTypeLabelDescription
        entities_v2authorization.v2.Entityrepeated

        + + + + + +

        ResolveEntitiesResponse

        +

        + + + + + + + + + + + + + + + + +
        FieldTypeLabelDescription
        entity_representationsentityresolution.EntityRepresentationrepeated

        + + + + + + + + + + + +

        EntityResolutionService

        +

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Method NameRequest TypeResponse TypeDescription
        ResolveEntitiesResolveEntitiesRequestResolveEntitiesResponse

        CreateEntityChainFromJwtCreateEntityChainFromJwtRequestCreateEntityChainFromJwtResponse

        CreateEntityChainFromJwtMultiCreateEntityChainFromJwtMultiRequestCreateEntityChainFromJwtMultiResponse

        + + + +

        kas/kas.proto

        Top
        diff --git a/docs/openapi/entityresolution/v2/entity_resolution.swagger.json b/docs/openapi/entityresolution/v2/entity_resolution.swagger.json new file mode 100644 index 0000000000..829aeab8fb --- /dev/null +++ b/docs/openapi/entityresolution/v2/entity_resolution.swagger.json @@ -0,0 +1,176 @@ +{ + "swagger": "2.0", + "info": { + "title": "entityresolution/v2/entity_resolution.proto", + "version": "version not set" + }, + "tags": [ + { + "name": "EntityResolutionService" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": {}, + "definitions": { + "authorizationToken": { + "type": "object", + "properties": { + "id": { + "type": "string", + "title": "ephemeral id for tracking between request and response" + }, + "jwt": { + "type": "string", + "title": "the token" + } + } + }, + "authorizationv2Entity": { + "type": "object", + "properties": { + "ephemeralId": { + "type": "string", + "title": "ephemeral id for tracking between request and response" + }, + "emailAddress": { + "type": "string", + "title": "one of the entity options must be set" + }, + "userName": { + "type": "string" + }, + "claims": { + "$ref": "#/definitions/protobufAny", + "title": "used by ERS claims mode" + }, + "clientId": { + "type": "string", + "title": "EntityCustom custom = 5;" + }, + "registeredResourceValueFqn": { + "type": "string" + }, + "category": { + "$ref": "#/definitions/authorizationv2EntityCategory" + } + }, + "title": "PE (Person Entity) or NPE (Non-Person Entity)" + }, + "authorizationv2EntityCategory": { + "type": "string", + "enum": [ + "CATEGORY_UNSPECIFIED", + "CATEGORY_SUBJECT", + "CATEGORY_ENVIRONMENT" + ], + "default": "CATEGORY_UNSPECIFIED" + }, + "authorizationv2EntityChain": { + "type": "object", + "properties": { + "ephemeralChainId": { + "type": "string", + "title": "ephemeral id for tracking between request and response" + }, + "entities": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/authorizationv2Entity" + } + } + }, + "title": "A set of related PE and NPE" + }, + "entityresolutionEntityRepresentation": { + "type": "object", + "properties": { + "additionalProps": { + "type": "array", + "items": { + "type": "object" + } + }, + "originalId": { + "type": "string", + "title": "ephemeral entity id from the request" + } + } + }, + "entityresolutionv2CreateEntityChainFromJwtResponse": { + "type": "object", + "properties": { + "entityChains": { + "$ref": "#/definitions/authorizationv2EntityChain" + } + } + }, + "entityresolutionv2ResolveEntitiesResponse": { + "type": "object", + "properties": { + "entityRepresentations": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/entityresolutionEntityRepresentation" + } + } + } + }, + "protobufAny": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." + } + }, + "additionalProperties": {}, + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + }, + "protobufNullValue": { + "type": "string", + "enum": [ + "NULL_VALUE" + ], + "default": "NULL_VALUE", + "description": "`NullValue` is a singleton enumeration to represent the null value for the\n`Value` type union.\n\nThe JSON representation for `NullValue` is JSON `null`.\n\n - NULL_VALUE: Null value." + }, + "rpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/protobufAny" + } + } + } + }, + "v2CreateEntityChainFromJwtMultiResponse": { + "type": "object", + "properties": { + "entityChains": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/authorizationv2EntityChain" + } + } + } + } + } +} diff --git a/protocol/go/entityresolution/v2/entity_resolution.pb.go b/protocol/go/entityresolution/v2/entity_resolution.pb.go new file mode 100644 index 0000000000..34fe42316f --- /dev/null +++ b/protocol/go/entityresolution/v2/entity_resolution.pb.go @@ -0,0 +1,553 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.33.0 +// protoc (unknown) +// source: entityresolution/v2/entity_resolution.proto + +package entityresolutionv2 + +import ( + _ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate" + authorization "github.com/opentdf/platform/protocol/go/authorization" + v2 "github.com/opentdf/platform/protocol/go/authorization/v2" + entityresolution "github.com/opentdf/platform/protocol/go/entityresolution" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Resolve a set of entities to their representations. +type ResolveEntitiesRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + EntitiesV2 []*v2.Entity `protobuf:"bytes,2,rep,name=entities_v2,json=entitiesV2,proto3" json:"entities_v2,omitempty"` +} + +func (x *ResolveEntitiesRequest) Reset() { + *x = ResolveEntitiesRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_entityresolution_v2_entity_resolution_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ResolveEntitiesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResolveEntitiesRequest) ProtoMessage() {} + +func (x *ResolveEntitiesRequest) ProtoReflect() protoreflect.Message { + mi := &file_entityresolution_v2_entity_resolution_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ResolveEntitiesRequest.ProtoReflect.Descriptor instead. +func (*ResolveEntitiesRequest) Descriptor() ([]byte, []int) { + return file_entityresolution_v2_entity_resolution_proto_rawDescGZIP(), []int{0} +} + +func (x *ResolveEntitiesRequest) GetEntitiesV2() []*v2.Entity { + if x != nil { + return x.EntitiesV2 + } + return nil +} + +type ResolveEntitiesResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + EntityRepresentations []*entityresolution.EntityRepresentation `protobuf:"bytes,1,rep,name=entity_representations,json=entityRepresentations,proto3" json:"entity_representations,omitempty"` +} + +func (x *ResolveEntitiesResponse) Reset() { + *x = ResolveEntitiesResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_entityresolution_v2_entity_resolution_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ResolveEntitiesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResolveEntitiesResponse) ProtoMessage() {} + +func (x *ResolveEntitiesResponse) ProtoReflect() protoreflect.Message { + mi := &file_entityresolution_v2_entity_resolution_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ResolveEntitiesResponse.ProtoReflect.Descriptor instead. +func (*ResolveEntitiesResponse) Descriptor() ([]byte, []int) { + return file_entityresolution_v2_entity_resolution_proto_rawDescGZIP(), []int{1} +} + +func (x *ResolveEntitiesResponse) GetEntityRepresentations() []*entityresolution.EntityRepresentation { + if x != nil { + return x.EntityRepresentations + } + return nil +} + +// Create an entity chain from a single JWT. +type CreateEntityChainFromJwtRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Token *authorization.Token `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` +} + +func (x *CreateEntityChainFromJwtRequest) Reset() { + *x = CreateEntityChainFromJwtRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_entityresolution_v2_entity_resolution_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateEntityChainFromJwtRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateEntityChainFromJwtRequest) ProtoMessage() {} + +func (x *CreateEntityChainFromJwtRequest) ProtoReflect() protoreflect.Message { + mi := &file_entityresolution_v2_entity_resolution_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateEntityChainFromJwtRequest.ProtoReflect.Descriptor instead. +func (*CreateEntityChainFromJwtRequest) Descriptor() ([]byte, []int) { + return file_entityresolution_v2_entity_resolution_proto_rawDescGZIP(), []int{2} +} + +func (x *CreateEntityChainFromJwtRequest) GetToken() *authorization.Token { + if x != nil { + return x.Token + } + return nil +} + +type CreateEntityChainFromJwtResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + EntityChains *v2.EntityChain `protobuf:"bytes,1,opt,name=entity_chains,json=entityChains,proto3" json:"entity_chains,omitempty"` +} + +func (x *CreateEntityChainFromJwtResponse) Reset() { + *x = CreateEntityChainFromJwtResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_entityresolution_v2_entity_resolution_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateEntityChainFromJwtResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateEntityChainFromJwtResponse) ProtoMessage() {} + +func (x *CreateEntityChainFromJwtResponse) ProtoReflect() protoreflect.Message { + mi := &file_entityresolution_v2_entity_resolution_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateEntityChainFromJwtResponse.ProtoReflect.Descriptor instead. +func (*CreateEntityChainFromJwtResponse) Descriptor() ([]byte, []int) { + return file_entityresolution_v2_entity_resolution_proto_rawDescGZIP(), []int{3} +} + +func (x *CreateEntityChainFromJwtResponse) GetEntityChains() *v2.EntityChain { + if x != nil { + return x.EntityChains + } + return nil +} + +// Create an entity chain from multiple JWTs. +type CreateEntityChainFromJwtMultiRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Token []*authorization.Token `protobuf:"bytes,1,rep,name=token,proto3" json:"token,omitempty"` +} + +func (x *CreateEntityChainFromJwtMultiRequest) Reset() { + *x = CreateEntityChainFromJwtMultiRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_entityresolution_v2_entity_resolution_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateEntityChainFromJwtMultiRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateEntityChainFromJwtMultiRequest) ProtoMessage() {} + +func (x *CreateEntityChainFromJwtMultiRequest) ProtoReflect() protoreflect.Message { + mi := &file_entityresolution_v2_entity_resolution_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateEntityChainFromJwtMultiRequest.ProtoReflect.Descriptor instead. +func (*CreateEntityChainFromJwtMultiRequest) Descriptor() ([]byte, []int) { + return file_entityresolution_v2_entity_resolution_proto_rawDescGZIP(), []int{4} +} + +func (x *CreateEntityChainFromJwtMultiRequest) GetToken() []*authorization.Token { + if x != nil { + return x.Token + } + return nil +} + +type CreateEntityChainFromJwtMultiResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + EntityChains []*v2.EntityChain `protobuf:"bytes,1,rep,name=entity_chains,json=entityChains,proto3" json:"entity_chains,omitempty"` +} + +func (x *CreateEntityChainFromJwtMultiResponse) Reset() { + *x = CreateEntityChainFromJwtMultiResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_entityresolution_v2_entity_resolution_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CreateEntityChainFromJwtMultiResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CreateEntityChainFromJwtMultiResponse) ProtoMessage() {} + +func (x *CreateEntityChainFromJwtMultiResponse) ProtoReflect() protoreflect.Message { + mi := &file_entityresolution_v2_entity_resolution_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CreateEntityChainFromJwtMultiResponse.ProtoReflect.Descriptor instead. +func (*CreateEntityChainFromJwtMultiResponse) Descriptor() ([]byte, []int) { + return file_entityresolution_v2_entity_resolution_proto_rawDescGZIP(), []int{5} +} + +func (x *CreateEntityChainFromJwtMultiResponse) GetEntityChains() []*v2.EntityChain { + if x != nil { + return x.EntityChains + } + return nil +} + +var File_entityresolution_v2_entity_resolution_proto protoreflect.FileDescriptor + +var file_entityresolution_v2_entity_resolution_proto_rawDesc = []byte{ + 0x0a, 0x2b, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, + 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x73, + 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x13, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x1a, 0x21, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x24, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x62, 0x75, 0x66, + 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x28, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x22, 0x60, 0x0a, 0x16, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x45, 0x6e, 0x74, + 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x0b, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x5f, 0x76, 0x32, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x42, 0x0b, 0xba, 0x48, 0x08, + 0xc8, 0x01, 0x01, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, + 0x65, 0x73, 0x56, 0x32, 0x22, 0x78, 0x0a, 0x17, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x45, + 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x5d, 0x0a, 0x16, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, + 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x26, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, + 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, + 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x4d, + 0x0a, 0x1f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, + 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x4a, 0x77, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x2a, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x66, 0x0a, + 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, + 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x4a, 0x77, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x42, 0x0a, 0x0d, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, + 0x68, 0x61, 0x69, 0x6e, 0x73, 0x22, 0x52, 0x0a, 0x24, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x4a, 0x77, + 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, + 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x6b, 0x0a, 0x25, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, + 0x6f, 0x6d, 0x4a, 0x77, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x42, 0x0a, 0x0d, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x43, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x32, 0xb0, 0x03, 0x0a, 0x17, 0x45, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x12, 0x6e, 0x0a, 0x0f, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x45, 0x6e, 0x74, + 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x2b, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, + 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, + 0x6c, 0x76, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, + 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x12, 0x89, 0x01, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x4a, 0x77, 0x74, 0x12, + 0x34, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x4a, 0x77, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, + 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, + 0x6d, 0x4a, 0x77, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x98, + 0x01, 0x0a, 0x1d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, + 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x4a, 0x77, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, + 0x12, 0x39, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x4a, 0x77, 0x74, 0x4d, + 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, + 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x4a, 0x77, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xed, 0x01, 0x0a, 0x17, 0x63, 0x6f, + 0x6d, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x42, 0x15, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, + 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x4e, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, + 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, 0x6f, 0x2f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, + 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x3b, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x32, 0xa2, 0x02, + 0x03, 0x45, 0x58, 0x58, 0xaa, 0x02, 0x13, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, + 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x13, 0x45, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, + 0xe2, 0x02, 0x1f, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, + 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0xea, 0x02, 0x14, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, +} + +var ( + file_entityresolution_v2_entity_resolution_proto_rawDescOnce sync.Once + file_entityresolution_v2_entity_resolution_proto_rawDescData = file_entityresolution_v2_entity_resolution_proto_rawDesc +) + +func file_entityresolution_v2_entity_resolution_proto_rawDescGZIP() []byte { + file_entityresolution_v2_entity_resolution_proto_rawDescOnce.Do(func() { + file_entityresolution_v2_entity_resolution_proto_rawDescData = protoimpl.X.CompressGZIP(file_entityresolution_v2_entity_resolution_proto_rawDescData) + }) + return file_entityresolution_v2_entity_resolution_proto_rawDescData +} + +var file_entityresolution_v2_entity_resolution_proto_msgTypes = make([]protoimpl.MessageInfo, 6) +var file_entityresolution_v2_entity_resolution_proto_goTypes = []interface{}{ + (*ResolveEntitiesRequest)(nil), // 0: entityresolution.v2.ResolveEntitiesRequest + (*ResolveEntitiesResponse)(nil), // 1: entityresolution.v2.ResolveEntitiesResponse + (*CreateEntityChainFromJwtRequest)(nil), // 2: entityresolution.v2.CreateEntityChainFromJwtRequest + (*CreateEntityChainFromJwtResponse)(nil), // 3: entityresolution.v2.CreateEntityChainFromJwtResponse + (*CreateEntityChainFromJwtMultiRequest)(nil), // 4: entityresolution.v2.CreateEntityChainFromJwtMultiRequest + (*CreateEntityChainFromJwtMultiResponse)(nil), // 5: entityresolution.v2.CreateEntityChainFromJwtMultiResponse + (*v2.Entity)(nil), // 6: authorization.v2.Entity + (*entityresolution.EntityRepresentation)(nil), // 7: entityresolution.EntityRepresentation + (*authorization.Token)(nil), // 8: authorization.Token + (*v2.EntityChain)(nil), // 9: authorization.v2.EntityChain +} +var file_entityresolution_v2_entity_resolution_proto_depIdxs = []int32{ + 6, // 0: entityresolution.v2.ResolveEntitiesRequest.entities_v2:type_name -> authorization.v2.Entity + 7, // 1: entityresolution.v2.ResolveEntitiesResponse.entity_representations:type_name -> entityresolution.EntityRepresentation + 8, // 2: entityresolution.v2.CreateEntityChainFromJwtRequest.token:type_name -> authorization.Token + 9, // 3: entityresolution.v2.CreateEntityChainFromJwtResponse.entity_chains:type_name -> authorization.v2.EntityChain + 8, // 4: entityresolution.v2.CreateEntityChainFromJwtMultiRequest.token:type_name -> authorization.Token + 9, // 5: entityresolution.v2.CreateEntityChainFromJwtMultiResponse.entity_chains:type_name -> authorization.v2.EntityChain + 0, // 6: entityresolution.v2.EntityResolutionService.ResolveEntities:input_type -> entityresolution.v2.ResolveEntitiesRequest + 2, // 7: entityresolution.v2.EntityResolutionService.CreateEntityChainFromJwt:input_type -> entityresolution.v2.CreateEntityChainFromJwtRequest + 4, // 8: entityresolution.v2.EntityResolutionService.CreateEntityChainFromJwtMulti:input_type -> entityresolution.v2.CreateEntityChainFromJwtMultiRequest + 1, // 9: entityresolution.v2.EntityResolutionService.ResolveEntities:output_type -> entityresolution.v2.ResolveEntitiesResponse + 3, // 10: entityresolution.v2.EntityResolutionService.CreateEntityChainFromJwt:output_type -> entityresolution.v2.CreateEntityChainFromJwtResponse + 5, // 11: entityresolution.v2.EntityResolutionService.CreateEntityChainFromJwtMulti:output_type -> entityresolution.v2.CreateEntityChainFromJwtMultiResponse + 9, // [9:12] is the sub-list for method output_type + 6, // [6:9] is the sub-list for method input_type + 6, // [6:6] is the sub-list for extension type_name + 6, // [6:6] is the sub-list for extension extendee + 0, // [0:6] is the sub-list for field type_name +} + +func init() { file_entityresolution_v2_entity_resolution_proto_init() } +func file_entityresolution_v2_entity_resolution_proto_init() { + if File_entityresolution_v2_entity_resolution_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_entityresolution_v2_entity_resolution_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ResolveEntitiesRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_entityresolution_v2_entity_resolution_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ResolveEntitiesResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_entityresolution_v2_entity_resolution_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateEntityChainFromJwtRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_entityresolution_v2_entity_resolution_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateEntityChainFromJwtResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_entityresolution_v2_entity_resolution_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateEntityChainFromJwtMultiRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_entityresolution_v2_entity_resolution_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CreateEntityChainFromJwtMultiResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_entityresolution_v2_entity_resolution_proto_rawDesc, + NumEnums: 0, + NumMessages: 6, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_entityresolution_v2_entity_resolution_proto_goTypes, + DependencyIndexes: file_entityresolution_v2_entity_resolution_proto_depIdxs, + MessageInfos: file_entityresolution_v2_entity_resolution_proto_msgTypes, + }.Build() + File_entityresolution_v2_entity_resolution_proto = out.File + file_entityresolution_v2_entity_resolution_proto_rawDesc = nil + file_entityresolution_v2_entity_resolution_proto_goTypes = nil + file_entityresolution_v2_entity_resolution_proto_depIdxs = nil +} diff --git a/protocol/go/entityresolution/v2/entity_resolution_grpc.pb.go b/protocol/go/entityresolution/v2/entity_resolution_grpc.pb.go new file mode 100644 index 0000000000..5aef54e38d --- /dev/null +++ b/protocol/go/entityresolution/v2/entity_resolution_grpc.pb.go @@ -0,0 +1,184 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.3.0 +// - protoc (unknown) +// source: entityresolution/v2/entity_resolution.proto + +package entityresolutionv2 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +const ( + EntityResolutionService_ResolveEntities_FullMethodName = "/entityresolution.v2.EntityResolutionService/ResolveEntities" + EntityResolutionService_CreateEntityChainFromJwt_FullMethodName = "/entityresolution.v2.EntityResolutionService/CreateEntityChainFromJwt" + EntityResolutionService_CreateEntityChainFromJwtMulti_FullMethodName = "/entityresolution.v2.EntityResolutionService/CreateEntityChainFromJwtMulti" +) + +// EntityResolutionServiceClient is the client API for EntityResolutionService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type EntityResolutionServiceClient interface { + ResolveEntities(ctx context.Context, in *ResolveEntitiesRequest, opts ...grpc.CallOption) (*ResolveEntitiesResponse, error) + CreateEntityChainFromJwt(ctx context.Context, in *CreateEntityChainFromJwtRequest, opts ...grpc.CallOption) (*CreateEntityChainFromJwtResponse, error) + CreateEntityChainFromJwtMulti(ctx context.Context, in *CreateEntityChainFromJwtMultiRequest, opts ...grpc.CallOption) (*CreateEntityChainFromJwtMultiResponse, error) +} + +type entityResolutionServiceClient struct { + cc grpc.ClientConnInterface +} + +func NewEntityResolutionServiceClient(cc grpc.ClientConnInterface) EntityResolutionServiceClient { + return &entityResolutionServiceClient{cc} +} + +func (c *entityResolutionServiceClient) ResolveEntities(ctx context.Context, in *ResolveEntitiesRequest, opts ...grpc.CallOption) (*ResolveEntitiesResponse, error) { + out := new(ResolveEntitiesResponse) + err := c.cc.Invoke(ctx, EntityResolutionService_ResolveEntities_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *entityResolutionServiceClient) CreateEntityChainFromJwt(ctx context.Context, in *CreateEntityChainFromJwtRequest, opts ...grpc.CallOption) (*CreateEntityChainFromJwtResponse, error) { + out := new(CreateEntityChainFromJwtResponse) + err := c.cc.Invoke(ctx, EntityResolutionService_CreateEntityChainFromJwt_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *entityResolutionServiceClient) CreateEntityChainFromJwtMulti(ctx context.Context, in *CreateEntityChainFromJwtMultiRequest, opts ...grpc.CallOption) (*CreateEntityChainFromJwtMultiResponse, error) { + out := new(CreateEntityChainFromJwtMultiResponse) + err := c.cc.Invoke(ctx, EntityResolutionService_CreateEntityChainFromJwtMulti_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// EntityResolutionServiceServer is the server API for EntityResolutionService service. +// All implementations must embed UnimplementedEntityResolutionServiceServer +// for forward compatibility +type EntityResolutionServiceServer interface { + ResolveEntities(context.Context, *ResolveEntitiesRequest) (*ResolveEntitiesResponse, error) + CreateEntityChainFromJwt(context.Context, *CreateEntityChainFromJwtRequest) (*CreateEntityChainFromJwtResponse, error) + CreateEntityChainFromJwtMulti(context.Context, *CreateEntityChainFromJwtMultiRequest) (*CreateEntityChainFromJwtMultiResponse, error) + mustEmbedUnimplementedEntityResolutionServiceServer() +} + +// UnimplementedEntityResolutionServiceServer must be embedded to have forward compatible implementations. +type UnimplementedEntityResolutionServiceServer struct { +} + +func (UnimplementedEntityResolutionServiceServer) ResolveEntities(context.Context, *ResolveEntitiesRequest) (*ResolveEntitiesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ResolveEntities not implemented") +} +func (UnimplementedEntityResolutionServiceServer) CreateEntityChainFromJwt(context.Context, *CreateEntityChainFromJwtRequest) (*CreateEntityChainFromJwtResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateEntityChainFromJwt not implemented") +} +func (UnimplementedEntityResolutionServiceServer) CreateEntityChainFromJwtMulti(context.Context, *CreateEntityChainFromJwtMultiRequest) (*CreateEntityChainFromJwtMultiResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateEntityChainFromJwtMulti not implemented") +} +func (UnimplementedEntityResolutionServiceServer) mustEmbedUnimplementedEntityResolutionServiceServer() { +} + +// UnsafeEntityResolutionServiceServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to EntityResolutionServiceServer will +// result in compilation errors. +type UnsafeEntityResolutionServiceServer interface { + mustEmbedUnimplementedEntityResolutionServiceServer() +} + +func RegisterEntityResolutionServiceServer(s grpc.ServiceRegistrar, srv EntityResolutionServiceServer) { + s.RegisterService(&EntityResolutionService_ServiceDesc, srv) +} + +func _EntityResolutionService_ResolveEntities_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ResolveEntitiesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EntityResolutionServiceServer).ResolveEntities(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: EntityResolutionService_ResolveEntities_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EntityResolutionServiceServer).ResolveEntities(ctx, req.(*ResolveEntitiesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _EntityResolutionService_CreateEntityChainFromJwt_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateEntityChainFromJwtRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EntityResolutionServiceServer).CreateEntityChainFromJwt(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: EntityResolutionService_CreateEntityChainFromJwt_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EntityResolutionServiceServer).CreateEntityChainFromJwt(ctx, req.(*CreateEntityChainFromJwtRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _EntityResolutionService_CreateEntityChainFromJwtMulti_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateEntityChainFromJwtMultiRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EntityResolutionServiceServer).CreateEntityChainFromJwtMulti(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: EntityResolutionService_CreateEntityChainFromJwtMulti_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EntityResolutionServiceServer).CreateEntityChainFromJwtMulti(ctx, req.(*CreateEntityChainFromJwtMultiRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// EntityResolutionService_ServiceDesc is the grpc.ServiceDesc for EntityResolutionService service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var EntityResolutionService_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "entityresolution.v2.EntityResolutionService", + HandlerType: (*EntityResolutionServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "ResolveEntities", + Handler: _EntityResolutionService_ResolveEntities_Handler, + }, + { + MethodName: "CreateEntityChainFromJwt", + Handler: _EntityResolutionService_CreateEntityChainFromJwt_Handler, + }, + { + MethodName: "CreateEntityChainFromJwtMulti", + Handler: _EntityResolutionService_CreateEntityChainFromJwtMulti_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "entityresolution/v2/entity_resolution.proto", +} diff --git a/protocol/go/entityresolution/v2/entityresolutionv2connect/entity_resolution.connect.go b/protocol/go/entityresolution/v2/entityresolutionv2connect/entity_resolution.connect.go new file mode 100644 index 0000000000..8ed310670a --- /dev/null +++ b/protocol/go/entityresolution/v2/entityresolutionv2connect/entity_resolution.connect.go @@ -0,0 +1,178 @@ +// Code generated by protoc-gen-connect-go. DO NOT EDIT. +// +// Source: entityresolution/v2/entity_resolution.proto + +package entityresolutionv2connect + +import ( + connect "connectrpc.com/connect" + context "context" + errors "errors" + v2 "github.com/opentdf/platform/protocol/go/entityresolution/v2" + http "net/http" + strings "strings" +) + +// This is a compile-time assertion to ensure that this generated file and the connect package are +// compatible. If you get a compiler error that this constant is not defined, this code was +// generated with a version of connect newer than the one compiled into your binary. You can fix the +// problem by either regenerating this code with an older version of connect or updating the connect +// version compiled into your binary. +const _ = connect.IsAtLeastVersion1_13_0 + +const ( + // EntityResolutionServiceName is the fully-qualified name of the EntityResolutionService service. + EntityResolutionServiceName = "entityresolution.v2.EntityResolutionService" +) + +// These constants are the fully-qualified names of the RPCs defined in this package. They're +// exposed at runtime as Spec.Procedure and as the final two segments of the HTTP route. +// +// Note that these are different from the fully-qualified method names used by +// google.golang.org/protobuf/reflect/protoreflect. To convert from these constants to +// reflection-formatted method names, remove the leading slash and convert the remaining slash to a +// period. +const ( + // EntityResolutionServiceResolveEntitiesProcedure is the fully-qualified name of the + // EntityResolutionService's ResolveEntities RPC. + EntityResolutionServiceResolveEntitiesProcedure = "/entityresolution.v2.EntityResolutionService/ResolveEntities" + // EntityResolutionServiceCreateEntityChainFromJwtProcedure is the fully-qualified name of the + // EntityResolutionService's CreateEntityChainFromJwt RPC. + EntityResolutionServiceCreateEntityChainFromJwtProcedure = "/entityresolution.v2.EntityResolutionService/CreateEntityChainFromJwt" + // EntityResolutionServiceCreateEntityChainFromJwtMultiProcedure is the fully-qualified name of the + // EntityResolutionService's CreateEntityChainFromJwtMulti RPC. + EntityResolutionServiceCreateEntityChainFromJwtMultiProcedure = "/entityresolution.v2.EntityResolutionService/CreateEntityChainFromJwtMulti" +) + +// These variables are the protoreflect.Descriptor objects for the RPCs defined in this package. +var ( + entityResolutionServiceServiceDescriptor = v2.File_entityresolution_v2_entity_resolution_proto.Services().ByName("EntityResolutionService") + entityResolutionServiceResolveEntitiesMethodDescriptor = entityResolutionServiceServiceDescriptor.Methods().ByName("ResolveEntities") + entityResolutionServiceCreateEntityChainFromJwtMethodDescriptor = entityResolutionServiceServiceDescriptor.Methods().ByName("CreateEntityChainFromJwt") + entityResolutionServiceCreateEntityChainFromJwtMultiMethodDescriptor = entityResolutionServiceServiceDescriptor.Methods().ByName("CreateEntityChainFromJwtMulti") +) + +// EntityResolutionServiceClient is a client for the entityresolution.v2.EntityResolutionService +// service. +type EntityResolutionServiceClient interface { + ResolveEntities(context.Context, *connect.Request[v2.ResolveEntitiesRequest]) (*connect.Response[v2.ResolveEntitiesResponse], error) + CreateEntityChainFromJwt(context.Context, *connect.Request[v2.CreateEntityChainFromJwtRequest]) (*connect.Response[v2.CreateEntityChainFromJwtResponse], error) + CreateEntityChainFromJwtMulti(context.Context, *connect.Request[v2.CreateEntityChainFromJwtMultiRequest]) (*connect.Response[v2.CreateEntityChainFromJwtMultiResponse], error) +} + +// NewEntityResolutionServiceClient constructs a client for the +// entityresolution.v2.EntityResolutionService service. By default, it uses the Connect protocol +// with the binary Protobuf Codec, asks for gzipped responses, and sends uncompressed requests. To +// use the gRPC or gRPC-Web protocols, supply the connect.WithGRPC() or connect.WithGRPCWeb() +// options. +// +// The URL supplied here should be the base URL for the Connect or gRPC server (for example, +// http://api.acme.com or https://acme.com/grpc). +func NewEntityResolutionServiceClient(httpClient connect.HTTPClient, baseURL string, opts ...connect.ClientOption) EntityResolutionServiceClient { + baseURL = strings.TrimRight(baseURL, "/") + return &entityResolutionServiceClient{ + resolveEntities: connect.NewClient[v2.ResolveEntitiesRequest, v2.ResolveEntitiesResponse]( + httpClient, + baseURL+EntityResolutionServiceResolveEntitiesProcedure, + connect.WithSchema(entityResolutionServiceResolveEntitiesMethodDescriptor), + connect.WithClientOptions(opts...), + ), + createEntityChainFromJwt: connect.NewClient[v2.CreateEntityChainFromJwtRequest, v2.CreateEntityChainFromJwtResponse]( + httpClient, + baseURL+EntityResolutionServiceCreateEntityChainFromJwtProcedure, + connect.WithSchema(entityResolutionServiceCreateEntityChainFromJwtMethodDescriptor), + connect.WithClientOptions(opts...), + ), + createEntityChainFromJwtMulti: connect.NewClient[v2.CreateEntityChainFromJwtMultiRequest, v2.CreateEntityChainFromJwtMultiResponse]( + httpClient, + baseURL+EntityResolutionServiceCreateEntityChainFromJwtMultiProcedure, + connect.WithSchema(entityResolutionServiceCreateEntityChainFromJwtMultiMethodDescriptor), + connect.WithClientOptions(opts...), + ), + } +} + +// entityResolutionServiceClient implements EntityResolutionServiceClient. +type entityResolutionServiceClient struct { + resolveEntities *connect.Client[v2.ResolveEntitiesRequest, v2.ResolveEntitiesResponse] + createEntityChainFromJwt *connect.Client[v2.CreateEntityChainFromJwtRequest, v2.CreateEntityChainFromJwtResponse] + createEntityChainFromJwtMulti *connect.Client[v2.CreateEntityChainFromJwtMultiRequest, v2.CreateEntityChainFromJwtMultiResponse] +} + +// ResolveEntities calls entityresolution.v2.EntityResolutionService.ResolveEntities. +func (c *entityResolutionServiceClient) ResolveEntities(ctx context.Context, req *connect.Request[v2.ResolveEntitiesRequest]) (*connect.Response[v2.ResolveEntitiesResponse], error) { + return c.resolveEntities.CallUnary(ctx, req) +} + +// CreateEntityChainFromJwt calls +// entityresolution.v2.EntityResolutionService.CreateEntityChainFromJwt. +func (c *entityResolutionServiceClient) CreateEntityChainFromJwt(ctx context.Context, req *connect.Request[v2.CreateEntityChainFromJwtRequest]) (*connect.Response[v2.CreateEntityChainFromJwtResponse], error) { + return c.createEntityChainFromJwt.CallUnary(ctx, req) +} + +// CreateEntityChainFromJwtMulti calls +// entityresolution.v2.EntityResolutionService.CreateEntityChainFromJwtMulti. +func (c *entityResolutionServiceClient) CreateEntityChainFromJwtMulti(ctx context.Context, req *connect.Request[v2.CreateEntityChainFromJwtMultiRequest]) (*connect.Response[v2.CreateEntityChainFromJwtMultiResponse], error) { + return c.createEntityChainFromJwtMulti.CallUnary(ctx, req) +} + +// EntityResolutionServiceHandler is an implementation of the +// entityresolution.v2.EntityResolutionService service. +type EntityResolutionServiceHandler interface { + ResolveEntities(context.Context, *connect.Request[v2.ResolveEntitiesRequest]) (*connect.Response[v2.ResolveEntitiesResponse], error) + CreateEntityChainFromJwt(context.Context, *connect.Request[v2.CreateEntityChainFromJwtRequest]) (*connect.Response[v2.CreateEntityChainFromJwtResponse], error) + CreateEntityChainFromJwtMulti(context.Context, *connect.Request[v2.CreateEntityChainFromJwtMultiRequest]) (*connect.Response[v2.CreateEntityChainFromJwtMultiResponse], error) +} + +// NewEntityResolutionServiceHandler builds an HTTP handler from the service implementation. It +// returns the path on which to mount the handler and the handler itself. +// +// By default, handlers support the Connect, gRPC, and gRPC-Web protocols with the binary Protobuf +// and JSON codecs. They also support gzip compression. +func NewEntityResolutionServiceHandler(svc EntityResolutionServiceHandler, opts ...connect.HandlerOption) (string, http.Handler) { + entityResolutionServiceResolveEntitiesHandler := connect.NewUnaryHandler( + EntityResolutionServiceResolveEntitiesProcedure, + svc.ResolveEntities, + connect.WithSchema(entityResolutionServiceResolveEntitiesMethodDescriptor), + connect.WithHandlerOptions(opts...), + ) + entityResolutionServiceCreateEntityChainFromJwtHandler := connect.NewUnaryHandler( + EntityResolutionServiceCreateEntityChainFromJwtProcedure, + svc.CreateEntityChainFromJwt, + connect.WithSchema(entityResolutionServiceCreateEntityChainFromJwtMethodDescriptor), + connect.WithHandlerOptions(opts...), + ) + entityResolutionServiceCreateEntityChainFromJwtMultiHandler := connect.NewUnaryHandler( + EntityResolutionServiceCreateEntityChainFromJwtMultiProcedure, + svc.CreateEntityChainFromJwtMulti, + connect.WithSchema(entityResolutionServiceCreateEntityChainFromJwtMultiMethodDescriptor), + connect.WithHandlerOptions(opts...), + ) + return "/entityresolution.v2.EntityResolutionService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + switch r.URL.Path { + case EntityResolutionServiceResolveEntitiesProcedure: + entityResolutionServiceResolveEntitiesHandler.ServeHTTP(w, r) + case EntityResolutionServiceCreateEntityChainFromJwtProcedure: + entityResolutionServiceCreateEntityChainFromJwtHandler.ServeHTTP(w, r) + case EntityResolutionServiceCreateEntityChainFromJwtMultiProcedure: + entityResolutionServiceCreateEntityChainFromJwtMultiHandler.ServeHTTP(w, r) + default: + http.NotFound(w, r) + } + }) +} + +// UnimplementedEntityResolutionServiceHandler returns CodeUnimplemented from all methods. +type UnimplementedEntityResolutionServiceHandler struct{} + +func (UnimplementedEntityResolutionServiceHandler) ResolveEntities(context.Context, *connect.Request[v2.ResolveEntitiesRequest]) (*connect.Response[v2.ResolveEntitiesResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("entityresolution.v2.EntityResolutionService.ResolveEntities is not implemented")) +} + +func (UnimplementedEntityResolutionServiceHandler) CreateEntityChainFromJwt(context.Context, *connect.Request[v2.CreateEntityChainFromJwtRequest]) (*connect.Response[v2.CreateEntityChainFromJwtResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("entityresolution.v2.EntityResolutionService.CreateEntityChainFromJwt is not implemented")) +} + +func (UnimplementedEntityResolutionServiceHandler) CreateEntityChainFromJwtMulti(context.Context, *connect.Request[v2.CreateEntityChainFromJwtMultiRequest]) (*connect.Response[v2.CreateEntityChainFromJwtMultiResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("entityresolution.v2.EntityResolutionService.CreateEntityChainFromJwtMulti is not implemented")) +} diff --git a/service/entityresolution/v2/entity_resolution.proto b/service/entityresolution/v2/entity_resolution.proto new file mode 100644 index 0000000000..2e66f84d67 --- /dev/null +++ b/service/entityresolution/v2/entity_resolution.proto @@ -0,0 +1,41 @@ +syntax = "proto3"; + +package entityresolution.v2; + +import "authorization/authorization.proto"; +import "authorization/v2/authorization.proto"; +import "buf/validate/validate.proto"; +import "entityresolution/entity_resolution.proto"; + +// Resolve a set of entities to their representations. +message ResolveEntitiesRequest { + repeated authorization.v2.Entity entities_v2 = 2 [ + (buf.validate.field).required = true, + (buf.validate.field).repeated = {min_items: 1} + ]; +} +message ResolveEntitiesResponse { + repeated entityresolution.EntityRepresentation entity_representations = 1; +} + +// Create an entity chain from a single JWT. +message CreateEntityChainFromJwtRequest { + authorization.Token token = 1; +} +message CreateEntityChainFromJwtResponse { + authorization.v2.EntityChain entity_chains = 1; +} + +// Create an entity chain from multiple JWTs. +message CreateEntityChainFromJwtMultiRequest { + repeated authorization.Token token = 1; +} +message CreateEntityChainFromJwtMultiResponse { + repeated authorization.v2.EntityChain entity_chains = 1; +} + +service EntityResolutionService { + rpc ResolveEntities(ResolveEntitiesRequest) returns (ResolveEntitiesResponse) {} + rpc CreateEntityChainFromJwt(CreateEntityChainFromJwtRequest) returns (CreateEntityChainFromJwtResponse) {} + rpc CreateEntityChainFromJwtMulti(CreateEntityChainFromJwtMultiRequest) returns (CreateEntityChainFromJwtMultiResponse) {} +} From 62ce30d734ebc6807766ed149b0825ad5f6e915d Mon Sep 17 00:00:00 2001 From: jakedoublev Date: Tue, 13 May 2025 15:45:24 -0700 Subject: [PATCH 29/49] feat(core): entityresolutionv2 service engaging auth v2 entity types --- sdk/sdk.go | 3 + ...ity_resolution.go => entity_resolution.go} | 2 +- ...tion_test.go => entity_resolution_test.go} | 2 +- .../claims/v2/entity_resolution.go | 171 ++++++ ...ity_resolution.go => entity_resolution.go} | 2 +- ...tion_test.go => entity_resolution_test.go} | 2 +- .../keycloak/v2/entity_resolution.go | 545 ++++++++++++++++++ .../entityresolution/v2/entity_resolution.go | 53 ++ service/pkg/server/services.go | 7 +- 9 files changed, 782 insertions(+), 5 deletions(-) rename service/entityresolution/claims/{claims_entity_resolution.go => entity_resolution.go} (99%) rename service/entityresolution/claims/{claims_entity_resolution_test.go => entity_resolution_test.go} (99%) create mode 100644 service/entityresolution/claims/v2/entity_resolution.go rename service/entityresolution/keycloak/{keycloak_entity_resolution.go => entity_resolution.go} (99%) rename service/entityresolution/keycloak/{keycloak_entity_resolution_test.go => entity_resolution_test.go} (99%) create mode 100644 service/entityresolution/keycloak/v2/entity_resolution.go create mode 100644 service/entityresolution/v2/entity_resolution.go diff --git a/sdk/sdk.go b/sdk/sdk.go index dd4bfcc851..dced9c9b20 100644 --- a/sdk/sdk.go +++ b/sdk/sdk.go @@ -17,6 +17,7 @@ import ( "github.com/opentdf/platform/lib/ocrypto" "github.com/opentdf/platform/protocol/go/authorization" "github.com/opentdf/platform/protocol/go/entityresolution" + entityresolutionV2 "github.com/opentdf/platform/protocol/go/entityresolution/v2" "github.com/opentdf/platform/protocol/go/policy" "github.com/opentdf/platform/protocol/go/policy/actions" "github.com/opentdf/platform/protocol/go/policy/attributes" @@ -71,6 +72,7 @@ type SDK struct { Attributes attributes.AttributesServiceClient Authorization authorization.AuthorizationServiceClient EntityResoution entityresolution.EntityResolutionServiceClient + EntityResolutionV2 entityresolutionV2.EntityResolutionServiceClient KeyAccessServerRegistry kasregistry.KeyAccessServerRegistryServiceClient Namespaces namespaces.NamespaceServiceClient RegisteredResources registeredresources.RegisteredResourcesServiceClient @@ -214,6 +216,7 @@ func New(platformEndpoint string, opts ...Option) (*SDK, error) { KeyAccessServerRegistry: kasregistry.NewKeyAccessServerRegistryServiceClient(platformConn), Authorization: authorization.NewAuthorizationServiceClient(platformConn), EntityResoution: entityresolution.NewEntityResolutionServiceClient(ersConn), + EntityResolutionV2: entityresolutionV2.NewEntityResolutionServiceClient(ersConn), KeyManagement: keymanagement.NewKeyManagementServiceClient(platformConn), wellknownConfiguration: wellknownconfiguration.NewWellKnownServiceClient(platformConn), }, nil diff --git a/service/entityresolution/claims/claims_entity_resolution.go b/service/entityresolution/claims/entity_resolution.go similarity index 99% rename from service/entityresolution/claims/claims_entity_resolution.go rename to service/entityresolution/claims/entity_resolution.go index 8a6ff92ea1..9e23d90c94 100644 --- a/service/entityresolution/claims/claims_entity_resolution.go +++ b/service/entityresolution/claims/entity_resolution.go @@ -1,4 +1,4 @@ -package entityresolution +package claims import ( "context" diff --git a/service/entityresolution/claims/claims_entity_resolution_test.go b/service/entityresolution/claims/entity_resolution_test.go similarity index 99% rename from service/entityresolution/claims/claims_entity_resolution_test.go rename to service/entityresolution/claims/entity_resolution_test.go index 671391d509..cf16ac4359 100644 --- a/service/entityresolution/claims/claims_entity_resolution_test.go +++ b/service/entityresolution/claims/entity_resolution_test.go @@ -1,4 +1,4 @@ -package entityresolution_test +package claims_test import ( "testing" diff --git a/service/entityresolution/claims/v2/entity_resolution.go b/service/entityresolution/claims/v2/entity_resolution.go new file mode 100644 index 0000000000..86657cae19 --- /dev/null +++ b/service/entityresolution/claims/v2/entity_resolution.go @@ -0,0 +1,171 @@ +package claims + +import ( + "context" + "fmt" + "log/slog" + "strconv" + + "connectrpc.com/connect" + "github.com/lestrrat-go/jwx/v2/jwt" + authz "github.com/opentdf/platform/protocol/go/authorization/v2" + "github.com/opentdf/platform/protocol/go/entityresolution" + ersV2 "github.com/opentdf/platform/protocol/go/entityresolution/v2" + auth "github.com/opentdf/platform/service/authorization" + "github.com/opentdf/platform/service/logger" + "github.com/opentdf/platform/service/pkg/config" + "github.com/opentdf/platform/service/pkg/serviceregistry" + "go.opentelemetry.io/otel/trace" + "google.golang.org/protobuf/encoding/protojson" + "google.golang.org/protobuf/types/known/anypb" + "google.golang.org/protobuf/types/known/structpb" +) + +type ClaimsEntityResolutionServiceV2 struct { + ersV2.UnimplementedEntityResolutionServiceServer + logger *logger.Logger + trace.Tracer +} + +func RegisterClaimsERS(_ config.ServiceConfig, logger *logger.Logger) (ClaimsEntityResolutionServiceV2, serviceregistry.HandlerServer) { + claimsSVC := ClaimsEntityResolutionServiceV2{logger: logger} + return claimsSVC, nil +} + +func (s ClaimsEntityResolutionServiceV2) ResolveEntities(ctx context.Context, req *connect.Request[ersV2.ResolveEntitiesRequest]) (*connect.Response[ersV2.ResolveEntitiesResponse], error) { + resp, err := resolveEntities(ctx, s.logger, req.Msg) + return connect.NewResponse(&resp), err +} + +func (s ClaimsEntityResolutionServiceV2) CreateEntityChainFromJwt(ctx context.Context, req *connect.Request[ersV2.CreateEntityChainFromJwtRequest]) (*connect.Response[ersV2.CreateEntityChainFromJwtResponse], error) { + ctx, span := s.Tracer.Start(ctx, "CreateEntityChainFromJwt") + defer span.End() + + resp, err := createEntityChainFromSingleJwt(ctx, s.logger, req.Msg) + return connect.NewResponse(&resp), err +} +func (s ClaimsEntityResolutionServiceV2) CreateEntityChainFromJwtMulti(ctx context.Context, req *connect.Request[ersV2.CreateEntityChainFromJwtMultiRequest]) (*connect.Response[ersV2.CreateEntityChainFromJwtMultiResponse], error) { + ctx, span := s.Tracer.Start(ctx, "CreateEntityChainFromJwt") + defer span.End() + + resp, err := createEntityChainFromMultiJwt(ctx, s.logger, req.Msg) + return connect.NewResponse(&resp), err +} + +func createEntityChainFromSingleJwt( + _ context.Context, + _ *logger.Logger, + req *ersV2.CreateEntityChainFromJwtRequest, +) (ersV2.CreateEntityChainFromJwtResponse, error) { + tok := req.GetToken() + // for each token in the tokens form an entity chain + entities, err := getEntitiesFromToken(tok.GetJwt()) + if err != nil { + return ersV2.CreateEntityChainFromJwtResponse{}, err + } + chain := &authz.EntityChain{EphemeralChainId: tok.GetId(), Entities: entities} + + return ersV2.CreateEntityChainFromJwtResponse{EntityChains: chain}, nil +} + +func createEntityChainFromMultiJwt( + _ context.Context, + _ *logger.Logger, + req *ersV2.CreateEntityChainFromJwtMultiRequest, +) (ersV2.CreateEntityChainFromJwtMultiResponse, error) { + entityChains := []*authz.EntityChain{} + // for each token in the tokens form an entity chain + for _, tok := range req.GetToken() { + entities, err := getEntitiesFromToken(tok.GetJwt()) + if err != nil { + return ersV2.CreateEntityChainFromJwtMultiResponse{}, err + } + entityChains = append(entityChains, &authz.EntityChain{EphemeralChainId: tok.GetId(), Entities: entities}) + } + return ersV2.CreateEntityChainFromJwtMultiResponse{EntityChains: entityChains}, nil +} + +func resolveEntities( + _ context.Context, + logger *logger.Logger, + req *ersV2.ResolveEntitiesRequest, +) (ersV2.ResolveEntitiesResponse, error) { + entities := req.GetEntitiesV2() + var resolvedEntities []*entityresolution.EntityRepresentation + + for idx, entity := range entities { + entityStruct := &structpb.Struct{} + switch entity.GetEntityType().(type) { + case *authz.Entity_Claims: + claims := entity.GetClaims() + if claims != nil { + err := claims.UnmarshalTo(entityStruct) + if err != nil { + return ersV2.ResolveEntitiesResponse{}, connect.NewError(connect.CodeInvalidArgument, fmt.Errorf("error unpacking anypb.Any to structpb.Struct: %w", err)) + } + } + default: + retrievedStruct, err := entityToStructPb(entity) + if err != nil { + logger.Error("unable to make entity struct", slog.String("error", err.Error())) + return ersV2.ResolveEntitiesResponse{}, connect.NewError(connect.CodeInternal, fmt.Errorf("unable to make entity struct: %w", err)) + } + entityStruct = retrievedStruct + } + // make sure the id field is populated + originialID := entity.GetEphemeralId() + if originialID == "" { + originialID = auth.EntityIDPrefix + strconv.Itoa(idx) + } + resolvedEntities = append( + resolvedEntities, + &entityresolution.EntityRepresentation{ + OriginalId: originialID, + AdditionalProps: []*structpb.Struct{entityStruct}, + }, + ) + } + return ersV2.ResolveEntitiesResponse{EntityRepresentations: resolvedEntities}, nil +} + +func getEntitiesFromToken(jwtString string) ([]*authz.Entity, error) { + token, err := jwt.ParseString(jwtString, jwt.WithVerify(false), jwt.WithValidate(false)) + if err != nil { + return nil, fmt.Errorf("error parsing jwt: %w", err) + } + + claims := token.PrivateClaims() + entities := []*authz.Entity{} + + // Convert map[string]interface{} to *structpb.Struct + structClaims, err := structpb.NewStruct(claims) + if err != nil { + return nil, fmt.Errorf("error converting to structpb.Struct: %w", err) + } + + // Wrap the struct in an *anypb.Any message + anyClaims, err := anypb.New(structClaims) + if err != nil { + return nil, fmt.Errorf("error wrapping in anypb.Any: %w", err) + } + + entities = append(entities, &authz.Entity{ + EntityType: &authz.Entity_Claims{Claims: anyClaims}, + EphemeralId: "jwtentity-claims", + Category: authz.Entity_CATEGORY_SUBJECT, + }) + return entities, nil +} + +func entityToStructPb(entity *authz.Entity) (*structpb.Struct, error) { + entityBytes, err := protojson.Marshal(entity) + if err != nil { + return nil, err + } + var entityStruct structpb.Struct + err = entityStruct.UnmarshalJSON(entityBytes) + if err != nil { + return nil, err + } + return &entityStruct, nil +} diff --git a/service/entityresolution/keycloak/keycloak_entity_resolution.go b/service/entityresolution/keycloak/entity_resolution.go similarity index 99% rename from service/entityresolution/keycloak/keycloak_entity_resolution.go rename to service/entityresolution/keycloak/entity_resolution.go index 8235274d24..420ce5d2e2 100644 --- a/service/entityresolution/keycloak/keycloak_entity_resolution.go +++ b/service/entityresolution/keycloak/entity_resolution.go @@ -1,4 +1,4 @@ -package entityresolution +package keycloak import ( "context" diff --git a/service/entityresolution/keycloak/keycloak_entity_resolution_test.go b/service/entityresolution/keycloak/entity_resolution_test.go similarity index 99% rename from service/entityresolution/keycloak/keycloak_entity_resolution_test.go rename to service/entityresolution/keycloak/entity_resolution_test.go index 0b2fb2478e..31ed7bea09 100644 --- a/service/entityresolution/keycloak/keycloak_entity_resolution_test.go +++ b/service/entityresolution/keycloak/entity_resolution_test.go @@ -1,4 +1,4 @@ -package entityresolution_test +package keycloak_test import ( "encoding/json" diff --git a/service/entityresolution/keycloak/v2/entity_resolution.go b/service/entityresolution/keycloak/v2/entity_resolution.go new file mode 100644 index 0000000000..822a6554c2 --- /dev/null +++ b/service/entityresolution/keycloak/v2/entity_resolution.go @@ -0,0 +1,545 @@ +package keycloak + +import ( + "context" + "encoding/json" + "errors" + "fmt" + "log/slog" + "strconv" + "strings" + + "connectrpc.com/connect" + "github.com/Nerzal/gocloak/v13" + "github.com/go-viper/mapstructure/v2" + "github.com/lestrrat-go/jwx/v2/jwt" + authz "github.com/opentdf/platform/protocol/go/authorization/v2" + "github.com/opentdf/platform/protocol/go/entityresolution" + ersV2 "github.com/opentdf/platform/protocol/go/entityresolution/v2" + auth "github.com/opentdf/platform/service/authorization" + keycloakV1 "github.com/opentdf/platform/service/entityresolution/keycloak" + "github.com/opentdf/platform/service/logger" + "github.com/opentdf/platform/service/pkg/config" + "github.com/opentdf/platform/service/pkg/serviceregistry" + "go.opentelemetry.io/otel/trace" + "google.golang.org/grpc/codes" + "google.golang.org/protobuf/encoding/protojson" + "google.golang.org/protobuf/types/known/structpb" +) + +var ( + ErrCreationFailed = errors.New("resource creation failed") + ErrGetRetrievalFailed = errors.New("resource retrieval failed") + ErrNotFound = errors.New("resource not found") +) + +const ( + ClientJwtSelector = "azp" + UsernameJwtSelector = "preferred_username" +) + +const serviceAccountUsernamePrefix = "service-account-" + +// EntityType constants for clearer type checking +const ( + EntityTypeEmail = "email" + EntityTypeUsername = "username" + EntityTypeClientID = "clientid" +) + +type KeycloakEntityResolutionService struct { + ersV2.UnimplementedEntityResolutionServiceServer + idpConfig keycloakV1.KeycloakConfig + logger *logger.Logger + trace.Tracer +} + +func RegisterKeycloakERS(config config.ServiceConfig, logger *logger.Logger) (*KeycloakEntityResolutionService, serviceregistry.HandlerServer) { + var inputIdpConfig keycloakV1.KeycloakConfig + if err := mapstructure.Decode(config, &inputIdpConfig); err != nil { + panic(err) + } + logger.Debug("entity_resolution configuration", "config", inputIdpConfig) + keycloakSVC := &KeycloakEntityResolutionService{idpConfig: inputIdpConfig, logger: logger} + return keycloakSVC, nil +} + +func (s KeycloakEntityResolutionService) ResolveEntities(ctx context.Context, req *connect.Request[ersV2.ResolveEntitiesRequest]) (*connect.Response[ersV2.ResolveEntitiesResponse], error) { + ctx, span := s.Tracer.Start(ctx, "ResolveEntities") + defer span.End() + + resp, err := EntityResolution(ctx, req.Msg, s.idpConfig, s.logger) + return connect.NewResponse(resp), err +} + +func (s KeycloakEntityResolutionService) CreateEntityChainFromJwt(ctx context.Context, req *connect.Request[ersV2.CreateEntityChainFromJwtRequest]) (*connect.Response[ersV2.CreateEntityChainFromJwtResponse], error) { + ctx, span := s.Tracer.Start(ctx, "CreateEntityChainFromJwt") + defer span.End() + + resp, err := CreateEntityChainFromJwt(ctx, req.Msg, s.idpConfig, s.logger) + return connect.NewResponse(resp), err +} + +func (s KeycloakEntityResolutionService) CreateEntityChainFromJwtMulti(ctx context.Context, req *connect.Request[ersV2.CreateEntityChainFromJwtMultiRequest]) (*connect.Response[ersV2.CreateEntityChainFromJwtMultiResponse], error) { + ctx, span := s.Tracer.Start(ctx, "CreateEntityChainFromJwt") + defer span.End() + + resp, err := CreateEntityChainFromJwtMulti(ctx, req.Msg, s.idpConfig, s.logger) + return connect.NewResponse(resp), err +} + +type InferredIdentityConfig struct { + From EntityImpliedFrom `mapstructure:"from,omitempty" json:"from,omitempty"` +} + +type EntityImpliedFrom struct { + ClientID bool `mapstructure:"clientid,omitempty" json:"clientid,omitempty"` + Email bool `mapstructure:"email,omitempty" json:"email,omitempty"` + Username bool `mapstructure:"username,omitempty" json:"username,omitempty"` +} + +type KeyCloakConnector struct { + token *gocloak.JWT + client *gocloak.GoCloak +} + +// errorHandler provides a centralized way to handle service errors with logging +func errorHandler(ctx context.Context, logger *logger.Logger, code connect.Code, err error, msg string) error { + logger.ErrorContext(ctx, msg, slog.String("error", err.Error())) + return connect.NewError(code, err) +} + +func CreateEntityChainFromJwt( + ctx context.Context, + req *ersV2.CreateEntityChainFromJwtRequest, + kcConfig keycloakV1.KeycloakConfig, + logger *logger.Logger, +) (*ersV2.CreateEntityChainFromJwtResponse, error) { + tok := req.GetToken() + // for each token in the tokens form an entity chain + entities, err := getEntitiesFromToken(ctx, kcConfig, tok.GetJwt(), logger) + if err != nil { + return nil, err + } + entityChain := &authz.EntityChain{EphemeralChainId: tok.GetId(), Entities: entities} + + return &ersV2.CreateEntityChainFromJwtResponse{EntityChains: entityChain}, nil +} +func CreateEntityChainFromJwtMulti( + ctx context.Context, + req *ersV2.CreateEntityChainFromJwtMultiRequest, + kcConfig keycloakV1.KeycloakConfig, + logger *logger.Logger, +) (*ersV2.CreateEntityChainFromJwtMultiResponse, error) { + tokens := req.GetToken() + entityChains := make([]*authz.EntityChain, 0, len(tokens)) + // for each token in the tokens form an entity chain + for idx, tok := range tokens { + entities, err := getEntitiesFromToken(ctx, kcConfig, tok.GetJwt(), logger) + if err != nil { + return nil, err + } + entityChains[idx] = &authz.EntityChain{EphemeralChainId: tok.GetId(), Entities: entities} + } + + return &ersV2.CreateEntityChainFromJwtMultiResponse{EntityChains: entityChains}, nil +} + +func EntityResolution(ctx context.Context, + req *ersV2.ResolveEntitiesRequest, kcConfig keycloakV1.KeycloakConfig, logger *logger.Logger, +) (*ersV2.ResolveEntitiesResponse, error) { + connector, err := getKCClient(ctx, kcConfig, logger) + if err != nil { + return nil, + connect.NewError(connect.CodeInternal, ErrCreationFailed) + } + payload := req.GetEntitiesV2() + + var resolvedEntities []*entityresolution.EntityRepresentation + + for idx, ident := range payload { + logger.Debug("lookup", "entity", ident.GetEntityType()) + switch ident.GetEntityType().(type) { + case *authz.Entity_ClientId: + entityRep, err := handleClientIDResolution(ctx, ident, idx, connector, kcConfig, logger) + if err != nil { + return nil, err + } + resolvedEntities = append(resolvedEntities, entityRep) + case *authz.Entity_EmailAddress, *authz.Entity_UserName: + entityRep, err := handleUserResolution(ctx, ident, idx, connector, kcConfig, logger) + if err != nil { + return nil, err + } + resolvedEntities = append(resolvedEntities, entityRep) + } + logger.Debug("entities", slog.Any("resolved", resolvedEntities)) + } + + return &ersV2.ResolveEntitiesResponse{ + EntityRepresentations: resolvedEntities, + }, nil +} + +// handleClientIDResolution specifically handles ClientID resolution +func handleClientIDResolution(ctx context.Context, ident *authz.Entity, idx int, connector *KeyCloakConnector, kcConfig keycloakV1.KeycloakConfig, logger *logger.Logger) (*entityresolution.EntityRepresentation, error) { + logger.Debug("looking up", slog.Any("type", ident.GetEntityType()), slog.String("client_id", ident.GetClientId())) + clientID := ident.GetClientId() + clients, err := connector.client.GetClients(ctx, connector.token.AccessToken, kcConfig.Realm, gocloak.GetClientsParams{ + ClientID: &clientID, + }) + if err != nil { + logger.Error("error getting client info", slog.String("error", err.Error())) + return nil, connect.NewError(connect.CodeInternal, ErrGetRetrievalFailed) + } + + var jsonEntities []*structpb.Struct + for _, client := range clients { + json, err := typeToGenericJSONMap(client, logger) + if err != nil { + return nil, errorHandler(ctx, logger, connect.CodeInternal, err, "error serializing entity representation") + } + mystruct, structErr := structpb.NewStruct(json) + if structErr != nil { + return nil, errorHandler(ctx, logger, connect.CodeInternal, structErr, "error making struct") + } + jsonEntities = append(jsonEntities, mystruct) + } + + if len(clients) == 0 && kcConfig.InferID.From.ClientID { + // convert entity to json + entityStruct, err := entityToStructPb(ident) + if err != nil { + return nil, errorHandler(ctx, logger, connect.CodeInternal, err, "unable to make entity struct") + } + jsonEntities = append(jsonEntities, entityStruct) + } + + // make sure the id field is populated + originalID := ident.GetEphemeralId() + if originalID == "" { + originalID = auth.EntityIDPrefix + strconv.Itoa(idx) + } + + return &entityresolution.EntityRepresentation{ + OriginalId: originalID, + AdditionalProps: jsonEntities, + }, nil +} + +// handleUserResolution handles resolution for username and email +func handleUserResolution(ctx context.Context, ident *authz.Entity, idx int, connector *KeyCloakConnector, kcConfig keycloakV1.KeycloakConfig, logger *logger.Logger) (*entityresolution.EntityRepresentation, error) { + var getUserParams gocloak.GetUsersParams + exactMatch := true + + switch ident.GetEntityType().(type) { + case *authz.Entity_EmailAddress: + getUserParams = gocloak.GetUsersParams{Email: func() *string { t := ident.GetEmailAddress(); return &t }(), Exact: &exactMatch} + case *authz.Entity_UserName: + getUserParams = gocloak.GetUsersParams{Username: func() *string { t := ident.GetUserName(); return &t }(), Exact: &exactMatch} + } + + var jsonEntities []*structpb.Struct + users, err := connector.client.GetUsers(ctx, connector.token.AccessToken, kcConfig.Realm, getUserParams) + + if err != nil { + return nil, errorHandler(ctx, logger, connect.CodeInternal, err, "error getting users") + } + + if len(users) == 1 { + user := users[0] + logger.Debug("user found", slog.String("user", *user.ID), slog.String("entity", ident.String())) + logger.Debug("user", slog.Any("details", user)) + logger.Debug("user", slog.Any("attributes", user.Attributes)) + + json, err := typeToGenericJSONMap(user, logger) + if err != nil { + return nil, errorHandler(ctx, logger, connect.CodeInternal, err, "error serializing entity representation") + } + + mystruct, structErr := structpb.NewStruct(json) + if structErr != nil { + return nil, errorHandler(ctx, logger, connect.CodeInternal, structErr, "error making struct") + } + + jsonEntities = append(jsonEntities, mystruct) + } else { + // No user found, try alternatives + entityRep, err := handleEntityNotFound(ctx, ident, connector, kcConfig, logger) + if err != nil { + return nil, err + } + if entityRep != nil { + jsonEntities = entityRep + } + } + + // Make sure the id field is populated + originalID := ident.GetEphemeralId() + if originalID == "" { + originalID = auth.EntityIDPrefix + strconv.Itoa(idx) + } + + return &entityresolution.EntityRepresentation{ + OriginalId: originalID, + AdditionalProps: jsonEntities, + }, nil +} + +// handleEntityNotFound handles the case when no user is found directly +func handleEntityNotFound(ctx context.Context, ident *authz.Entity, connector *KeyCloakConnector, kcConfig keycloakV1.KeycloakConfig, logger *logger.Logger) ([]*structpb.Struct, error) { + var jsonEntities []*structpb.Struct + + if ident.GetEmailAddress() != "" { + // Try by group + groups, groupErr := connector.client.GetGroups( + ctx, + connector.token.AccessToken, + kcConfig.Realm, + gocloak.GetGroupsParams{Search: func() *string { t := ident.GetEmailAddress(); return &t }()}, + ) + + if groupErr != nil { + return nil, errorHandler(ctx, logger, connect.CodeInternal, groupErr, "error getting group") + } + + if len(groups) == 1 { + logger.Info("group found for", slog.String("entity", ident.String())) + group := groups[0] + expandedUsers, exErr := expandGroup(ctx, *group.ID, connector, &kcConfig, logger) + if exErr != nil { + return nil, connect.NewError(connect.CodeNotFound, ErrNotFound) + } + + for _, user := range expandedUsers { + json, err := typeToGenericJSONMap(user, logger) + if err != nil { + return nil, errorHandler(ctx, logger, connect.CodeInternal, err, "error serializing entity representation") + } + + mystruct, structErr := structpb.NewStruct(json) + if structErr != nil { + return nil, errorHandler(ctx, logger, connect.CodeInternal, structErr, "error making struct") + } + + jsonEntities = append(jsonEntities, mystruct) + } + return jsonEntities, nil + } + + // No group found, check if we should infer identity + if kcConfig.InferID.From.Email { + entityStruct, err := entityToStructPb(ident) + if err != nil { + return nil, errorHandler(ctx, logger, connect.CodeInternal, err, "unable to make entity struct from email") + } + return []*structpb.Struct{entityStruct}, nil + } + + // Neither user nor group found and inference not enabled + entityNotFoundErr := entityresolution.EntityNotFoundError{ + Code: int32(connect.CodeNotFound), + Message: ErrGetRetrievalFailed.Error(), + Entity: ident.GetEmailAddress(), + } + return nil, connect.NewError(connect.Code(entityNotFoundErr.GetCode()), ErrGetRetrievalFailed) + } else if ident.GetUserName() != "" { + if kcConfig.InferID.From.Username { + // User not found but inference enabled + entityStruct, err := entityToStructPb(ident) + if err != nil { + return nil, errorHandler(ctx, logger, connect.CodeInternal, err, "unable to make entity struct from username") + } + return []*structpb.Struct{entityStruct}, nil + } + + // User not found and inference not enabled + entityNotFoundErr := entityresolution.EntityNotFoundError{ + Code: int32(codes.NotFound), + Message: ErrGetRetrievalFailed.Error(), + Entity: ident.GetUserName(), + } + return nil, connect.NewError(connect.Code(entityNotFoundErr.GetCode()), ErrGetRetrievalFailed) + } + + return nil, nil +} + +func typeToGenericJSONMap[Marshalable any](inputStruct Marshalable, logger *logger.Logger) (map[string]interface{}, error) { + // For now, since we dont' know the "shape" of the entity/user record or representation we will get from a specific entity store, + tmpDoc, err := json.Marshal(inputStruct) + if err != nil { + logger.Error("error marshalling input type!", slog.String("error", err.Error())) + return nil, err + } + + var genericMap map[string]interface{} + err = json.Unmarshal(tmpDoc, &genericMap) + if err != nil { + logger.Error("could not deserialize generic entitlement context JSON input document!", slog.String("error", err.Error())) + return nil, err + } + + return genericMap, nil +} + +func getKCClient(ctx context.Context, kcConfig keycloakV1.KeycloakConfig, logger *logger.Logger) (*KeyCloakConnector, error) { + var client *gocloak.GoCloak + if kcConfig.LegacyKeycloak { + logger.Warn("using legacy connection mode for Keycloak < 17.x.x") + client = gocloak.NewClient(kcConfig.URL) + } else { + client = gocloak.NewClient(kcConfig.URL, gocloak.SetAuthAdminRealms("admin/realms"), gocloak.SetAuthRealms("realms")) + } + // If needed, ability to disable tls checks for testing + // restyClient := client.RestyClient() + // restyClient.SetDebug(true) + // restyClient.SetTLSClientConfig(&tls.Config{InsecureSkipVerify: true}) + // client.SetRestyClient(restyClient) + + // For debugging + // logger.Debug(kcConfig.ClientID) + // logger.Debug(kcConfig.ClientSecret) + // logger.Debug(kcConfig.URL) + // logger.Debug(kcConfig.Realm) + token, err := client.LoginClient(ctx, kcConfig.ClientID, kcConfig.ClientSecret, kcConfig.Realm) + if err != nil { + logger.Error("error connecting to keycloak!", slog.String("error", err.Error())) + return nil, err + } + keycloakConnector := KeyCloakConnector{token: token, client: client} + + return &keycloakConnector, nil +} + +func expandGroup(ctx context.Context, groupID string, kcConnector *KeyCloakConnector, kcConfig *keycloakV1.KeycloakConfig, logger *logger.Logger) ([]*gocloak.User, error) { + logger.Info("expanding group", slog.String("groupID", groupID)) + var entityRepresentations []*gocloak.User + + grp, err := kcConnector.client.GetGroup(ctx, kcConnector.token.AccessToken, kcConfig.Realm, groupID) + if err == nil { + grpMembers, memberErr := kcConnector.client.GetGroupMembers(ctx, kcConnector.token.AccessToken, kcConfig.Realm, + *grp.ID, gocloak.GetGroupsParams{}) + if memberErr == nil { + logger.Debug("adding members", slog.Int("amount", len(grpMembers)), slog.String("from group", *grp.Name)) + for i := 0; i < len(grpMembers); i++ { + user := grpMembers[i] + entityRepresentations = append(entityRepresentations, user) + } + } else { + logger.Error("error getting group members", slog.String("error", memberErr.Error())) + } + } else { + logger.Error("error getting group", slog.String("error", err.Error())) + return nil, err + } + return entityRepresentations, nil +} + +func getEntitiesFromToken(ctx context.Context, kcConfig keycloakV1.KeycloakConfig, jwtString string, logger *logger.Logger) ([]*authz.Entity, error) { + token, err := jwt.ParseString(jwtString, jwt.WithVerify(false), jwt.WithValidate(false)) + if err != nil { + return nil, errors.New("error parsing jwt " + err.Error()) + } + claims, err := token.AsMap(context.Background()) ///nolint:contextcheck // Do not want to include keys from context in map + if err != nil { + return nil, errors.New("error getting claims from jwt") + } + entities := []*authz.Entity{} + entityID := 0 + + // extract azp + extractedValue, okExtract := claims[ClientJwtSelector] + if !okExtract { + return nil, errors.New("error extracting selector " + ClientJwtSelector + " from jwt") + } + extractedValueCasted, okCast := extractedValue.(string) + if !okCast { + return nil, errors.New("error casting extracted value to string") + } + entities = append(entities, &authz.Entity{ + EntityType: &authz.Entity_ClientId{ClientId: extractedValueCasted}, + EphemeralId: fmt.Sprintf("jwtentity-%d-clientid-%s", entityID, extractedValueCasted), + Category: authz.Entity_CATEGORY_ENVIRONMENT, + }) + entityID++ + + extractedValueUsername, okExp := claims[UsernameJwtSelector] + if !okExp { + return nil, errors.New("error extracting selector " + UsernameJwtSelector + " from jwt") + } + extractedValueUsernameCasted, okUsernameCast := extractedValueUsername.(string) + if !okUsernameCast { + return nil, errors.New("error casting extracted value to string") + } + + // double check for service account + if strings.HasPrefix(extractedValueUsernameCasted, serviceAccountUsernamePrefix) { + clientid, err := getServiceAccountClient(ctx, extractedValueUsernameCasted, kcConfig, logger) + if err != nil { + return nil, err + } + if clientid != "" { + entities = append(entities, &authz.Entity{ + EntityType: &authz.Entity_ClientId{ClientId: clientid}, + EphemeralId: fmt.Sprintf("jwtentity-%d-clientid-%s", entityID, clientid), + Category: authz.Entity_CATEGORY_SUBJECT, + }) + } else { + // if the returned clientId is empty, no client found, its not a serive account proceed with username + entities = append(entities, &authz.Entity{ + EntityType: &authz.Entity_UserName{UserName: extractedValueUsernameCasted}, + EphemeralId: fmt.Sprintf("jwtentity-%d-username-%s", entityID, extractedValueUsernameCasted), + Category: authz.Entity_CATEGORY_SUBJECT, + }) + } + } else { + entities = append(entities, &authz.Entity{ + EntityType: &authz.Entity_UserName{UserName: extractedValueUsernameCasted}, + EphemeralId: fmt.Sprintf("jwtentity-%d-username-%s", entityID, extractedValueUsernameCasted), + Category: authz.Entity_CATEGORY_SUBJECT, + }) + } + + return entities, nil +} + +func getServiceAccountClient(ctx context.Context, username string, kcConfig keycloakV1.KeycloakConfig, logger *logger.Logger) (string, error) { + connector, err := getKCClient(ctx, kcConfig, logger) + if err != nil { + return "", err + } + expectedClientName := strings.TrimPrefix(username, serviceAccountUsernamePrefix) + + clients, err := connector.client.GetClients(ctx, connector.token.AccessToken, kcConfig.Realm, gocloak.GetClientsParams{ + ClientID: &expectedClientName, + }) + switch { + case err != nil: + logger.Error(err.Error()) + return "", err + case len(clients) == 1: + client := clients[0] + logger.Debug("client found", slog.String("client", *client.ClientID)) + return *client.ClientID, nil + case len(clients) > 1: + logger.Error("more than one client found for ", slog.String("clientid", expectedClientName)) + default: + logger.Debug("no client found, likely not a service account", slog.String("clientid", expectedClientName)) + } + + return "", nil +} + +func entityToStructPb(ident *authz.Entity) (*structpb.Struct, error) { + entityBytes, err := protojson.Marshal(ident) + if err != nil { + return nil, err + } + var entityStruct structpb.Struct + err = entityStruct.UnmarshalJSON(entityBytes) + if err != nil { + return nil, err + } + return &entityStruct, nil +} diff --git a/service/entityresolution/v2/entity_resolution.go b/service/entityresolution/v2/entity_resolution.go new file mode 100644 index 0000000000..51eca766c3 --- /dev/null +++ b/service/entityresolution/v2/entity_resolution.go @@ -0,0 +1,53 @@ +package entityresolution + +import ( + "github.com/go-viper/mapstructure/v2" + ersV2 "github.com/opentdf/platform/protocol/go/entityresolution/v2" + "github.com/opentdf/platform/protocol/go/entityresolution/v2/entityresolutionv2connect" + claims "github.com/opentdf/platform/service/entityresolution/claims/v2" + keycloak "github.com/opentdf/platform/service/entityresolution/keycloak/v2" + "github.com/opentdf/platform/service/pkg/serviceregistry" + "go.opentelemetry.io/otel/trace" +) + +type ERSConfig struct { + Mode string `mapstructure:"mode" json:"mode"` +} + +const ( + KeycloakMode = "keycloak" + ClaimsMode = "claims" +) + +type EntityResolution struct { + entityresolutionv2connect.EntityResolutionServiceHandler + trace.Tracer +} + +func NewRegistration() *serviceregistry.Service[entityresolutionv2connect.EntityResolutionServiceHandler] { + return &serviceregistry.Service[entityresolutionv2connect.EntityResolutionServiceHandler]{ + ServiceOptions: serviceregistry.ServiceOptions[entityresolutionv2connect.EntityResolutionServiceHandler]{ + Namespace: "entityresolution", + ServiceDesc: &ersV2.EntityResolutionService_ServiceDesc, + ConnectRPCFunc: entityresolutionv2connect.NewEntityResolutionServiceHandler, + RegisterFunc: func(srp serviceregistry.RegistrationParams) (entityresolutionv2connect.EntityResolutionServiceHandler, serviceregistry.HandlerServer) { + var inputConfig ERSConfig + + if err := mapstructure.Decode(srp.Config, &inputConfig); err != nil { + panic(err) + } + if inputConfig.Mode == ClaimsMode { + claimsSVC, claimsHandler := claims.RegisterClaimsERS(srp.Config, srp.Logger) + claimsSVC.Tracer = srp.Tracer + return EntityResolution{EntityResolutionServiceHandler: claimsSVC}, claimsHandler + } + + // Default to keycloak ERS + kcSVC, kcHandler := keycloak.RegisterKeycloakERS(srp.Config, srp.Logger) + kcSVC.Tracer = srp.Tracer + + return EntityResolution{EntityResolutionServiceHandler: kcSVC, Tracer: srp.Tracer}, kcHandler + }, + }, + } +} diff --git a/service/pkg/server/services.go b/service/pkg/server/services.go index 6f9eed1616..917909fe4b 100644 --- a/service/pkg/server/services.go +++ b/service/pkg/server/services.go @@ -12,6 +12,7 @@ import ( "github.com/opentdf/platform/sdk" "github.com/opentdf/platform/service/authorization" "github.com/opentdf/platform/service/entityresolution" + entityresolutionV2 "github.com/opentdf/platform/service/entityresolution/v2" "github.com/opentdf/platform/service/health" "github.com/opentdf/platform/service/internal/server" "github.com/opentdf/platform/service/kas" @@ -72,6 +73,7 @@ func registerCoreServices(reg serviceregistry.Registry, mode []string) ([]string kas.NewRegistration(), wellknown.NewRegistration(), entityresolution.NewRegistration(), + entityresolutionV2.NewRegistration(), }...) services = append(services, policy.NewRegistrations()...) case "core": @@ -88,11 +90,14 @@ func registerCoreServices(reg serviceregistry.Registry, mode []string) ([]string return nil, err //nolint:wrapcheck // We are all friends here } case "entityresolution": - // If the mode is "entityresolution", register only the ERS service + // If the mode is "entityresolution", register only the ERS service (v1 and v2) registeredServices = append(registeredServices, serviceEntityResolution) if err := reg.RegisterService(entityresolution.NewRegistration(), modeERS); err != nil { return nil, err //nolint:wrapcheck // We are all friends here } + if err := reg.RegisterService(entityresolutionV2.NewRegistration(), modeERS); err != nil { + return nil, err //nolint:wrapcheck // We are all friends here + } default: continue } From 2317e79d4691aff15fb6c33e8504f6321824c3d3 Mon Sep 17 00:00:00 2001 From: Jake Van Vorhis <83739412+jakedoublev@users.noreply.github.com> Date: Wed, 14 May 2025 13:36:47 -0700 Subject: [PATCH 30/49] feat(core): auth v2 with breaking changes to auth v1 protos (#2211) ### Proposed Changes * Test implementation if we issue breaking changes to v1 protos instead of introducing new v2 protos ### Checklist - [ ] I have added or updated unit tests - [ ] I have added or updated integration tests (if appropriate) - [ ] I have added or updated documentation ### Testing Instructions --- docs/grpc/index.html | 493 ++---- .../authorization/authorization.swagger.json | 28 +- .../v2/authorization.swagger.json | 188 +- docs/openapi/entity/entity.swagger.json | 46 + .../entity_resolution.swagger.json | 72 +- .../v2/entity_resolution.swagger.json | 65 +- protocol/go/authorization/authorization.pb.go | 460 +++-- .../go/authorization/authorization_grpc.pb.go | 8 +- .../authorization.connect.go | 8 +- .../go/authorization/v2/authorization.pb.go | 1569 +++++------------ .../authorization/v2/authorization_grpc.pb.go | 119 +- .../authorization.connect.go | 109 +- protocol/go/entity/entity.pb.go | 470 +++++ .../entityresolution/entity_resolution.pb.go | 227 +-- .../v2/entity_resolution.pb.go | 409 +++-- .../v2/entity_resolution_grpc.pb.go | 69 +- .../entity_resolution.connect.go | 81 +- service/authorization/authorization.proto | 32 +- service/authorization/v2/authorization.proto | 128 +- service/entity/entity.proto | 41 + .../entityresolution/entity_resolution.proto | 72 +- .../v2/entity_resolution.proto | 41 +- 22 files changed, 1960 insertions(+), 2775 deletions(-) create mode 100644 docs/openapi/entity/entity.swagger.json create mode 100644 protocol/go/entity/entity.pb.go create mode 100644 service/entity/entity.proto diff --git a/docs/grpc/index.html b/docs/grpc/index.html index 91ccfbee0e..a498bd2d49 100644 --- a/docs/grpc/index.html +++ b/docs/grpc/index.html @@ -440,51 +440,58 @@

        Table of Contents

      • - authorization/v2/authorization.proto + entity/entity.proto +
      • + + +
      • + authorization/v2/authorization.proto +
          +
        • - MGetDecisionBulkRequest + MEntityEntitlements
        • - MGetDecisionBulkResponse + MEntityEntitlements.ActionsList
        • - MGetDecisionByTokenMultiResourceRequest + MEntityEntitlements.ActionsPerAttributeValueFqnEntry
        • - MGetDecisionByTokenMultiResourceResponse + MEntityReference
        • - MGetDecisionByTokenRequest + MGetDecisionBulkRequest
        • - MGetDecisionByTokenResponse + MGetDecisionBulkResponse
        • @@ -503,14 +510,6 @@

          Table of Contents

          MGetDecisionResponse
        • -
        • - MGetEntitlementsByTokenRequest -
        • - -
        • - MGetEntitlementsByTokenResponse -
        • -
        • MGetEntitlementsRequest
        • @@ -536,10 +535,6 @@

          Table of Contents

          EDecision -
        • - EEntity.Category -
        • -
        • @@ -594,19 +589,19 @@

          Table of Contents

          • - MCreateEntityChainFromJwtMultiRequest + MCreateEntityChainsFromTokensRequest
          • - MCreateEntityChainFromJwtMultiResponse + MCreateEntityChainsFromTokensResponse
          • - MCreateEntityChainFromJwtRequest + MEntityNotFoundError
          • - MCreateEntityChainFromJwtResponse + MEntityRepresentation
          • @@ -3683,25 +3678,11 @@

            Entity

            email_address string -

            one of the entity options must be set

            - - - - user_name - string - -

            - - - - remote_claims_url - string -

            - uuid + user_name string

            @@ -3711,14 +3692,7 @@

            Entity

            claims google.protobuf.Any -

            - - - - custom - EntityCustom - -

            +

            used by ERS claims mode

            @@ -4169,14 +4143,14 @@

            AuthorizationService

            GetDecisionsByToken GetDecisionsByTokenRequest GetDecisionsByTokenResponse -

            Deprecated: Use AuthorizationV2 methods instead (GetDecisionByToken, GetDecisionByTokenMultiResource)

            +

            Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetDecisionMultiResource)

            GetEntitlements GetEntitlementsRequest GetEntitlementsResponse -

            Deprecated: Use AuthorizationV2 method instead (GetEntitlements, GetEntitlementsByToken)

            +

            Deprecated: Use AuthorizationV2 method instead (GetEntitlements)

            @@ -4234,12 +4208,12 @@

            Methods with HTTP bindings

            -

            authorization/v2/authorization.proto

            Top +

            entity/entity.proto

            Top

            -

            Entity

            +

            Entity

            PE (Person Entity) or NPE (Non-Person Entity)

            @@ -4260,7 +4234,7 @@

            Entity

            email_address string -

            one of the entity options must be set

            +

            @@ -4281,19 +4255,12 @@

            Entity

            client_id string -

            EntityCustom custom = 5;

            - - - - registered_resource_value_fqn - string -

            category - Entity.Category + Entity.Category

            @@ -4305,7 +4272,7 @@

            Entity

            -

            EntityChain

            +

            EntityChain

            A set of related PE and NPE

            @@ -4316,7 +4283,7 @@

            EntityChain

            - ephemeral_chain_id + ephemeral_id string

            ephemeral id for tracking between request and response

            @@ -4324,7 +4291,7 @@

            EntityChain

            entities - Entity + Entity repeated

            @@ -4336,8 +4303,8 @@

            EntityChain

            -

            EntityEntitlements

            -

            Entitlements for a given entity, mapping each attribute value FQN to any entitled actions[]

            +

            Token

            +

            @@ -4354,10 +4321,10 @@

            EntityEntitlements

            - - - - + + + + @@ -4367,32 +4334,51 @@

            EntityEntitlements

            -

            EntityEntitlements.ActionsList

            + + +

            Entity.Category

            +
            actions_per_attribute_value_fqnEntityEntitlements.ActionsPerAttributeValueFqnEntryrepeated

            jwtstring

            the token

            + + + + + + + + + + + + + + + + + + + + + + + + +
            NameNumberDescription
            CATEGORY_UNSPECIFIED0

            CATEGORY_SUBJECT1

            CATEGORY_ENVIRONMENT2

            + - - - - - - - - - - - - - - - -
            FieldTypeLabelDescription
            actionspolicy.Actionrepeated

            + - + + + +
            +

            authorization/v2/authorization.proto

            Top +
            +

            - -

            EntityEntitlements.ActionsPerAttributeValueFqnEntry

            -

            +

            EntityEntitlements

            +

            Entitlements for a given entity, mapping each attribute value FQN to any entitled actions[]

            @@ -4402,39 +4388,15 @@

            En

            - + - - - - - - - - + - -
            keyephemeral_id string

            valueEntityEntitlements.ActionsList

            ephemeral id for tracking between request and response

            - - - - - -

            GetDecisionBulkRequest

            -

            Can the entities (PE or NPE) access?

            1. Multiplexing of a Decision request

            This is a more performant bulk request for complex decisioning (multiple entity chains or actions on

            multiple resource decisions)

            - - - - - - - - - - + + @@ -4446,7 +4408,7 @@

            GetDecisionBulkRequest

            -

            GetDecisionBulkResponse

            +

            EntityEntitlements.ActionsList

            @@ -4457,8 +4419,8 @@

            GetDecisionBulkResponse

            - - + + @@ -4470,8 +4432,8 @@

            GetDecisionBulkResponse

            -

            GetDecisionByTokenMultiResourceRequest

            -

            Can the entity (PE or NPE) represented by this token access?

            1. one token

            2. one action

            3. multiple resource

            +

            EntityEntitlements.ActionsPerAttributeValueFqnEntry

            +

            FieldTypeLabelDescription
            decision_requestsGetDecisionMultiResourceRequestactions_per_attribute_value_fqnEntityEntitlements.ActionsPerAttributeValueFqnEntry repeated

            decision_responsesGetDecisionMultiResourceResponseactionspolicy.Action repeated

            @@ -4481,23 +4443,16 @@

            GetDecisionByTo

            - - + + - - + + - - - - - - - @@ -4508,8 +4463,8 @@

            GetDecisionByTo -

            GetDecisionByTokenMultiResourceResponse

            -

            +

            EntityReference

            +

            The EntityReference is the actor in an entitlement or decision request - the PE, NPE, or PE+NPE being authorized.

            The abstraction houses the distinct entity types, PE and/or NPE combinations, or a registered

            resource value being treated as an entity in entitlement/authorization decisioning.

            tokenauthorization.Tokenkeystring

            actionpolicy.ActionvalueEntityEntitlements.ActionsList

            name on action is required

            resourcesResourcerepeated

            @@ -4519,17 +4474,25 @@

            GetDecisionByT

            - - + + - + - - - - + + + + + + + + + + + @@ -4539,8 +4502,8 @@

            GetDecisionByT -

            GetDecisionByTokenRequest

            -

            Can the entity (PE or NPE) represented by this token access?

            1. one token

            2. one action

            3. one resource

            +

            GetDecisionBulkRequest

            +

            Can the entities (PE or NPE) access?

            1. Multiplexing of a Decision request

            This is a more performant bulk request for complex decisioning (multiple entity chains or actions on

            multiple resource decisions)

            all_permittedgoogle.protobuf.BoolValueentity_chainentity.EntityChain

            convenience flag indicating global resource decisions result (permit/deny)

            chain of one or more entities

            resource_decisionsResourceDecisionrepeated

            individual resource decisions

            registered_resource_value_fqnstring

            fully qualified name of the registered resource value stored in platform policy, where in +this case the resource acts as and represents a single entity for authorization/entitlement decisioning

            tokenentity.Token

            access token (JWT), which is used to create an entity chain (comprising one or more entities)

            @@ -4550,23 +4513,9 @@

            GetDecisionByTokenRequest

            - - - - - - - - - - - - - - - - - + + + @@ -4577,7 +4526,7 @@

            GetDecisionByTokenRequestGetDecisionByTokenResponse

            +

            GetDecisionBulkResponse

            @@ -4588,9 +4537,9 @@

            GetDecisionByTokenResponse<

            - - - + + + @@ -4613,9 +4562,9 @@

            GetDecisionMultiResour

            - + - + @@ -4682,9 +4631,9 @@

            GetDecisionRequest

            - + - + @@ -4735,62 +4684,6 @@

            GetDecisionResponse

            -

            GetEntitlementsByTokenRequest

            -

            What can the entity (PE or NPE, represented by the token) do, broken down as permitted actions on attribute value FQNs?

            - - -
            tokenauthorization.Token

            actionpolicy.Action

            name on action is required

            resourceResourcedecision_requestsGetDecisionMultiResourceRequestrepeated

            decision_responseGetDecisionResponsedecision_responsesGetDecisionMultiResourceResponserepeated

            entityEntityChainEntityReference

            entity chain must be defined

            entity must be provided

            entityEntityChainEntityReference

            entity must be provided

            - - - - - - - - - - - - - - - - - - - - -
            FieldTypeLabelDescription
            tokenauthorization.Token

            with_comprehensive_hierarchybooloptional

            optional parameter to return all entitled values for attribute definitions with hierarchy rules, propagating -down the hierarchical values instead of returning solely the value that is directly entitled

            - - - - - -

            GetEntitlementsByTokenResponse

            -

            - - - - - - - - - - - - - - - - -
            FieldTypeLabelDescription
            entitlementsEntityEntitlementsrepeated

            - - - - -

            GetEntitlementsRequest

            What can the entity (PE or NPE, represented by the entity chain) do, broken down as permitted actions on attribute value FQNs?

            Note: the v1 API parameter 'scope' has been dropped, and it is recommended to use

            GetDecision if the resource is known

            @@ -4802,10 +4695,10 @@

            GetEntitlementsRequest

            - entity_chain - EntityChain + entity + EntityReference -

            +

            entity must be provided

            @@ -4971,35 +4864,6 @@

            Decision

            -

            Entity.Category

            -

            - - - - - - - - - - - - - - - - - - - - - - - - - -
            NameNumberDescription
            CATEGORY_UNSPECIFIED0

            CATEGORY_SUBJECT1

            CATEGORY_ENVIRONMENT2

            - @@ -5033,20 +4897,6 @@

            AuthorizationService

            - - GetDecisionByToken - GetDecisionByTokenRequest - GetDecisionByTokenResponse -

            - - - - GetDecisionByTokenMultiResource - GetDecisionByTokenMultiResourceRequest - GetDecisionByTokenMultiResourceResponse -

            - - GetEntitlements GetEntitlementsRequest @@ -5054,13 +4904,6 @@

            AuthorizationService

            - - GetEntitlementsByToken - GetEntitlementsByTokenRequest - GetEntitlementsByTokenResponse -

            - - @@ -5211,13 +5054,6 @@

            ResolveEntitiesRequest

            entities authorization.Entity repeated -

            either v1 or v2 authorization entities are permitted, but not both

            - - - - entities_v2 - authorization.v2.Entity - repeated

            @@ -5330,8 +5166,8 @@

            entityresolution/v2/entity_

            -

            CreateEntityChainFromJwtMultiRequest

            -

            Create an entity chain from multiple JWTs.

            +

            CreateEntityChainsFromTokensRequest

            +

            Create an entity chain for each token (JWT) in the request.

            @@ -5341,8 +5177,8 @@

            CreateEntityCh

            - - + + @@ -5354,7 +5190,7 @@

            CreateEntityCh -

            CreateEntityChainFromJwtMultiResponse

            +

            CreateEntityChainsFromTokensResponse

            @@ -5366,7 +5202,7 @@

            CreateEntityC

            - + @@ -5378,8 +5214,8 @@

            CreateEntityC -

            CreateEntityChainFromJwtRequest

            -

            Create an entity chain from a single JWT.

            +

            EntityNotFoundError

            +

            tokenauthorization.Tokentokensentity.Token repeated

            entity_chainsauthorization.v2.EntityChainentity.EntityChain repeated

            @@ -5389,8 +5225,29 @@

            CreateEntityChainFr

            - - + + + + + + + + + + + + + + + + + + + + + + + @@ -5402,7 +5259,7 @@

            CreateEntityChainFr -

            CreateEntityChainFromJwtResponse

            +

            EntityRepresentation

            @@ -5413,9 +5270,16 @@

            CreateEntityChainF

            - - + + + + + + + + + @@ -5437,8 +5301,8 @@

            ResolveEntitiesRequest

            - - + + @@ -5462,7 +5326,7 @@

            ResolveEntitiesResponse

            - + @@ -5496,16 +5360,9 @@

            EntityResolutionService

            - - - - - - - - - - + + + diff --git a/docs/openapi/authorization/authorization.swagger.json b/docs/openapi/authorization/authorization.swagger.json index c7176bf91d..341d319cc1 100644 --- a/docs/openapi/authorization/authorization.swagger.json +++ b/docs/openapi/authorization/authorization.swagger.json @@ -51,7 +51,7 @@ }, "/v1/entitlements": { "post": { - "summary": "Deprecated: Use AuthorizationV2 method instead (GetEntitlements, GetEntitlementsByToken)", + "summary": "Deprecated: Use AuthorizationV2 method instead (GetEntitlements)", "operationId": "AuthorizationService_GetEntitlements", "responses": { "200": { @@ -85,7 +85,7 @@ }, "/v1/token/authorization": { "post": { - "summary": "Deprecated: Use AuthorizationV2 methods instead (GetDecisionByToken, GetDecisionByTokenMultiResource)", + "summary": "Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetDecisionMultiResource)", "operationId": "AuthorizationService_GetDecisionsByToken", "responses": { "200": { @@ -193,23 +193,14 @@ "title": "ephemeral id for tracking between request and response" }, "emailAddress": { - "type": "string", - "title": "one of the entity options must be set" - }, - "userName": { "type": "string" }, - "remoteClaimsUrl": { - "type": "string" - }, - "uuid": { + "userName": { "type": "string" }, "claims": { - "$ref": "#/definitions/protobufAny" - }, - "custom": { - "$ref": "#/definitions/authorizationEntityCustom" + "$ref": "#/definitions/protobufAny", + "title": "used by ERS claims mode" }, "clientId": { "type": "string" @@ -246,15 +237,6 @@ }, "title": "A set of related PE and NPE" }, - "authorizationEntityCustom": { - "type": "object", - "properties": { - "extension": { - "$ref": "#/definitions/protobufAny" - } - }, - "title": "Entity type for custom entities beyond the standard types" - }, "authorizationEntityEntitlements": { "type": "object", "properties": { diff --git a/docs/openapi/authorization/v2/authorization.swagger.json b/docs/openapi/authorization/v2/authorization.swagger.json index 0e8996b403..9eff5a56dd 100644 --- a/docs/openapi/authorization/v2/authorization.swagger.json +++ b/docs/openapi/authorization/v2/authorization.swagger.json @@ -50,19 +50,6 @@ } } }, - "authorizationToken": { - "type": "object", - "properties": { - "id": { - "type": "string", - "title": "ephemeral id for tracking between request and response" - }, - "jwt": { - "type": "string", - "title": "the token" - } - } - }, "authorizationv2Decision": { "type": "string", "enum": [ @@ -73,16 +60,66 @@ "default": "DECISION_UNSPECIFIED", "title": "- DECISION_PERMIT: DECISION_OBLIGATED = 3;" }, - "authorizationv2Entity": { + "authorizationv2EntityEntitlements": { "type": "object", "properties": { "ephemeralId": { "type": "string", "title": "ephemeral id for tracking between request and response" }, - "emailAddress": { + "actionsPerAttributeValueFqn": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/EntityEntitlementsActionsList" + } + } + }, + "title": "Entitlements for a given entity, mapping each attribute value FQN to any entitled actions[]" + }, + "authorizationv2GetEntitlementsResponse": { + "type": "object", + "properties": { + "entitlements": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/authorizationv2EntityEntitlements" + } + } + } + }, + "commonMetadata": { + "type": "object", + "properties": { + "createdAt": { "type": "string", - "title": "one of the entity options must be set" + "format": "date-time", + "title": "created_at set by server (entity who created will recorded in an audit event)" + }, + "updatedAt": { + "type": "string", + "format": "date-time", + "title": "updated_at set by server (entity who updated will recorded in an audit event)" + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "title": "optional short description" + } + }, + "title": "Struct to uniquely identify a resource with optional additional metadata" + }, + "entityEntity": { + "type": "object", + "properties": { + "ephemeralId": { + "type": "string", + "title": "ephemeral id for tracking between request and response" + }, + "emailAddress": { + "type": "string" }, "userName": { "type": "string" @@ -92,19 +129,15 @@ "title": "used by ERS claims mode" }, "clientId": { - "type": "string", - "title": "EntityCustom custom = 5;" - }, - "registeredResourceValueFqn": { "type": "string" }, "category": { - "$ref": "#/definitions/authorizationv2EntityCategory" + "$ref": "#/definitions/entityEntityCategory" } }, "title": "PE (Person Entity) or NPE (Non-Person Entity)" }, - "authorizationv2EntityCategory": { + "entityEntityCategory": { "type": "string", "enum": [ "CATEGORY_UNSPECIFIED", @@ -113,10 +146,10 @@ ], "default": "CATEGORY_UNSPECIFIED" }, - "authorizationv2EntityChain": { + "entityEntityChain": { "type": "object", "properties": { - "ephemeralChainId": { + "ephemeralId": { "type": "string", "title": "ephemeral id for tracking between request and response" }, @@ -124,62 +157,24 @@ "type": "array", "items": { "type": "object", - "$ref": "#/definitions/authorizationv2Entity" + "$ref": "#/definitions/entityEntity" } } }, "title": "A set of related PE and NPE" }, - "authorizationv2EntityEntitlements": { + "entityToken": { "type": "object", "properties": { "ephemeralId": { "type": "string", "title": "ephemeral id for tracking between request and response" }, - "actionsPerAttributeValueFqn": { - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/EntityEntitlementsActionsList" - } - } - }, - "title": "Entitlements for a given entity, mapping each attribute value FQN to any entitled actions[]" - }, - "authorizationv2GetEntitlementsResponse": { - "type": "object", - "properties": { - "entitlements": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/authorizationv2EntityEntitlements" - } - } - } - }, - "commonMetadata": { - "type": "object", - "properties": { - "createdAt": { - "type": "string", - "format": "date-time", - "title": "created_at set by server (entity who created will recorded in an audit event)" - }, - "updatedAt": { + "jwt": { "type": "string", - "format": "date-time", - "title": "updated_at set by server (entity who updated will recorded in an audit event)" - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - }, - "title": "optional short description" + "title": "the token" } - }, - "title": "Struct to uniquely identify a resource with optional additional metadata" + } }, "policyAction": { "type": "object", @@ -235,40 +230,33 @@ } } }, - "v2GetDecisionBulkResponse": { + "v2EntityReference": { "type": "object", "properties": { - "decisionResponses": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/v2GetDecisionMultiResourceResponse" - } + "entityChain": { + "$ref": "#/definitions/entityEntityChain", + "title": "chain of one or more entities" + }, + "registeredResourceValueFqn": { + "type": "string", + "title": "fully qualified name of the registered resource value stored in platform policy, where in\nthis case the resource acts as and represents a single entity for authorization/entitlement decisioning" + }, + "token": { + "$ref": "#/definitions/entityToken", + "title": "access token (JWT), which is used to create an entity chain (comprising one or more entities)" } - } + }, + "description": "The EntityReference is the actor in an entitlement or decision request - the PE, NPE, or PE+NPE being authorized.\nThe abstraction houses the distinct entity types, PE and/or NPE combinations, or a registered\nresource value being treated as an entity in entitlement/authorization decisioning." }, - "v2GetDecisionByTokenMultiResourceResponse": { + "v2GetDecisionBulkResponse": { "type": "object", "properties": { - "allPermitted": { - "type": "boolean", - "title": "convenience flag indicating global resource decisions result (permit/deny)" - }, - "resourceDecisions": { + "decisionResponses": { "type": "array", "items": { "type": "object", - "$ref": "#/definitions/v2ResourceDecision" - }, - "title": "individual resource decisions" - } - } - }, - "v2GetDecisionByTokenResponse": { - "type": "object", - "properties": { - "decisionResponse": { - "$ref": "#/definitions/v2GetDecisionResponse" + "$ref": "#/definitions/v2GetDecisionMultiResourceResponse" + } } } }, @@ -276,8 +264,8 @@ "type": "object", "properties": { "entity": { - "$ref": "#/definitions/authorizationv2EntityChain", - "title": "entity chain must be defined" + "$ref": "#/definitions/v2EntityReference", + "title": "entity must be provided" }, "action": { "$ref": "#/definitions/policyAction", @@ -320,18 +308,6 @@ } } }, - "v2GetEntitlementsByTokenResponse": { - "type": "object", - "properties": { - "entitlements": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/authorizationv2EntityEntitlements" - } - } - } - }, "v2Resource": { "type": "object", "properties": { diff --git a/docs/openapi/entity/entity.swagger.json b/docs/openapi/entity/entity.swagger.json new file mode 100644 index 0000000000..3256109c9a --- /dev/null +++ b/docs/openapi/entity/entity.swagger.json @@ -0,0 +1,46 @@ +{ + "swagger": "2.0", + "info": { + "title": "entity/entity.proto", + "version": "version not set" + }, + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": {}, + "definitions": { + "protobufAny": { + "type": "object", + "properties": { + "@type": { + "type": "string", + "description": "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics." + } + }, + "additionalProperties": {}, + "description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(\u0026foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := \u0026pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := \u0026pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n \"@type\": \"type.googleapis.com/google.profile.Person\",\n \"firstName\": \u003cstring\u003e,\n \"lastName\": \u003cstring\u003e\n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n \"value\": \"1.212s\"\n }" + }, + "rpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/protobufAny" + } + } + } + } + } +} diff --git a/docs/openapi/entityresolution/entity_resolution.swagger.json b/docs/openapi/entityresolution/entity_resolution.swagger.json index 7101003cf0..8ae9837892 100644 --- a/docs/openapi/entityresolution/entity_resolution.swagger.json +++ b/docs/openapi/entityresolution/entity_resolution.swagger.json @@ -90,23 +90,14 @@ "title": "ephemeral id for tracking between request and response" }, "emailAddress": { - "type": "string", - "title": "one of the entity options must be set" - }, - "userName": { "type": "string" }, - "remoteClaimsUrl": { - "type": "string" - }, - "uuid": { + "userName": { "type": "string" }, "claims": { - "$ref": "#/definitions/protobufAny" - }, - "custom": { - "$ref": "#/definitions/authorizationEntityCustom" + "$ref": "#/definitions/protobufAny", + "title": "used by ERS claims mode" }, "clientId": { "type": "string" @@ -143,15 +134,6 @@ }, "title": "A set of related PE and NPE" }, - "authorizationEntityCustom": { - "type": "object", - "properties": { - "extension": { - "$ref": "#/definitions/protobufAny" - } - }, - "title": "Entity type for custom entities beyond the standard types" - }, "authorizationToken": { "type": "object", "properties": { @@ -165,46 +147,6 @@ } } }, - "authorizationv2Entity": { - "type": "object", - "properties": { - "ephemeralId": { - "type": "string", - "title": "ephemeral id for tracking between request and response" - }, - "emailAddress": { - "type": "string", - "title": "one of the entity options must be set" - }, - "userName": { - "type": "string" - }, - "claims": { - "$ref": "#/definitions/protobufAny", - "title": "used by ERS claims mode" - }, - "clientId": { - "type": "string", - "title": "EntityCustom custom = 5;" - }, - "registeredResourceValueFqn": { - "type": "string" - }, - "category": { - "$ref": "#/definitions/authorizationv2EntityCategory" - } - }, - "title": "PE (Person Entity) or NPE (Non-Person Entity)" - }, - "authorizationv2EntityCategory": { - "type": "string", - "enum": [ - "CATEGORY_UNSPECIFIED", - "CATEGORY_SUBJECT", - "CATEGORY_ENVIRONMENT" - ], - "default": "CATEGORY_UNSPECIFIED" - }, "entityresolutionCreateEntityChainFromJwtRequest": { "type": "object", "properties": { @@ -254,14 +196,6 @@ "items": { "type": "object", "$ref": "#/definitions/authorizationEntity" - }, - "title": "either v1 or v2 authorization entities are permitted, but not both" - }, - "entitiesV2": { - "type": "array", - "items": { - "type": "object", - "$ref": "#/definitions/authorizationv2Entity" } } }, diff --git a/docs/openapi/entityresolution/v2/entity_resolution.swagger.json b/docs/openapi/entityresolution/v2/entity_resolution.swagger.json index 829aeab8fb..8c24c517f9 100644 --- a/docs/openapi/entityresolution/v2/entity_resolution.swagger.json +++ b/docs/openapi/entityresolution/v2/entity_resolution.swagger.json @@ -17,20 +17,7 @@ ], "paths": {}, "definitions": { - "authorizationToken": { - "type": "object", - "properties": { - "id": { - "type": "string", - "title": "ephemeral id for tracking between request and response" - }, - "jwt": { - "type": "string", - "title": "the token" - } - } - }, - "authorizationv2Entity": { + "entityEntity": { "type": "object", "properties": { "ephemeralId": { @@ -38,8 +25,7 @@ "title": "ephemeral id for tracking between request and response" }, "emailAddress": { - "type": "string", - "title": "one of the entity options must be set" + "type": "string" }, "userName": { "type": "string" @@ -49,19 +35,15 @@ "title": "used by ERS claims mode" }, "clientId": { - "type": "string", - "title": "EntityCustom custom = 5;" - }, - "registeredResourceValueFqn": { "type": "string" }, "category": { - "$ref": "#/definitions/authorizationv2EntityCategory" + "$ref": "#/definitions/entityEntityCategory" } }, "title": "PE (Person Entity) or NPE (Non-Person Entity)" }, - "authorizationv2EntityCategory": { + "entityEntityCategory": { "type": "string", "enum": [ "CATEGORY_UNSPECIFIED", @@ -70,10 +52,10 @@ ], "default": "CATEGORY_UNSPECIFIED" }, - "authorizationv2EntityChain": { + "entityEntityChain": { "type": "object", "properties": { - "ephemeralChainId": { + "ephemeralId": { "type": "string", "title": "ephemeral id for tracking between request and response" }, @@ -81,32 +63,37 @@ "type": "array", "items": { "type": "object", - "$ref": "#/definitions/authorizationv2Entity" + "$ref": "#/definitions/entityEntity" } } }, "title": "A set of related PE and NPE" }, - "entityresolutionEntityRepresentation": { + "entityToken": { "type": "object", "properties": { - "additionalProps": { - "type": "array", - "items": { - "type": "object" - } + "ephemeralId": { + "type": "string", + "title": "ephemeral id for tracking between request and response" }, - "originalId": { + "jwt": { "type": "string", - "title": "ephemeral entity id from the request" + "title": "the token" } } }, - "entityresolutionv2CreateEntityChainFromJwtResponse": { + "entityresolutionv2EntityRepresentation": { "type": "object", "properties": { - "entityChains": { - "$ref": "#/definitions/authorizationv2EntityChain" + "originalId": { + "type": "string", + "title": "ephemeral entity id from the request" + }, + "additionalProps": { + "type": "array", + "items": { + "type": "object" + } } } }, @@ -117,7 +104,7 @@ "type": "array", "items": { "type": "object", - "$ref": "#/definitions/entityresolutionEntityRepresentation" + "$ref": "#/definitions/entityresolutionv2EntityRepresentation" } } } @@ -160,14 +147,14 @@ } } }, - "v2CreateEntityChainFromJwtMultiResponse": { + "v2CreateEntityChainsFromTokensResponse": { "type": "object", "properties": { "entityChains": { "type": "array", "items": { "type": "object", - "$ref": "#/definitions/authorizationv2EntityChain" + "$ref": "#/definitions/entityEntityChain" } } } diff --git a/protocol/go/authorization/authorization.pb.go b/protocol/go/authorization/authorization.pb.go index c074930466..96e59deeb2 100644 --- a/protocol/go/authorization/authorization.pb.go +++ b/protocol/go/authorization/authorization.pb.go @@ -185,17 +185,15 @@ type Entity struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // ephemeral id for tracking between request and response - // Standard entity types supported by the platform + // ephemeral id for tracking between request and response + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + // Standard entity types supported by the platform, one of which must be set // // Types that are assignable to EntityType: // // *Entity_EmailAddress // *Entity_UserName - // *Entity_RemoteClaimsUrl - // *Entity_Uuid // *Entity_Claims - // *Entity_Custom // *Entity_ClientId EntityType isEntity_EntityType `protobuf_oneof:"entity_type"` Category Entity_Category `protobuf:"varint,9,opt,name=category,proto3,enum=authorization.Entity_Category" json:"category,omitempty"` @@ -261,20 +259,6 @@ func (x *Entity) GetUserName() string { return "" } -func (x *Entity) GetRemoteClaimsUrl() string { - if x, ok := x.GetEntityType().(*Entity_RemoteClaimsUrl); ok { - return x.RemoteClaimsUrl - } - return "" -} - -func (x *Entity) GetUuid() string { - if x, ok := x.GetEntityType().(*Entity_Uuid); ok { - return x.Uuid - } - return "" -} - func (x *Entity) GetClaims() *anypb.Any { if x, ok := x.GetEntityType().(*Entity_Claims); ok { return x.Claims @@ -282,13 +266,6 @@ func (x *Entity) GetClaims() *anypb.Any { return nil } -func (x *Entity) GetCustom() *EntityCustom { - if x, ok := x.GetEntityType().(*Entity_Custom); ok { - return x.Custom - } - return nil -} - func (x *Entity) GetClientId() string { if x, ok := x.GetEntityType().(*Entity_ClientId); ok { return x.ClientId @@ -308,7 +285,6 @@ type isEntity_EntityType interface { } type Entity_EmailAddress struct { - // one of the entity options must be set EmailAddress string `protobuf:"bytes,2,opt,name=email_address,json=emailAddress,proto3,oneof"` } @@ -316,22 +292,11 @@ type Entity_UserName struct { UserName string `protobuf:"bytes,3,opt,name=user_name,json=userName,proto3,oneof"` } -type Entity_RemoteClaimsUrl struct { - RemoteClaimsUrl string `protobuf:"bytes,4,opt,name=remote_claims_url,json=remoteClaimsUrl,proto3,oneof"` -} - -type Entity_Uuid struct { - Uuid string `protobuf:"bytes,5,opt,name=uuid,proto3,oneof"` -} - type Entity_Claims struct { + // used by ERS claims mode Claims *anypb.Any `protobuf:"bytes,6,opt,name=claims,proto3,oneof"` } -type Entity_Custom struct { - Custom *EntityCustom `protobuf:"bytes,7,opt,name=custom,proto3,oneof"` -} - type Entity_ClientId struct { ClientId string `protobuf:"bytes,8,opt,name=client_id,json=clientId,proto3,oneof"` } @@ -340,14 +305,8 @@ func (*Entity_EmailAddress) isEntity_EntityType() {} func (*Entity_UserName) isEntity_EntityType() {} -func (*Entity_RemoteClaimsUrl) isEntity_EntityType() {} - -func (*Entity_Uuid) isEntity_EntityType() {} - func (*Entity_Claims) isEntity_EntityType() {} -func (*Entity_Custom) isEntity_EntityType() {} - func (*Entity_ClientId) isEntity_EntityType() {} // Entity type for custom entities beyond the standard types @@ -1243,192 +1202,187 @@ var file_authorization_authorization_proto_rawDesc = []byte{ 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x03, 0x6a, 0x77, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x03, 0x6a, 0x77, - 0x74, 0x22, 0xc9, 0x03, 0x0a, 0x06, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x0e, 0x0a, 0x02, + 0x74, 0x22, 0x81, 0x03, 0x0a, 0x06, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x25, 0x0a, 0x0d, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0c, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1d, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x61, - 0x69, 0x6d, 0x73, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, - 0x0f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x55, 0x72, 0x6c, - 0x12, 0x14, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, - 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x12, 0x2e, 0x0a, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x48, 0x00, 0x52, 0x06, - 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x12, 0x35, 0x0a, 0x06, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x75, 0x73, - 0x74, 0x6f, 0x6d, 0x48, 0x00, 0x52, 0x06, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x1d, 0x0a, - 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, - 0x48, 0x00, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x3a, 0x0a, 0x08, - 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e, - 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x08, - 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x22, 0x54, 0x0a, 0x08, 0x43, 0x61, 0x74, 0x65, - 0x67, 0x6f, 0x72, 0x79, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, - 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x14, - 0x0a, 0x10, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x53, 0x55, 0x42, 0x4a, 0x45, - 0x43, 0x54, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, - 0x5f, 0x45, 0x4e, 0x56, 0x49, 0x52, 0x4f, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x42, 0x0d, - 0x0a, 0x0b, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x42, 0x0a, - 0x0c, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x32, 0x0a, - 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, - 0x6e, 0x22, 0x5d, 0x0a, 0x0b, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x3e, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, - 0x01, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, - 0x22, 0xcf, 0x01, 0x0a, 0x0f, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x48, 0x00, 0x52, 0x06, 0x63, 0x6c, 0x61, 0x69, + 0x6d, 0x73, 0x12, 0x1d, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, + 0x64, 0x12, 0x3a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x43, 0x61, 0x74, 0x65, 0x67, + 0x6f, 0x72, 0x79, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x22, 0x54, 0x0a, + 0x08, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x41, 0x54, + 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, + 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, + 0x53, 0x55, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x41, 0x54, + 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x45, 0x4e, 0x56, 0x49, 0x52, 0x4f, 0x4e, 0x4d, 0x45, 0x4e, + 0x54, 0x10, 0x02, 0x42, 0x0d, 0x0a, 0x0b, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x74, 0x79, + 0x70, 0x65, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, + 0x08, 0x07, 0x10, 0x08, 0x52, 0x11, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x61, + 0x69, 0x6d, 0x73, 0x5f, 0x75, 0x72, 0x6c, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x52, 0x06, 0x63, + 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x22, 0x42, 0x0a, 0x0c, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, + 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x32, 0x0a, 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, + 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x09, + 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x50, 0x0a, 0x0b, 0x45, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x31, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0xcf, 0x01, 0x0a, 0x0f, + 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3f, 0x0a, 0x0d, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x0c, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x12, 0x51, 0x0a, 0x13, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0xce, 0x02, + 0x0a, 0x10, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x16, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, + 0x73, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x49, 0x64, + 0x12, 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x44, 0x0a, 0x08, 0x64, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x20, + 0x0a, 0x0b, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x22, 0x4c, 0x0a, 0x08, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x14, + 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, + 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4e, 0x59, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x45, 0x43, + 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x22, 0x62, + 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4b, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1e, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x73, 0x22, 0x66, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x12, 0x64, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22, 0xfa, 0x01, 0x0a, 0x16, 0x47, + 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x3b, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x48, 0x00, 0x52, 0x05, 0x73, 0x63, 0x6f, + 0x70, 0x65, 0x88, 0x01, 0x01, 0x12, 0x45, 0x0a, 0x1c, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, + 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, + 0x61, 0x72, 0x63, 0x68, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x1a, 0x77, + 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, + 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, + 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x42, 0x1f, 0x0a, 0x1d, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, + 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, + 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x22, 0x63, 0x0a, 0x12, 0x45, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x1b, 0x0a, + 0x09, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x61, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, + 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x73, 0x22, 0x7b, 0x0a, 0x11, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x65, 0x12, 0x34, 0x0a, 0x16, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x14, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x73, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x61, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x73, 0x22, 0x60, 0x0a, 0x17, 0x47, 0x65, 0x74, + 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x0c, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xc1, 0x01, 0x0a, 0x14, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3f, - 0x0a, 0x0d, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, - 0x6e, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x12, - 0x51, 0x0a, 0x13, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x74, 0x74, 0x72, - 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x12, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x73, 0x22, 0xce, 0x02, 0x0a, 0x10, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0d, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, - 0x34, 0x0a, 0x16, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x74, 0x74, 0x72, - 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x14, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x65, 0x73, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x44, 0x0a, - 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x4c, 0x0a, 0x08, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x18, 0x0a, 0x14, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, - 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x44, - 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4e, 0x59, 0x10, 0x01, 0x12, 0x13, - 0x0a, 0x0f, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x45, 0x52, 0x4d, 0x49, - 0x54, 0x10, 0x02, 0x22, 0x62, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4b, 0x0a, 0x11, 0x64, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, 0x66, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x44, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x4e, 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x11, 0x64, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22, - 0xfa, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x08, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x3b, 0x0a, - 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x48, 0x00, - 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x88, 0x01, 0x01, 0x12, 0x45, 0x0a, 0x1c, 0x77, 0x69, - 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, - 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, - 0x48, 0x01, 0x52, 0x1a, 0x77, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, - 0x6e, 0x73, 0x69, 0x76, 0x65, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x88, 0x01, - 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x42, 0x1f, 0x0a, 0x1d, 0x5f, - 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, - 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x22, 0x63, 0x0a, 0x12, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x12, - 0x30, 0x0a, 0x14, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x61, - 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, - 0x73, 0x22, 0x7b, 0x0a, 0x11, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, - 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, - 0x66, 0x71, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x61, 0x74, 0x74, 0x72, - 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x73, 0x22, 0x60, - 0x0a, 0x17, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x0c, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x21, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x22, 0xc1, 0x01, 0x0a, 0x14, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x2c, 0x0a, 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, - 0x73, 0x12, 0x51, 0x0a, 0x13, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x74, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, - 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, - 0x52, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x65, 0x73, 0x22, 0x6e, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x50, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x73, 0x22, 0x6d, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, - 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x1f, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x73, 0x32, 0x9c, 0x03, 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x75, 0x0a, 0x0c, - 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x22, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, - 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x23, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x3a, 0x01, 0x2a, - 0x22, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x8d, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x29, 0x2e, 0x61, 0x75, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2c, + 0x0a, 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x51, 0x0a, 0x13, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x12, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, + 0x6e, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, + 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x50, 0x0a, + 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x10, 0x64, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, + 0x6d, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, + 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, + 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x11, 0x64, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x32, 0x9c, + 0x03, 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x75, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x44, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x44, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x3a, 0x01, 0x2a, 0x22, 0x11, 0x2f, 0x76, 0x31, + 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x8d, + 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, + 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x7d, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, - 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x3a, 0x01, 0x2a, - 0x22, 0x10, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x42, 0xb2, 0x01, 0x0a, 0x11, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x12, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x35, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, - 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, 0x6f, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x0d, 0x41, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0xca, 0x02, 0x0d, 0x41, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0xe2, 0x02, 0x19, 0x41, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x47, 0x50, 0x42, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, + 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x7d, + 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x12, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, + 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x3a, 0x01, 0x2a, 0x22, 0x10, 0x2f, 0x76, 0x31, + 0x2f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x42, 0xb2, 0x01, + 0x0a, 0x11, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x42, 0x12, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x35, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, + 0x67, 0x6f, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0xca, 0x02, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0xe2, 0x02, 0x19, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0xea, 0x02, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1468,36 +1422,35 @@ var file_authorization_authorization_proto_goTypes = []interface{}{ } var file_authorization_authorization_proto_depIdxs = []int32{ 17, // 0: authorization.Entity.claims:type_name -> google.protobuf.Any - 4, // 1: authorization.Entity.custom:type_name -> authorization.EntityCustom - 0, // 2: authorization.Entity.category:type_name -> authorization.Entity.Category - 17, // 3: authorization.EntityCustom.extension:type_name -> google.protobuf.Any - 3, // 4: authorization.EntityChain.entities:type_name -> authorization.Entity - 18, // 5: authorization.DecisionRequest.actions:type_name -> policy.Action - 5, // 6: authorization.DecisionRequest.entity_chains:type_name -> authorization.EntityChain - 12, // 7: authorization.DecisionRequest.resource_attributes:type_name -> authorization.ResourceAttribute - 18, // 8: authorization.DecisionResponse.action:type_name -> policy.Action - 1, // 9: authorization.DecisionResponse.decision:type_name -> authorization.DecisionResponse.Decision - 6, // 10: authorization.GetDecisionsRequest.decision_requests:type_name -> authorization.DecisionRequest - 7, // 11: authorization.GetDecisionsResponse.decision_responses:type_name -> authorization.DecisionResponse - 3, // 12: authorization.GetEntitlementsRequest.entities:type_name -> authorization.Entity - 12, // 13: authorization.GetEntitlementsRequest.scope:type_name -> authorization.ResourceAttribute - 11, // 14: authorization.GetEntitlementsResponse.entitlements:type_name -> authorization.EntityEntitlements - 18, // 15: authorization.TokenDecisionRequest.actions:type_name -> policy.Action - 2, // 16: authorization.TokenDecisionRequest.tokens:type_name -> authorization.Token - 12, // 17: authorization.TokenDecisionRequest.resource_attributes:type_name -> authorization.ResourceAttribute - 14, // 18: authorization.GetDecisionsByTokenRequest.decision_requests:type_name -> authorization.TokenDecisionRequest - 7, // 19: authorization.GetDecisionsByTokenResponse.decision_responses:type_name -> authorization.DecisionResponse - 8, // 20: authorization.AuthorizationService.GetDecisions:input_type -> authorization.GetDecisionsRequest - 15, // 21: authorization.AuthorizationService.GetDecisionsByToken:input_type -> authorization.GetDecisionsByTokenRequest - 10, // 22: authorization.AuthorizationService.GetEntitlements:input_type -> authorization.GetEntitlementsRequest - 9, // 23: authorization.AuthorizationService.GetDecisions:output_type -> authorization.GetDecisionsResponse - 16, // 24: authorization.AuthorizationService.GetDecisionsByToken:output_type -> authorization.GetDecisionsByTokenResponse - 13, // 25: authorization.AuthorizationService.GetEntitlements:output_type -> authorization.GetEntitlementsResponse - 23, // [23:26] is the sub-list for method output_type - 20, // [20:23] is the sub-list for method input_type - 20, // [20:20] is the sub-list for extension type_name - 20, // [20:20] is the sub-list for extension extendee - 0, // [0:20] is the sub-list for field type_name + 0, // 1: authorization.Entity.category:type_name -> authorization.Entity.Category + 17, // 2: authorization.EntityCustom.extension:type_name -> google.protobuf.Any + 3, // 3: authorization.EntityChain.entities:type_name -> authorization.Entity + 18, // 4: authorization.DecisionRequest.actions:type_name -> policy.Action + 5, // 5: authorization.DecisionRequest.entity_chains:type_name -> authorization.EntityChain + 12, // 6: authorization.DecisionRequest.resource_attributes:type_name -> authorization.ResourceAttribute + 18, // 7: authorization.DecisionResponse.action:type_name -> policy.Action + 1, // 8: authorization.DecisionResponse.decision:type_name -> authorization.DecisionResponse.Decision + 6, // 9: authorization.GetDecisionsRequest.decision_requests:type_name -> authorization.DecisionRequest + 7, // 10: authorization.GetDecisionsResponse.decision_responses:type_name -> authorization.DecisionResponse + 3, // 11: authorization.GetEntitlementsRequest.entities:type_name -> authorization.Entity + 12, // 12: authorization.GetEntitlementsRequest.scope:type_name -> authorization.ResourceAttribute + 11, // 13: authorization.GetEntitlementsResponse.entitlements:type_name -> authorization.EntityEntitlements + 18, // 14: authorization.TokenDecisionRequest.actions:type_name -> policy.Action + 2, // 15: authorization.TokenDecisionRequest.tokens:type_name -> authorization.Token + 12, // 16: authorization.TokenDecisionRequest.resource_attributes:type_name -> authorization.ResourceAttribute + 14, // 17: authorization.GetDecisionsByTokenRequest.decision_requests:type_name -> authorization.TokenDecisionRequest + 7, // 18: authorization.GetDecisionsByTokenResponse.decision_responses:type_name -> authorization.DecisionResponse + 8, // 19: authorization.AuthorizationService.GetDecisions:input_type -> authorization.GetDecisionsRequest + 15, // 20: authorization.AuthorizationService.GetDecisionsByToken:input_type -> authorization.GetDecisionsByTokenRequest + 10, // 21: authorization.AuthorizationService.GetEntitlements:input_type -> authorization.GetEntitlementsRequest + 9, // 22: authorization.AuthorizationService.GetDecisions:output_type -> authorization.GetDecisionsResponse + 16, // 23: authorization.AuthorizationService.GetDecisionsByToken:output_type -> authorization.GetDecisionsByTokenResponse + 13, // 24: authorization.AuthorizationService.GetEntitlements:output_type -> authorization.GetEntitlementsResponse + 22, // [22:25] is the sub-list for method output_type + 19, // [19:22] is the sub-list for method input_type + 19, // [19:19] is the sub-list for extension type_name + 19, // [19:19] is the sub-list for extension extendee + 0, // [0:19] is the sub-list for field type_name } func init() { file_authorization_authorization_proto_init() } @@ -1690,10 +1643,7 @@ func file_authorization_authorization_proto_init() { file_authorization_authorization_proto_msgTypes[1].OneofWrappers = []interface{}{ (*Entity_EmailAddress)(nil), (*Entity_UserName)(nil), - (*Entity_RemoteClaimsUrl)(nil), - (*Entity_Uuid)(nil), (*Entity_Claims)(nil), - (*Entity_Custom)(nil), (*Entity_ClientId)(nil), } file_authorization_authorization_proto_msgTypes[8].OneofWrappers = []interface{}{} diff --git a/protocol/go/authorization/authorization_grpc.pb.go b/protocol/go/authorization/authorization_grpc.pb.go index ddcb5506e6..91e0e3ea06 100644 --- a/protocol/go/authorization/authorization_grpc.pb.go +++ b/protocol/go/authorization/authorization_grpc.pb.go @@ -30,9 +30,9 @@ const ( type AuthorizationServiceClient interface { // Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetDecisionMultiResource, GetDecisionBulk) GetDecisions(ctx context.Context, in *GetDecisionsRequest, opts ...grpc.CallOption) (*GetDecisionsResponse, error) - // Deprecated: Use AuthorizationV2 methods instead (GetDecisionByToken, GetDecisionByTokenMultiResource) + // Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetDecisionMultiResource) GetDecisionsByToken(ctx context.Context, in *GetDecisionsByTokenRequest, opts ...grpc.CallOption) (*GetDecisionsByTokenResponse, error) - // Deprecated: Use AuthorizationV2 method instead (GetEntitlements, GetEntitlementsByToken) + // Deprecated: Use AuthorizationV2 method instead (GetEntitlements) GetEntitlements(ctx context.Context, in *GetEntitlementsRequest, opts ...grpc.CallOption) (*GetEntitlementsResponse, error) } @@ -77,9 +77,9 @@ func (c *authorizationServiceClient) GetEntitlements(ctx context.Context, in *Ge type AuthorizationServiceServer interface { // Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetDecisionMultiResource, GetDecisionBulk) GetDecisions(context.Context, *GetDecisionsRequest) (*GetDecisionsResponse, error) - // Deprecated: Use AuthorizationV2 methods instead (GetDecisionByToken, GetDecisionByTokenMultiResource) + // Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetDecisionMultiResource) GetDecisionsByToken(context.Context, *GetDecisionsByTokenRequest) (*GetDecisionsByTokenResponse, error) - // Deprecated: Use AuthorizationV2 method instead (GetEntitlements, GetEntitlementsByToken) + // Deprecated: Use AuthorizationV2 method instead (GetEntitlements) GetEntitlements(context.Context, *GetEntitlementsRequest) (*GetEntitlementsResponse, error) mustEmbedUnimplementedAuthorizationServiceServer() } diff --git a/protocol/go/authorization/authorizationconnect/authorization.connect.go b/protocol/go/authorization/authorizationconnect/authorization.connect.go index 71262ad008..7797adf4d8 100644 --- a/protocol/go/authorization/authorizationconnect/authorization.connect.go +++ b/protocol/go/authorization/authorizationconnect/authorization.connect.go @@ -56,9 +56,9 @@ var ( type AuthorizationServiceClient interface { // Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetDecisionMultiResource, GetDecisionBulk) GetDecisions(context.Context, *connect.Request[authorization.GetDecisionsRequest]) (*connect.Response[authorization.GetDecisionsResponse], error) - // Deprecated: Use AuthorizationV2 methods instead (GetDecisionByToken, GetDecisionByTokenMultiResource) + // Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetDecisionMultiResource) GetDecisionsByToken(context.Context, *connect.Request[authorization.GetDecisionsByTokenRequest]) (*connect.Response[authorization.GetDecisionsByTokenResponse], error) - // Deprecated: Use AuthorizationV2 method instead (GetEntitlements, GetEntitlementsByToken) + // Deprecated: Use AuthorizationV2 method instead (GetEntitlements) GetEntitlements(context.Context, *connect.Request[authorization.GetEntitlementsRequest]) (*connect.Response[authorization.GetEntitlementsResponse], error) } @@ -120,9 +120,9 @@ func (c *authorizationServiceClient) GetEntitlements(ctx context.Context, req *c type AuthorizationServiceHandler interface { // Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetDecisionMultiResource, GetDecisionBulk) GetDecisions(context.Context, *connect.Request[authorization.GetDecisionsRequest]) (*connect.Response[authorization.GetDecisionsResponse], error) - // Deprecated: Use AuthorizationV2 methods instead (GetDecisionByToken, GetDecisionByTokenMultiResource) + // Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetDecisionMultiResource) GetDecisionsByToken(context.Context, *connect.Request[authorization.GetDecisionsByTokenRequest]) (*connect.Response[authorization.GetDecisionsByTokenResponse], error) - // Deprecated: Use AuthorizationV2 method instead (GetEntitlements, GetEntitlementsByToken) + // Deprecated: Use AuthorizationV2 method instead (GetEntitlements) GetEntitlements(context.Context, *connect.Request[authorization.GetEntitlementsRequest]) (*connect.Response[authorization.GetEntitlementsResponse], error) } diff --git a/protocol/go/authorization/v2/authorization.pb.go b/protocol/go/authorization/v2/authorization.pb.go index ae2183de69..13930b7a7a 100644 --- a/protocol/go/authorization/v2/authorization.pb.go +++ b/protocol/go/authorization/v2/authorization.pb.go @@ -8,11 +8,10 @@ package authorizationv2 import ( _ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate" - authorization "github.com/opentdf/platform/protocol/go/authorization" + entity "github.com/opentdf/platform/protocol/go/entity" policy "github.com/opentdf/platform/protocol/go/policy" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" - anypb "google.golang.org/protobuf/types/known/anypb" wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" reflect "reflect" sync "sync" @@ -74,68 +73,24 @@ func (Decision) EnumDescriptor() ([]byte, []int) { return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{0} } -type Entity_Category int32 - -const ( - Entity_CATEGORY_UNSPECIFIED Entity_Category = 0 - Entity_CATEGORY_SUBJECT Entity_Category = 1 - Entity_CATEGORY_ENVIRONMENT Entity_Category = 2 -) - -// Enum value maps for Entity_Category. -var ( - Entity_Category_name = map[int32]string{ - 0: "CATEGORY_UNSPECIFIED", - 1: "CATEGORY_SUBJECT", - 2: "CATEGORY_ENVIRONMENT", - } - Entity_Category_value = map[string]int32{ - "CATEGORY_UNSPECIFIED": 0, - "CATEGORY_SUBJECT": 1, - "CATEGORY_ENVIRONMENT": 2, - } -) - -func (x Entity_Category) Enum() *Entity_Category { - p := new(Entity_Category) - *p = x - return p -} - -func (x Entity_Category) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (Entity_Category) Descriptor() protoreflect.EnumDescriptor { - return file_authorization_v2_authorization_proto_enumTypes[1].Descriptor() -} - -func (Entity_Category) Type() protoreflect.EnumType { - return &file_authorization_v2_authorization_proto_enumTypes[1] -} - -func (x Entity_Category) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use Entity_Category.Descriptor instead. -func (Entity_Category) EnumDescriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{1, 0} -} - -// A set of related PE and NPE -type EntityChain struct { +// The EntityReference is the actor in an entitlement or decision request - the PE, NPE, or PE+NPE being authorized. +// The abstraction houses the distinct entity types, PE and/or NPE combinations, or a registered +// resource value being treated as an entity in entitlement/authorization decisioning. +type EntityReference struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // ephemeral id for tracking between request and response - EphemeralChainId string `protobuf:"bytes,1,opt,name=ephemeral_chain_id,json=ephemeralChainId,proto3" json:"ephemeral_chain_id,omitempty"` - Entities []*Entity `protobuf:"bytes,2,rep,name=entities,proto3" json:"entities,omitempty"` + // Types that are assignable to Actor: + // + // *EntityReference_EntityChain + // *EntityReference_RegisteredResourceValueFqn + // *EntityReference_Token + Actor isEntityReference_Actor `protobuf_oneof:"actor"` } -func (x *EntityChain) Reset() { - *x = EntityChain{} +func (x *EntityReference) Reset() { + *x = EntityReference{} if protoimpl.UnsafeEnabled { mi := &file_authorization_v2_authorization_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -143,13 +98,13 @@ func (x *EntityChain) Reset() { } } -func (x *EntityChain) String() string { +func (x *EntityReference) String() string { return protoimpl.X.MessageStringOf(x) } -func (*EntityChain) ProtoMessage() {} +func (*EntityReference) ProtoMessage() {} -func (x *EntityChain) ProtoReflect() protoreflect.Message { +func (x *EntityReference) ProtoReflect() protoreflect.Message { mi := &file_authorization_v2_authorization_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -161,170 +116,64 @@ func (x *EntityChain) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use EntityChain.ProtoReflect.Descriptor instead. -func (*EntityChain) Descriptor() ([]byte, []int) { +// Deprecated: Use EntityReference.ProtoReflect.Descriptor instead. +func (*EntityReference) Descriptor() ([]byte, []int) { return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{0} } -func (x *EntityChain) GetEphemeralChainId() string { - if x != nil { - return x.EphemeralChainId - } - return "" -} - -func (x *EntityChain) GetEntities() []*Entity { - if x != nil { - return x.Entities - } - return nil -} - -// PE (Person Entity) or NPE (Non-Person Entity) -type Entity struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // ephemeral id for tracking between request and response - EphemeralId string `protobuf:"bytes,1,opt,name=ephemeral_id,json=ephemeralId,proto3" json:"ephemeral_id,omitempty"` - // Standard entity types supported by the platform - // - // Types that are assignable to EntityType: - // - // *Entity_EmailAddress - // *Entity_UserName - // *Entity_Claims - // *Entity_ClientId - // *Entity_RegisteredResourceValueFqn - EntityType isEntity_EntityType `protobuf_oneof:"entity_type"` - Category Entity_Category `protobuf:"varint,9,opt,name=category,proto3,enum=authorization.v2.Entity_Category" json:"category,omitempty"` -} - -func (x *Entity) Reset() { - *x = Entity{} - if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Entity) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Entity) ProtoMessage() {} - -func (x *Entity) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Entity.ProtoReflect.Descriptor instead. -func (*Entity) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{1} -} - -func (x *Entity) GetEphemeralId() string { - if x != nil { - return x.EphemeralId - } - return "" -} - -func (m *Entity) GetEntityType() isEntity_EntityType { +func (m *EntityReference) GetActor() isEntityReference_Actor { if m != nil { - return m.EntityType + return m.Actor } return nil } -func (x *Entity) GetEmailAddress() string { - if x, ok := x.GetEntityType().(*Entity_EmailAddress); ok { - return x.EmailAddress - } - return "" -} - -func (x *Entity) GetUserName() string { - if x, ok := x.GetEntityType().(*Entity_UserName); ok { - return x.UserName - } - return "" -} - -func (x *Entity) GetClaims() *anypb.Any { - if x, ok := x.GetEntityType().(*Entity_Claims); ok { - return x.Claims +func (x *EntityReference) GetEntityChain() *entity.EntityChain { + if x, ok := x.GetActor().(*EntityReference_EntityChain); ok { + return x.EntityChain } return nil } -func (x *Entity) GetClientId() string { - if x, ok := x.GetEntityType().(*Entity_ClientId); ok { - return x.ClientId - } - return "" -} - -func (x *Entity) GetRegisteredResourceValueFqn() string { - if x, ok := x.GetEntityType().(*Entity_RegisteredResourceValueFqn); ok { +func (x *EntityReference) GetRegisteredResourceValueFqn() string { + if x, ok := x.GetActor().(*EntityReference_RegisteredResourceValueFqn); ok { return x.RegisteredResourceValueFqn } return "" } -func (x *Entity) GetCategory() Entity_Category { - if x != nil { - return x.Category +func (x *EntityReference) GetToken() *entity.Token { + if x, ok := x.GetActor().(*EntityReference_Token); ok { + return x.Token } - return Entity_CATEGORY_UNSPECIFIED -} - -type isEntity_EntityType interface { - isEntity_EntityType() -} - -type Entity_EmailAddress struct { - // one of the entity options must be set - EmailAddress string `protobuf:"bytes,2,opt,name=email_address,json=emailAddress,proto3,oneof"` + return nil } -type Entity_UserName struct { - UserName string `protobuf:"bytes,3,opt,name=user_name,json=userName,proto3,oneof"` +type isEntityReference_Actor interface { + isEntityReference_Actor() } -type Entity_Claims struct { - // used by ERS claims mode - Claims *anypb.Any `protobuf:"bytes,4,opt,name=claims,proto3,oneof"` +type EntityReference_EntityChain struct { + // chain of one or more entities + EntityChain *entity.EntityChain `protobuf:"bytes,1,opt,name=entity_chain,json=entityChain,proto3,oneof"` } -type Entity_ClientId struct { - // EntityCustom custom = 5; - ClientId string `protobuf:"bytes,6,opt,name=client_id,json=clientId,proto3,oneof"` +type EntityReference_RegisteredResourceValueFqn struct { + // fully qualified name of the registered resource value stored in platform policy, where in + // this case the resource acts as and represents a single entity for authorization/entitlement decisioning + RegisteredResourceValueFqn string `protobuf:"bytes,2,opt,name=registered_resource_value_fqn,json=registeredResourceValueFqn,proto3,oneof"` } -type Entity_RegisteredResourceValueFqn struct { - RegisteredResourceValueFqn string `protobuf:"bytes,7,opt,name=registered_resource_value_fqn,json=registeredResourceValueFqn,proto3,oneof"` +type EntityReference_Token struct { + // access token (JWT), which is used to create an entity chain (comprising one or more entities) + Token *entity.Token `protobuf:"bytes,3,opt,name=token,proto3,oneof"` } -func (*Entity_EmailAddress) isEntity_EntityType() {} - -func (*Entity_UserName) isEntity_EntityType() {} +func (*EntityReference_EntityChain) isEntityReference_Actor() {} -func (*Entity_Claims) isEntity_EntityType() {} +func (*EntityReference_RegisteredResourceValueFqn) isEntityReference_Actor() {} -func (*Entity_ClientId) isEntity_EntityType() {} - -func (*Entity_RegisteredResourceValueFqn) isEntity_EntityType() {} +func (*EntityReference_Token) isEntityReference_Actor() {} // Entitlements for a given entity, mapping each attribute value FQN to any entitled actions[] type EntityEntitlements struct { @@ -340,7 +189,7 @@ type EntityEntitlements struct { func (x *EntityEntitlements) Reset() { *x = EntityEntitlements{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[2] + mi := &file_authorization_v2_authorization_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -353,7 +202,7 @@ func (x *EntityEntitlements) String() string { func (*EntityEntitlements) ProtoMessage() {} func (x *EntityEntitlements) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[2] + mi := &file_authorization_v2_authorization_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -366,7 +215,7 @@ func (x *EntityEntitlements) ProtoReflect() protoreflect.Message { // Deprecated: Use EntityEntitlements.ProtoReflect.Descriptor instead. func (*EntityEntitlements) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{2} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{1} } func (x *EntityEntitlements) GetEphemeralId() string { @@ -401,7 +250,7 @@ type Resource struct { func (x *Resource) Reset() { *x = Resource{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[3] + mi := &file_authorization_v2_authorization_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -414,7 +263,7 @@ func (x *Resource) String() string { func (*Resource) ProtoMessage() {} func (x *Resource) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[3] + mi := &file_authorization_v2_authorization_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -427,7 +276,7 @@ func (x *Resource) ProtoReflect() protoreflect.Message { // Deprecated: Use Resource.ProtoReflect.Descriptor instead. func (*Resource) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{3} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{2} } func (x *Resource) GetEphemeralId() string { @@ -488,7 +337,7 @@ type ResourceDecision struct { func (x *ResourceDecision) Reset() { *x = ResourceDecision{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[4] + mi := &file_authorization_v2_authorization_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -501,7 +350,7 @@ func (x *ResourceDecision) String() string { func (*ResourceDecision) ProtoMessage() {} func (x *ResourceDecision) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[4] + mi := &file_authorization_v2_authorization_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -514,7 +363,7 @@ func (x *ResourceDecision) ProtoReflect() protoreflect.Message { // Deprecated: Use ResourceDecision.ProtoReflect.Descriptor instead. func (*ResourceDecision) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{4} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{3} } func (x *ResourceDecision) GetEphemeralResourceId() string { @@ -540,7 +389,8 @@ type GetDecisionRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Entity *EntityChain `protobuf:"bytes,1,opt,name=entity,proto3" json:"entity,omitempty"` + // entity must be provided + Entity *EntityReference `protobuf:"bytes,1,opt,name=entity,proto3" json:"entity,omitempty"` // name on action is required Action *policy.Action `protobuf:"bytes,2,opt,name=action,proto3" json:"action,omitempty"` Resource *Resource `protobuf:"bytes,3,opt,name=resource,proto3" json:"resource,omitempty"` @@ -549,7 +399,7 @@ type GetDecisionRequest struct { func (x *GetDecisionRequest) Reset() { *x = GetDecisionRequest{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[5] + mi := &file_authorization_v2_authorization_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -562,7 +412,7 @@ func (x *GetDecisionRequest) String() string { func (*GetDecisionRequest) ProtoMessage() {} func (x *GetDecisionRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[5] + mi := &file_authorization_v2_authorization_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -575,10 +425,10 @@ func (x *GetDecisionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDecisionRequest.ProtoReflect.Descriptor instead. func (*GetDecisionRequest) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{5} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{4} } -func (x *GetDecisionRequest) GetEntity() *EntityChain { +func (x *GetDecisionRequest) GetEntity() *EntityReference { if x != nil { return x.Entity } @@ -611,7 +461,7 @@ type GetDecisionResponse struct { func (x *GetDecisionResponse) Reset() { *x = GetDecisionResponse{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[6] + mi := &file_authorization_v2_authorization_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -624,7 +474,7 @@ func (x *GetDecisionResponse) String() string { func (*GetDecisionResponse) ProtoMessage() {} func (x *GetDecisionResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[6] + mi := &file_authorization_v2_authorization_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -637,7 +487,7 @@ func (x *GetDecisionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDecisionResponse.ProtoReflect.Descriptor instead. func (*GetDecisionResponse) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{6} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{5} } func (x *GetDecisionResponse) GetDecision() *ResourceDecision { @@ -657,8 +507,8 @@ type GetDecisionMultiResourceRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // entity chain must be defined - Entity *EntityChain `protobuf:"bytes,1,opt,name=entity,proto3" json:"entity,omitempty"` + // entity must be provided + Entity *EntityReference `protobuf:"bytes,1,opt,name=entity,proto3" json:"entity,omitempty"` // name on action is required Action *policy.Action `protobuf:"bytes,2,opt,name=action,proto3" json:"action,omitempty"` Resources []*Resource `protobuf:"bytes,3,rep,name=resources,proto3" json:"resources,omitempty"` @@ -667,7 +517,7 @@ type GetDecisionMultiResourceRequest struct { func (x *GetDecisionMultiResourceRequest) Reset() { *x = GetDecisionMultiResourceRequest{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[7] + mi := &file_authorization_v2_authorization_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -680,7 +530,7 @@ func (x *GetDecisionMultiResourceRequest) String() string { func (*GetDecisionMultiResourceRequest) ProtoMessage() {} func (x *GetDecisionMultiResourceRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[7] + mi := &file_authorization_v2_authorization_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -693,10 +543,10 @@ func (x *GetDecisionMultiResourceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDecisionMultiResourceRequest.ProtoReflect.Descriptor instead. func (*GetDecisionMultiResourceRequest) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{7} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{6} } -func (x *GetDecisionMultiResourceRequest) GetEntity() *EntityChain { +func (x *GetDecisionMultiResourceRequest) GetEntity() *EntityReference { if x != nil { return x.Entity } @@ -731,7 +581,7 @@ type GetDecisionMultiResourceResponse struct { func (x *GetDecisionMultiResourceResponse) Reset() { *x = GetDecisionMultiResourceResponse{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[8] + mi := &file_authorization_v2_authorization_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -744,7 +594,7 @@ func (x *GetDecisionMultiResourceResponse) String() string { func (*GetDecisionMultiResourceResponse) ProtoMessage() {} func (x *GetDecisionMultiResourceResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[8] + mi := &file_authorization_v2_authorization_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -757,7 +607,7 @@ func (x *GetDecisionMultiResourceResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDecisionMultiResourceResponse.ProtoReflect.Descriptor instead. func (*GetDecisionMultiResourceResponse) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{8} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{7} } func (x *GetDecisionMultiResourceResponse) GetAllPermitted() *wrapperspb.BoolValue { @@ -789,7 +639,7 @@ type GetDecisionBulkRequest struct { func (x *GetDecisionBulkRequest) Reset() { *x = GetDecisionBulkRequest{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[9] + mi := &file_authorization_v2_authorization_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -802,7 +652,7 @@ func (x *GetDecisionBulkRequest) String() string { func (*GetDecisionBulkRequest) ProtoMessage() {} func (x *GetDecisionBulkRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[9] + mi := &file_authorization_v2_authorization_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -815,7 +665,7 @@ func (x *GetDecisionBulkRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDecisionBulkRequest.ProtoReflect.Descriptor instead. func (*GetDecisionBulkRequest) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{9} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{8} } func (x *GetDecisionBulkRequest) GetDecisionRequests() []*GetDecisionMultiResourceRequest { @@ -836,7 +686,7 @@ type GetDecisionBulkResponse struct { func (x *GetDecisionBulkResponse) Reset() { *x = GetDecisionBulkResponse{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[10] + mi := &file_authorization_v2_authorization_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -849,7 +699,7 @@ func (x *GetDecisionBulkResponse) String() string { func (*GetDecisionBulkResponse) ProtoMessage() {} func (x *GetDecisionBulkResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[10] + mi := &file_authorization_v2_authorization_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -862,7 +712,7 @@ func (x *GetDecisionBulkResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDecisionBulkResponse.ProtoReflect.Descriptor instead. func (*GetDecisionBulkResponse) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{10} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{9} } func (x *GetDecisionBulkResponse) GetDecisionResponses() []*GetDecisionMultiResourceResponse { @@ -881,7 +731,8 @@ type GetEntitlementsRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EntityChain *EntityChain `protobuf:"bytes,1,opt,name=entity_chain,json=entityChain,proto3" json:"entity_chain,omitempty"` + // entity must be provided + Entity *EntityReference `protobuf:"bytes,1,opt,name=entity,proto3" json:"entity,omitempty"` // optional parameter to return all entitled values for attribute definitions with hierarchy rules, propagating // down the hierarchical values instead of returning solely the value that is directly entitled WithComprehensiveHierarchy *bool `protobuf:"varint,2,opt,name=with_comprehensive_hierarchy,json=withComprehensiveHierarchy,proto3,oneof" json:"with_comprehensive_hierarchy,omitempty"` @@ -890,7 +741,7 @@ type GetEntitlementsRequest struct { func (x *GetEntitlementsRequest) Reset() { *x = GetEntitlementsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[11] + mi := &file_authorization_v2_authorization_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -903,7 +754,7 @@ func (x *GetEntitlementsRequest) String() string { func (*GetEntitlementsRequest) ProtoMessage() {} func (x *GetEntitlementsRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[11] + mi := &file_authorization_v2_authorization_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -916,12 +767,12 @@ func (x *GetEntitlementsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetEntitlementsRequest.ProtoReflect.Descriptor instead. func (*GetEntitlementsRequest) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{11} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{10} } -func (x *GetEntitlementsRequest) GetEntityChain() *EntityChain { +func (x *GetEntitlementsRequest) GetEntity() *EntityReference { if x != nil { - return x.EntityChain + return x.Entity } return nil } @@ -944,7 +795,7 @@ type GetEntitlementsResponse struct { func (x *GetEntitlementsResponse) Reset() { *x = GetEntitlementsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[12] + mi := &file_authorization_v2_authorization_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -957,7 +808,7 @@ func (x *GetEntitlementsResponse) String() string { func (*GetEntitlementsResponse) ProtoMessage() {} func (x *GetEntitlementsResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[12] + mi := &file_authorization_v2_authorization_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -970,7 +821,7 @@ func (x *GetEntitlementsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetEntitlementsResponse.ProtoReflect.Descriptor instead. func (*GetEntitlementsResponse) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{12} + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{11} } func (x *GetEntitlementsResponse) GetEntitlements() []*EntityEntitlements { @@ -980,35 +831,31 @@ func (x *GetEntitlementsResponse) GetEntitlements() []*EntityEntitlements { return nil } -// What can the entity (PE or NPE, represented by the token) do, broken down as permitted actions on attribute value FQNs? -type GetEntitlementsByTokenRequest struct { +type EntityEntitlements_ActionsList struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Token *authorization.Token `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` - // optional parameter to return all entitled values for attribute definitions with hierarchy rules, propagating - // down the hierarchical values instead of returning solely the value that is directly entitled - WithComprehensiveHierarchy *bool `protobuf:"varint,2,opt,name=with_comprehensive_hierarchy,json=withComprehensiveHierarchy,proto3,oneof" json:"with_comprehensive_hierarchy,omitempty"` + Actions []*policy.Action `protobuf:"bytes,1,rep,name=actions,proto3" json:"actions,omitempty"` } -func (x *GetEntitlementsByTokenRequest) Reset() { - *x = GetEntitlementsByTokenRequest{} +func (x *EntityEntitlements_ActionsList) Reset() { + *x = EntityEntitlements_ActionsList{} if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[13] + mi := &file_authorization_v2_authorization_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *GetEntitlementsByTokenRequest) String() string { +func (x *EntityEntitlements_ActionsList) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetEntitlementsByTokenRequest) ProtoMessage() {} +func (*EntityEntitlements_ActionsList) ProtoMessage() {} -func (x *GetEntitlementsByTokenRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[13] +func (x *EntityEntitlements_ActionsList) ProtoReflect() protoreflect.Message { + mi := &file_authorization_v2_authorization_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1019,35 +866,28 @@ func (x *GetEntitlementsByTokenRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetEntitlementsByTokenRequest.ProtoReflect.Descriptor instead. -func (*GetEntitlementsByTokenRequest) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{13} +// Deprecated: Use EntityEntitlements_ActionsList.ProtoReflect.Descriptor instead. +func (*EntityEntitlements_ActionsList) Descriptor() ([]byte, []int) { + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{1, 0} } -func (x *GetEntitlementsByTokenRequest) GetToken() *authorization.Token { +func (x *EntityEntitlements_ActionsList) GetActions() []*policy.Action { if x != nil { - return x.Token + return x.Actions } return nil } -func (x *GetEntitlementsByTokenRequest) GetWithComprehensiveHierarchy() bool { - if x != nil && x.WithComprehensiveHierarchy != nil { - return *x.WithComprehensiveHierarchy - } - return false -} - -type GetEntitlementsByTokenResponse struct { +type Resource_AttributeValues struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Entitlements []*EntityEntitlements `protobuf:"bytes,1,rep,name=entitlements,proto3" json:"entitlements,omitempty"` + Fqns []string `protobuf:"bytes,1,rep,name=fqns,proto3" json:"fqns,omitempty"` } -func (x *GetEntitlementsByTokenResponse) Reset() { - *x = GetEntitlementsByTokenResponse{} +func (x *Resource_AttributeValues) Reset() { + *x = Resource_AttributeValues{} if protoimpl.UnsafeEnabled { mi := &file_authorization_v2_authorization_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1055,13 +895,13 @@ func (x *GetEntitlementsByTokenResponse) Reset() { } } -func (x *GetEntitlementsByTokenResponse) String() string { +func (x *Resource_AttributeValues) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetEntitlementsByTokenResponse) ProtoMessage() {} +func (*Resource_AttributeValues) ProtoMessage() {} -func (x *GetEntitlementsByTokenResponse) ProtoReflect() protoreflect.Message { +func (x *Resource_AttributeValues) ProtoReflect() protoreflect.Message { mi := &file_authorization_v2_authorization_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -1073,790 +913,316 @@ func (x *GetEntitlementsByTokenResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetEntitlementsByTokenResponse.ProtoReflect.Descriptor instead. -func (*GetEntitlementsByTokenResponse) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{14} +// Deprecated: Use Resource_AttributeValues.ProtoReflect.Descriptor instead. +func (*Resource_AttributeValues) Descriptor() ([]byte, []int) { + return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{2, 0} } -func (x *GetEntitlementsByTokenResponse) GetEntitlements() []*EntityEntitlements { +func (x *Resource_AttributeValues) GetFqns() []string { if x != nil { - return x.Entitlements + return x.Fqns } return nil } -// Can the entity (PE or NPE) represented by this token access? -// 1. one token -// 2. one action -// 3. one resource -type GetDecisionByTokenRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +var File_authorization_v2_authorization_proto protoreflect.FileDescriptor - Token *authorization.Token `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` - // name on action is required - Action *policy.Action `protobuf:"bytes,2,opt,name=action,proto3" json:"action,omitempty"` - Resource *Resource `protobuf:"bytes,3,opt,name=resource,proto3" json:"resource,omitempty"` +var file_authorization_v2_authorization_proto_rawDesc = []byte{ + 0x0a, 0x24, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, + 0x76, 0x32, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x13, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2f, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, + 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x70, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x22, 0x91, 0x03, 0x0a, 0x0f, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x12, 0xa2, 0x01, 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, + 0x42, 0x68, 0xba, 0x48, 0x65, 0xba, 0x01, 0x62, 0x0a, 0x15, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, + 0x19, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, + 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x2e, 0x68, 0x61, 0x73, 0x28, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x29, 0x20, 0x26, + 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, + 0x73, 0x69, 0x7a, 0x65, 0x28, 0x29, 0x20, 0x3e, 0x20, 0x30, 0x48, 0x00, 0x52, 0x0b, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x4c, 0x0a, 0x1d, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x48, 0x00, 0x52, 0x1a, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x12, 0x7b, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x54, 0xba, 0x48, 0x51, 0xba, 0x01, 0x4e, 0x0a, 0x0e, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x16, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x24, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x6a, 0x77, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6a, 0x77, 0x74, + 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x29, 0x20, 0x3e, 0x20, 0x30, 0x48, 0x00, 0x52, 0x05, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x0e, 0x0a, 0x05, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x05, 0xba, + 0x48, 0x02, 0x08, 0x01, 0x22, 0x81, 0x03, 0x0a, 0x12, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, + 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x65, + 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x8b, + 0x01, 0x0a, 0x1f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x61, + 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, + 0x71, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, + 0x1b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x1a, 0x37, 0x0a, 0x0b, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x07, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, + 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x80, 0x01, 0x0a, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x46, 0x71, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x46, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xfe, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, + 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, + 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x57, 0x0a, 0x10, 0x61, 0x74, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x41, + 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x48, 0x00, + 0x52, 0x0f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x73, 0x12, 0x43, 0x0a, 0x1d, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x5f, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, + 0x71, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x1a, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x1a, 0x25, 0x0a, 0x0f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x6e, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, 0x6e, 0x73, 0x42, 0x0a, 0x0a, + 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x7e, 0x0a, 0x10, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x0a, + 0x15, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x65, 0x70, + 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, + 0x64, 0x12, 0x36, 0x0a, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xae, 0x02, 0x0a, 0x12, 0x47, 0x65, + 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x41, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x21, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, + 0x6e, 0x63, 0x65, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x12, 0x2e, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x3a, 0x65, 0xba, 0x48, 0x62, 0x1a, 0x60, 0x0a, 0x29, 0x67, 0x65, 0x74, 0x5f, + 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x72, 0x65, 0x71, + 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x1c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, + 0x6d, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x64, 0x1a, 0x15, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x22, 0x55, 0x0a, 0x13, 0x47, 0x65, + 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x3e, 0x0a, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x22, 0xc8, 0x02, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, + 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, + 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x2e, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, + 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x92, + 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x3a, + 0x6b, 0xba, 0x48, 0x68, 0x1a, 0x66, 0x0a, 0x2f, 0x67, 0x65, 0x74, 0x5f, 0x64, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x72, + 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x1c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x15, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x22, 0xb6, 0x01, 0x0a, + 0x20, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, + 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, + 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, + 0x65, 0x64, 0x12, 0x51, 0x0a, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x64, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, + 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x78, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x5e, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, + 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x10, 0x64, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, + 0x7c, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, + 0x6c, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, 0x12, 0x64, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22, 0xc3, 0x01, + 0x0a, 0x16, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x42, 0x06, 0xba, 0x48, 0x03, + 0xc8, 0x01, 0x01, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x45, 0x0a, 0x1c, 0x77, + 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, + 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x08, 0x48, 0x00, 0x52, 0x1a, 0x77, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, + 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x88, + 0x01, 0x01, 0x42, 0x1f, 0x0a, 0x1d, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, + 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, + 0x63, 0x68, 0x79, 0x22, 0x63, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, + 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, + 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2a, 0x4c, 0x0a, 0x08, 0x44, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x14, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, + 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x11, + 0x0a, 0x0d, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4e, 0x59, 0x10, + 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x45, + 0x52, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x32, 0xce, 0x03, 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, + 0x5c, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, + 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x83, 0x01, + 0x0a, 0x18, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, + 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x31, 0x2e, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, + 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, + 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, + 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x12, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, + 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, + 0x0f, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x12, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, + 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xd5, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, + 0x42, 0x12, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, + 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x48, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, 0x6f, 0x2f, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, + 0x3b, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x32, + 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x1c, 0x41, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0x5c, + 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x41, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x32, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } -func (x *GetDecisionByTokenRequest) Reset() { - *x = GetDecisionByTokenRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +var ( + file_authorization_v2_authorization_proto_rawDescOnce sync.Once + file_authorization_v2_authorization_proto_rawDescData = file_authorization_v2_authorization_proto_rawDesc +) + +func file_authorization_v2_authorization_proto_rawDescGZIP() []byte { + file_authorization_v2_authorization_proto_rawDescOnce.Do(func() { + file_authorization_v2_authorization_proto_rawDescData = protoimpl.X.CompressGZIP(file_authorization_v2_authorization_proto_rawDescData) + }) + return file_authorization_v2_authorization_proto_rawDescData } -func (x *GetDecisionByTokenRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetDecisionByTokenRequest) ProtoMessage() {} - -func (x *GetDecisionByTokenRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetDecisionByTokenRequest.ProtoReflect.Descriptor instead. -func (*GetDecisionByTokenRequest) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{15} -} - -func (x *GetDecisionByTokenRequest) GetToken() *authorization.Token { - if x != nil { - return x.Token - } - return nil -} - -func (x *GetDecisionByTokenRequest) GetAction() *policy.Action { - if x != nil { - return x.Action - } - return nil -} - -func (x *GetDecisionByTokenRequest) GetResource() *Resource { - if x != nil { - return x.Resource - } - return nil -} - -type GetDecisionByTokenResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - DecisionResponse *GetDecisionResponse `protobuf:"bytes,1,opt,name=decision_response,json=decisionResponse,proto3" json:"decision_response,omitempty"` -} - -func (x *GetDecisionByTokenResponse) Reset() { - *x = GetDecisionByTokenResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetDecisionByTokenResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetDecisionByTokenResponse) ProtoMessage() {} - -func (x *GetDecisionByTokenResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetDecisionByTokenResponse.ProtoReflect.Descriptor instead. -func (*GetDecisionByTokenResponse) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{16} -} - -func (x *GetDecisionByTokenResponse) GetDecisionResponse() *GetDecisionResponse { - if x != nil { - return x.DecisionResponse - } - return nil -} - -// Can the entity (PE or NPE) represented by this token access? -// 1. one token -// 2. one action -// 3. multiple resource -type GetDecisionByTokenMultiResourceRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Token *authorization.Token `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` - // name on action is required - Action *policy.Action `protobuf:"bytes,2,opt,name=action,proto3" json:"action,omitempty"` - Resources []*Resource `protobuf:"bytes,3,rep,name=resources,proto3" json:"resources,omitempty"` -} - -func (x *GetDecisionByTokenMultiResourceRequest) Reset() { - *x = GetDecisionByTokenMultiResourceRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetDecisionByTokenMultiResourceRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetDecisionByTokenMultiResourceRequest) ProtoMessage() {} - -func (x *GetDecisionByTokenMultiResourceRequest) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetDecisionByTokenMultiResourceRequest.ProtoReflect.Descriptor instead. -func (*GetDecisionByTokenMultiResourceRequest) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{17} -} - -func (x *GetDecisionByTokenMultiResourceRequest) GetToken() *authorization.Token { - if x != nil { - return x.Token - } - return nil -} - -func (x *GetDecisionByTokenMultiResourceRequest) GetAction() *policy.Action { - if x != nil { - return x.Action - } - return nil -} - -func (x *GetDecisionByTokenMultiResourceRequest) GetResources() []*Resource { - if x != nil { - return x.Resources - } - return nil -} - -type GetDecisionByTokenMultiResourceResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // convenience flag indicating global resource decisions result (permit/deny) - AllPermitted *wrapperspb.BoolValue `protobuf:"bytes,1,opt,name=all_permitted,json=allPermitted,proto3" json:"all_permitted,omitempty"` - // individual resource decisions - ResourceDecisions []*ResourceDecision `protobuf:"bytes,2,rep,name=resource_decisions,json=resourceDecisions,proto3" json:"resource_decisions,omitempty"` -} - -func (x *GetDecisionByTokenMultiResourceResponse) Reset() { - *x = GetDecisionByTokenMultiResourceResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *GetDecisionByTokenMultiResourceResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*GetDecisionByTokenMultiResourceResponse) ProtoMessage() {} - -func (x *GetDecisionByTokenMultiResourceResponse) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[18] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use GetDecisionByTokenMultiResourceResponse.ProtoReflect.Descriptor instead. -func (*GetDecisionByTokenMultiResourceResponse) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{18} -} - -func (x *GetDecisionByTokenMultiResourceResponse) GetAllPermitted() *wrapperspb.BoolValue { - if x != nil { - return x.AllPermitted - } - return nil -} - -func (x *GetDecisionByTokenMultiResourceResponse) GetResourceDecisions() []*ResourceDecision { - if x != nil { - return x.ResourceDecisions - } - return nil -} - -type EntityEntitlements_ActionsList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Actions []*policy.Action `protobuf:"bytes,1,rep,name=actions,proto3" json:"actions,omitempty"` -} - -func (x *EntityEntitlements_ActionsList) Reset() { - *x = EntityEntitlements_ActionsList{} - if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[19] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *EntityEntitlements_ActionsList) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*EntityEntitlements_ActionsList) ProtoMessage() {} - -func (x *EntityEntitlements_ActionsList) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[19] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use EntityEntitlements_ActionsList.ProtoReflect.Descriptor instead. -func (*EntityEntitlements_ActionsList) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{2, 0} -} - -func (x *EntityEntitlements_ActionsList) GetActions() []*policy.Action { - if x != nil { - return x.Actions - } - return nil -} - -type Resource_AttributeValues struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Fqns []string `protobuf:"bytes,1,rep,name=fqns,proto3" json:"fqns,omitempty"` -} - -func (x *Resource_AttributeValues) Reset() { - *x = Resource_AttributeValues{} - if protoimpl.UnsafeEnabled { - mi := &file_authorization_v2_authorization_proto_msgTypes[21] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *Resource_AttributeValues) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*Resource_AttributeValues) ProtoMessage() {} - -func (x *Resource_AttributeValues) ProtoReflect() protoreflect.Message { - mi := &file_authorization_v2_authorization_proto_msgTypes[21] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use Resource_AttributeValues.ProtoReflect.Descriptor instead. -func (*Resource_AttributeValues) Descriptor() ([]byte, []int) { - return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{3, 0} -} - -func (x *Resource_AttributeValues) GetFqns() []string { - if x != nil { - return x.Fqns - } - return nil -} - -var File_authorization_v2_authorization_proto protoreflect.FileDescriptor - -var file_authorization_v2_authorization_proto_rawDesc = []byte{ - 0x0a, 0x24, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, - 0x76, 0x32, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x10, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x1a, 0x21, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x62, 0x75, 0x66, - 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2f, 0x6f, 0x62, 0x6a, 0x65, - 0x63, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x7e, 0x0a, 0x0b, 0x45, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x2c, 0x0a, 0x12, 0x65, 0x70, 0x68, 0x65, - 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x43, - 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x41, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, - 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, - 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0xa9, 0x03, 0x0a, 0x06, 0x45, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, - 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, - 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0d, 0x65, 0x6d, 0x61, 0x69, 0x6c, - 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, - 0x52, 0x0c, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1d, - 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x48, 0x00, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, - 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x41, 0x6e, 0x79, 0x48, 0x00, 0x52, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x12, 0x1d, 0x0a, - 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x48, 0x00, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x1d, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x1a, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, - 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, - 0x6e, 0x12, 0x3d, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x43, 0x61, - 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, - 0x22, 0x54, 0x0a, 0x08, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x18, 0x0a, 0x14, - 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, - 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, - 0x52, 0x59, 0x5f, 0x53, 0x55, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, - 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x45, 0x4e, 0x56, 0x49, 0x52, 0x4f, 0x4e, - 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x42, 0x0d, 0x0a, 0x0b, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x81, 0x03, 0x0a, 0x12, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x21, 0x0a, 0x0c, - 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, - 0x8b, 0x01, 0x0a, 0x1f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, - 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, - 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x1b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, - 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x1a, 0x37, 0x0a, - 0x0b, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x07, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, - 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x80, 0x01, 0x0a, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, - 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x46, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xfe, 0x01, 0x0a, 0x08, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, - 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, - 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x57, 0x0a, 0x10, 0x61, 0x74, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, - 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x48, - 0x00, 0x52, 0x0f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x73, 0x12, 0x43, 0x0a, 0x1d, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, - 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, - 0x66, 0x71, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x1a, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x1a, 0x25, 0x0a, 0x0f, 0x41, 0x74, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, - 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, 0x6e, 0x73, 0x42, 0x0a, - 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x7e, 0x0a, 0x10, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x32, - 0x0a, 0x15, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x65, - 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x49, 0x64, 0x12, 0x36, 0x0a, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xaa, 0x02, 0x0a, 0x12, 0x47, - 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x3d, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, - 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x12, 0x2e, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x3e, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x06, - 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x3a, 0x65, 0xba, 0x48, 0x62, 0x1a, 0x60, 0x0a, 0x29, 0x67, 0x65, 0x74, 0x5f, 0x64, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, - 0x65, 0x64, 0x12, 0x1c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, - 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, - 0x1a, 0x15, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x22, 0x55, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, - 0x0a, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xc4, - 0x02, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, - 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x3d, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, - 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x12, 0x2e, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x45, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x3a, 0x6b, 0xba, 0x48, 0x68, 0x1a, 0x66, 0x0a, - 0x2f, 0x67, 0x65, 0x74, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x75, - 0x6c, 0x74, 0x69, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, - 0x12, 0x1c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75, - 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x15, - 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x22, 0xb6, 0x01, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x61, 0x6c, - 0x6c, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x61, - 0x6c, 0x6c, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x12, 0x51, 0x0a, 0x12, 0x72, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x78, - 0x0a, 0x16, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, - 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5e, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, 0x7c, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x44, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, - 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x32, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, - 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22, 0xca, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x45, 0x6e, - 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x48, 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x0b, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x45, 0x0a, 0x1c, 0x77, - 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, - 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x08, 0x48, 0x00, 0x52, 0x1a, 0x77, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, - 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x88, - 0x01, 0x01, 0x42, 0x1f, 0x0a, 0x1d, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, - 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, - 0x63, 0x68, 0x79, 0x22, 0x63, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, - 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, - 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xbb, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x42, 0x79, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x05, 0x74, 0x6f, - 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x42, - 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x45, - 0x0a, 0x1c, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, - 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x1a, 0x77, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, - 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, - 0x68, 0x79, 0x88, 0x01, 0x01, 0x42, 0x1f, 0x0a, 0x1d, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, - 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, - 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x22, 0x6a, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, - 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, - 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x22, 0xa8, 0x02, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x32, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x14, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x05, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2e, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x3a, 0x67, 0xba, 0x48, 0x64, 0x1a, 0x62, 0x0a, 0x2b, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, - 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x1c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x15, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, - 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x22, 0x70, 0x0a, - 0x1a, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x11, 0x64, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x10, 0x64, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0xcb, 0x02, 0x0a, 0x26, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, - 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x32, 0x0a, 0x05, 0x74, 0x6f, - 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x42, - 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2e, - 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, - 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x06, - 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, - 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x0b, 0xba, - 0x48, 0x08, 0xc8, 0x01, 0x01, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x3a, 0x76, 0xba, 0x48, 0x73, 0x1a, 0x71, 0x0a, 0x3a, 0x74, 0x6f, - 0x6b, 0x65, 0x6e, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x75, 0x6c, - 0x74, 0x69, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, - 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x1c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x15, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, - 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x22, 0xbd, 0x01, - 0x0a, 0x27, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, - 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x61, 0x6c, - 0x6c, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x12, 0x51, 0x0a, 0x12, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2a, 0x4c, 0x0a, - 0x08, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x14, 0x44, 0x45, 0x43, - 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, - 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, - 0x44, 0x45, 0x4e, 0x59, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, - 0x4f, 0x4e, 0x5f, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x32, 0xdb, 0x06, 0x0a, 0x14, - 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x12, 0x5c, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, - 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x83, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, - 0x31, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, - 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x44, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x12, 0x28, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, - 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x71, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2b, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x98, 0x01, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4d, 0x75, 0x6c, 0x74, - 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x38, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, - 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4d, - 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x68, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x12, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7d, 0x0a, 0x16, 0x47, 0x65, - 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x42, 0x79, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2f, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, - 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, - 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xd5, 0x01, 0x0a, 0x14, 0x63, 0x6f, - 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x42, 0x12, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x48, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, - 0x6f, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, - 0x76, 0x32, 0x3b, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x76, 0x32, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x10, 0x41, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0xe2, 0x02, - 0x1c, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, - 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, - 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, - 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} - -var ( - file_authorization_v2_authorization_proto_rawDescOnce sync.Once - file_authorization_v2_authorization_proto_rawDescData = file_authorization_v2_authorization_proto_rawDesc -) - -func file_authorization_v2_authorization_proto_rawDescGZIP() []byte { - file_authorization_v2_authorization_proto_rawDescOnce.Do(func() { - file_authorization_v2_authorization_proto_rawDescData = protoimpl.X.CompressGZIP(file_authorization_v2_authorization_proto_rawDescData) - }) - return file_authorization_v2_authorization_proto_rawDescData -} - -var file_authorization_v2_authorization_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_authorization_v2_authorization_proto_msgTypes = make([]protoimpl.MessageInfo, 22) +var file_authorization_v2_authorization_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_authorization_v2_authorization_proto_msgTypes = make([]protoimpl.MessageInfo, 15) var file_authorization_v2_authorization_proto_goTypes = []interface{}{ - (Decision)(0), // 0: authorization.v2.Decision - (Entity_Category)(0), // 1: authorization.v2.Entity.Category - (*EntityChain)(nil), // 2: authorization.v2.EntityChain - (*Entity)(nil), // 3: authorization.v2.Entity - (*EntityEntitlements)(nil), // 4: authorization.v2.EntityEntitlements - (*Resource)(nil), // 5: authorization.v2.Resource - (*ResourceDecision)(nil), // 6: authorization.v2.ResourceDecision - (*GetDecisionRequest)(nil), // 7: authorization.v2.GetDecisionRequest - (*GetDecisionResponse)(nil), // 8: authorization.v2.GetDecisionResponse - (*GetDecisionMultiResourceRequest)(nil), // 9: authorization.v2.GetDecisionMultiResourceRequest - (*GetDecisionMultiResourceResponse)(nil), // 10: authorization.v2.GetDecisionMultiResourceResponse - (*GetDecisionBulkRequest)(nil), // 11: authorization.v2.GetDecisionBulkRequest - (*GetDecisionBulkResponse)(nil), // 12: authorization.v2.GetDecisionBulkResponse - (*GetEntitlementsRequest)(nil), // 13: authorization.v2.GetEntitlementsRequest - (*GetEntitlementsResponse)(nil), // 14: authorization.v2.GetEntitlementsResponse - (*GetEntitlementsByTokenRequest)(nil), // 15: authorization.v2.GetEntitlementsByTokenRequest - (*GetEntitlementsByTokenResponse)(nil), // 16: authorization.v2.GetEntitlementsByTokenResponse - (*GetDecisionByTokenRequest)(nil), // 17: authorization.v2.GetDecisionByTokenRequest - (*GetDecisionByTokenResponse)(nil), // 18: authorization.v2.GetDecisionByTokenResponse - (*GetDecisionByTokenMultiResourceRequest)(nil), // 19: authorization.v2.GetDecisionByTokenMultiResourceRequest - (*GetDecisionByTokenMultiResourceResponse)(nil), // 20: authorization.v2.GetDecisionByTokenMultiResourceResponse - (*EntityEntitlements_ActionsList)(nil), // 21: authorization.v2.EntityEntitlements.ActionsList - nil, // 22: authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry - (*Resource_AttributeValues)(nil), // 23: authorization.v2.Resource.AttributeValues - (*anypb.Any)(nil), // 24: google.protobuf.Any - (*policy.Action)(nil), // 25: policy.Action - (*wrapperspb.BoolValue)(nil), // 26: google.protobuf.BoolValue - (*authorization.Token)(nil), // 27: authorization.Token + (Decision)(0), // 0: authorization.v2.Decision + (*EntityReference)(nil), // 1: authorization.v2.EntityReference + (*EntityEntitlements)(nil), // 2: authorization.v2.EntityEntitlements + (*Resource)(nil), // 3: authorization.v2.Resource + (*ResourceDecision)(nil), // 4: authorization.v2.ResourceDecision + (*GetDecisionRequest)(nil), // 5: authorization.v2.GetDecisionRequest + (*GetDecisionResponse)(nil), // 6: authorization.v2.GetDecisionResponse + (*GetDecisionMultiResourceRequest)(nil), // 7: authorization.v2.GetDecisionMultiResourceRequest + (*GetDecisionMultiResourceResponse)(nil), // 8: authorization.v2.GetDecisionMultiResourceResponse + (*GetDecisionBulkRequest)(nil), // 9: authorization.v2.GetDecisionBulkRequest + (*GetDecisionBulkResponse)(nil), // 10: authorization.v2.GetDecisionBulkResponse + (*GetEntitlementsRequest)(nil), // 11: authorization.v2.GetEntitlementsRequest + (*GetEntitlementsResponse)(nil), // 12: authorization.v2.GetEntitlementsResponse + (*EntityEntitlements_ActionsList)(nil), // 13: authorization.v2.EntityEntitlements.ActionsList + nil, // 14: authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry + (*Resource_AttributeValues)(nil), // 15: authorization.v2.Resource.AttributeValues + (*entity.EntityChain)(nil), // 16: entity.EntityChain + (*entity.Token)(nil), // 17: entity.Token + (*policy.Action)(nil), // 18: policy.Action + (*wrapperspb.BoolValue)(nil), // 19: google.protobuf.BoolValue } var file_authorization_v2_authorization_proto_depIdxs = []int32{ - 3, // 0: authorization.v2.EntityChain.entities:type_name -> authorization.v2.Entity - 24, // 1: authorization.v2.Entity.claims:type_name -> google.protobuf.Any - 1, // 2: authorization.v2.Entity.category:type_name -> authorization.v2.Entity.Category - 22, // 3: authorization.v2.EntityEntitlements.actions_per_attribute_value_fqn:type_name -> authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry - 23, // 4: authorization.v2.Resource.attribute_values:type_name -> authorization.v2.Resource.AttributeValues - 0, // 5: authorization.v2.ResourceDecision.decision:type_name -> authorization.v2.Decision - 2, // 6: authorization.v2.GetDecisionRequest.entity:type_name -> authorization.v2.EntityChain - 25, // 7: authorization.v2.GetDecisionRequest.action:type_name -> policy.Action - 5, // 8: authorization.v2.GetDecisionRequest.resource:type_name -> authorization.v2.Resource - 6, // 9: authorization.v2.GetDecisionResponse.decision:type_name -> authorization.v2.ResourceDecision - 2, // 10: authorization.v2.GetDecisionMultiResourceRequest.entity:type_name -> authorization.v2.EntityChain - 25, // 11: authorization.v2.GetDecisionMultiResourceRequest.action:type_name -> policy.Action - 5, // 12: authorization.v2.GetDecisionMultiResourceRequest.resources:type_name -> authorization.v2.Resource - 26, // 13: authorization.v2.GetDecisionMultiResourceResponse.all_permitted:type_name -> google.protobuf.BoolValue - 6, // 14: authorization.v2.GetDecisionMultiResourceResponse.resource_decisions:type_name -> authorization.v2.ResourceDecision - 9, // 15: authorization.v2.GetDecisionBulkRequest.decision_requests:type_name -> authorization.v2.GetDecisionMultiResourceRequest - 10, // 16: authorization.v2.GetDecisionBulkResponse.decision_responses:type_name -> authorization.v2.GetDecisionMultiResourceResponse - 2, // 17: authorization.v2.GetEntitlementsRequest.entity_chain:type_name -> authorization.v2.EntityChain - 4, // 18: authorization.v2.GetEntitlementsResponse.entitlements:type_name -> authorization.v2.EntityEntitlements - 27, // 19: authorization.v2.GetEntitlementsByTokenRequest.token:type_name -> authorization.Token - 4, // 20: authorization.v2.GetEntitlementsByTokenResponse.entitlements:type_name -> authorization.v2.EntityEntitlements - 27, // 21: authorization.v2.GetDecisionByTokenRequest.token:type_name -> authorization.Token - 25, // 22: authorization.v2.GetDecisionByTokenRequest.action:type_name -> policy.Action - 5, // 23: authorization.v2.GetDecisionByTokenRequest.resource:type_name -> authorization.v2.Resource - 8, // 24: authorization.v2.GetDecisionByTokenResponse.decision_response:type_name -> authorization.v2.GetDecisionResponse - 27, // 25: authorization.v2.GetDecisionByTokenMultiResourceRequest.token:type_name -> authorization.Token - 25, // 26: authorization.v2.GetDecisionByTokenMultiResourceRequest.action:type_name -> policy.Action - 5, // 27: authorization.v2.GetDecisionByTokenMultiResourceRequest.resources:type_name -> authorization.v2.Resource - 26, // 28: authorization.v2.GetDecisionByTokenMultiResourceResponse.all_permitted:type_name -> google.protobuf.BoolValue - 6, // 29: authorization.v2.GetDecisionByTokenMultiResourceResponse.resource_decisions:type_name -> authorization.v2.ResourceDecision - 25, // 30: authorization.v2.EntityEntitlements.ActionsList.actions:type_name -> policy.Action - 21, // 31: authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry.value:type_name -> authorization.v2.EntityEntitlements.ActionsList - 7, // 32: authorization.v2.AuthorizationService.GetDecision:input_type -> authorization.v2.GetDecisionRequest - 9, // 33: authorization.v2.AuthorizationService.GetDecisionMultiResource:input_type -> authorization.v2.GetDecisionMultiResourceRequest - 11, // 34: authorization.v2.AuthorizationService.GetDecisionBulk:input_type -> authorization.v2.GetDecisionBulkRequest - 17, // 35: authorization.v2.AuthorizationService.GetDecisionByToken:input_type -> authorization.v2.GetDecisionByTokenRequest - 19, // 36: authorization.v2.AuthorizationService.GetDecisionByTokenMultiResource:input_type -> authorization.v2.GetDecisionByTokenMultiResourceRequest - 13, // 37: authorization.v2.AuthorizationService.GetEntitlements:input_type -> authorization.v2.GetEntitlementsRequest - 15, // 38: authorization.v2.AuthorizationService.GetEntitlementsByToken:input_type -> authorization.v2.GetEntitlementsByTokenRequest - 8, // 39: authorization.v2.AuthorizationService.GetDecision:output_type -> authorization.v2.GetDecisionResponse - 10, // 40: authorization.v2.AuthorizationService.GetDecisionMultiResource:output_type -> authorization.v2.GetDecisionMultiResourceResponse - 12, // 41: authorization.v2.AuthorizationService.GetDecisionBulk:output_type -> authorization.v2.GetDecisionBulkResponse - 18, // 42: authorization.v2.AuthorizationService.GetDecisionByToken:output_type -> authorization.v2.GetDecisionByTokenResponse - 20, // 43: authorization.v2.AuthorizationService.GetDecisionByTokenMultiResource:output_type -> authorization.v2.GetDecisionByTokenMultiResourceResponse - 14, // 44: authorization.v2.AuthorizationService.GetEntitlements:output_type -> authorization.v2.GetEntitlementsResponse - 16, // 45: authorization.v2.AuthorizationService.GetEntitlementsByToken:output_type -> authorization.v2.GetEntitlementsByTokenResponse - 39, // [39:46] is the sub-list for method output_type - 32, // [32:39] is the sub-list for method input_type - 32, // [32:32] is the sub-list for extension type_name - 32, // [32:32] is the sub-list for extension extendee - 0, // [0:32] is the sub-list for field type_name + 16, // 0: authorization.v2.EntityReference.entity_chain:type_name -> entity.EntityChain + 17, // 1: authorization.v2.EntityReference.token:type_name -> entity.Token + 14, // 2: authorization.v2.EntityEntitlements.actions_per_attribute_value_fqn:type_name -> authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry + 15, // 3: authorization.v2.Resource.attribute_values:type_name -> authorization.v2.Resource.AttributeValues + 0, // 4: authorization.v2.ResourceDecision.decision:type_name -> authorization.v2.Decision + 1, // 5: authorization.v2.GetDecisionRequest.entity:type_name -> authorization.v2.EntityReference + 18, // 6: authorization.v2.GetDecisionRequest.action:type_name -> policy.Action + 3, // 7: authorization.v2.GetDecisionRequest.resource:type_name -> authorization.v2.Resource + 4, // 8: authorization.v2.GetDecisionResponse.decision:type_name -> authorization.v2.ResourceDecision + 1, // 9: authorization.v2.GetDecisionMultiResourceRequest.entity:type_name -> authorization.v2.EntityReference + 18, // 10: authorization.v2.GetDecisionMultiResourceRequest.action:type_name -> policy.Action + 3, // 11: authorization.v2.GetDecisionMultiResourceRequest.resources:type_name -> authorization.v2.Resource + 19, // 12: authorization.v2.GetDecisionMultiResourceResponse.all_permitted:type_name -> google.protobuf.BoolValue + 4, // 13: authorization.v2.GetDecisionMultiResourceResponse.resource_decisions:type_name -> authorization.v2.ResourceDecision + 7, // 14: authorization.v2.GetDecisionBulkRequest.decision_requests:type_name -> authorization.v2.GetDecisionMultiResourceRequest + 8, // 15: authorization.v2.GetDecisionBulkResponse.decision_responses:type_name -> authorization.v2.GetDecisionMultiResourceResponse + 1, // 16: authorization.v2.GetEntitlementsRequest.entity:type_name -> authorization.v2.EntityReference + 2, // 17: authorization.v2.GetEntitlementsResponse.entitlements:type_name -> authorization.v2.EntityEntitlements + 18, // 18: authorization.v2.EntityEntitlements.ActionsList.actions:type_name -> policy.Action + 13, // 19: authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry.value:type_name -> authorization.v2.EntityEntitlements.ActionsList + 5, // 20: authorization.v2.AuthorizationService.GetDecision:input_type -> authorization.v2.GetDecisionRequest + 7, // 21: authorization.v2.AuthorizationService.GetDecisionMultiResource:input_type -> authorization.v2.GetDecisionMultiResourceRequest + 9, // 22: authorization.v2.AuthorizationService.GetDecisionBulk:input_type -> authorization.v2.GetDecisionBulkRequest + 11, // 23: authorization.v2.AuthorizationService.GetEntitlements:input_type -> authorization.v2.GetEntitlementsRequest + 6, // 24: authorization.v2.AuthorizationService.GetDecision:output_type -> authorization.v2.GetDecisionResponse + 8, // 25: authorization.v2.AuthorizationService.GetDecisionMultiResource:output_type -> authorization.v2.GetDecisionMultiResourceResponse + 10, // 26: authorization.v2.AuthorizationService.GetDecisionBulk:output_type -> authorization.v2.GetDecisionBulkResponse + 12, // 27: authorization.v2.AuthorizationService.GetEntitlements:output_type -> authorization.v2.GetEntitlementsResponse + 24, // [24:28] is the sub-list for method output_type + 20, // [20:24] is the sub-list for method input_type + 20, // [20:20] is the sub-list for extension type_name + 20, // [20:20] is the sub-list for extension extendee + 0, // [0:20] is the sub-list for field type_name } func init() { file_authorization_v2_authorization_proto_init() } @@ -1866,7 +1232,7 @@ func file_authorization_v2_authorization_proto_init() { } if !protoimpl.UnsafeEnabled { file_authorization_v2_authorization_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EntityChain); i { + switch v := v.(*EntityReference); i { case 0: return &v.state case 1: @@ -1878,18 +1244,6 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Entity); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_authorization_v2_authorization_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EntityEntitlements); i { case 0: return &v.state @@ -1901,7 +1255,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Resource); i { case 0: return &v.state @@ -1913,7 +1267,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ResourceDecision); i { case 0: return &v.state @@ -1925,7 +1279,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetDecisionRequest); i { case 0: return &v.state @@ -1937,7 +1291,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetDecisionResponse); i { case 0: return &v.state @@ -1949,7 +1303,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetDecisionMultiResourceRequest); i { case 0: return &v.state @@ -1961,7 +1315,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetDecisionMultiResourceResponse); i { case 0: return &v.state @@ -1973,7 +1327,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetDecisionBulkRequest); i { case 0: return &v.state @@ -1985,7 +1339,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetDecisionBulkResponse); i { case 0: return &v.state @@ -1997,7 +1351,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetEntitlementsRequest); i { case 0: return &v.state @@ -2009,7 +1363,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetEntitlementsResponse); i { case 0: return &v.state @@ -2021,79 +1375,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetEntitlementsByTokenRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_authorization_v2_authorization_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetEntitlementsByTokenResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_authorization_v2_authorization_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDecisionByTokenRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_authorization_v2_authorization_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDecisionByTokenResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_authorization_v2_authorization_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDecisionByTokenMultiResourceRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_authorization_v2_authorization_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetDecisionByTokenMultiResourceResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_authorization_v2_authorization_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EntityEntitlements_ActionsList); i { case 0: return &v.state @@ -2105,7 +1387,7 @@ func file_authorization_v2_authorization_proto_init() { return nil } } - file_authorization_v2_authorization_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_authorization_v2_authorization_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Resource_AttributeValues); i { case 0: return &v.state @@ -2118,26 +1400,23 @@ func file_authorization_v2_authorization_proto_init() { } } } - file_authorization_v2_authorization_proto_msgTypes[1].OneofWrappers = []interface{}{ - (*Entity_EmailAddress)(nil), - (*Entity_UserName)(nil), - (*Entity_Claims)(nil), - (*Entity_ClientId)(nil), - (*Entity_RegisteredResourceValueFqn)(nil), + file_authorization_v2_authorization_proto_msgTypes[0].OneofWrappers = []interface{}{ + (*EntityReference_EntityChain)(nil), + (*EntityReference_RegisteredResourceValueFqn)(nil), + (*EntityReference_Token)(nil), } - file_authorization_v2_authorization_proto_msgTypes[3].OneofWrappers = []interface{}{ + file_authorization_v2_authorization_proto_msgTypes[2].OneofWrappers = []interface{}{ (*Resource_AttributeValues_)(nil), (*Resource_RegisteredResourceValueFqn)(nil), } - file_authorization_v2_authorization_proto_msgTypes[11].OneofWrappers = []interface{}{} - file_authorization_v2_authorization_proto_msgTypes[13].OneofWrappers = []interface{}{} + file_authorization_v2_authorization_proto_msgTypes[10].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_authorization_v2_authorization_proto_rawDesc, - NumEnums: 2, - NumMessages: 22, + NumEnums: 1, + NumMessages: 15, NumExtensions: 0, NumServices: 1, }, diff --git a/protocol/go/authorization/v2/authorization_grpc.pb.go b/protocol/go/authorization/v2/authorization_grpc.pb.go index 9c9959d2c7..f08f0b1def 100644 --- a/protocol/go/authorization/v2/authorization_grpc.pb.go +++ b/protocol/go/authorization/v2/authorization_grpc.pb.go @@ -19,13 +19,10 @@ import ( const _ = grpc.SupportPackageIsVersion7 const ( - AuthorizationService_GetDecision_FullMethodName = "/authorization.v2.AuthorizationService/GetDecision" - AuthorizationService_GetDecisionMultiResource_FullMethodName = "/authorization.v2.AuthorizationService/GetDecisionMultiResource" - AuthorizationService_GetDecisionBulk_FullMethodName = "/authorization.v2.AuthorizationService/GetDecisionBulk" - AuthorizationService_GetDecisionByToken_FullMethodName = "/authorization.v2.AuthorizationService/GetDecisionByToken" - AuthorizationService_GetDecisionByTokenMultiResource_FullMethodName = "/authorization.v2.AuthorizationService/GetDecisionByTokenMultiResource" - AuthorizationService_GetEntitlements_FullMethodName = "/authorization.v2.AuthorizationService/GetEntitlements" - AuthorizationService_GetEntitlementsByToken_FullMethodName = "/authorization.v2.AuthorizationService/GetEntitlementsByToken" + AuthorizationService_GetDecision_FullMethodName = "/authorization.v2.AuthorizationService/GetDecision" + AuthorizationService_GetDecisionMultiResource_FullMethodName = "/authorization.v2.AuthorizationService/GetDecisionMultiResource" + AuthorizationService_GetDecisionBulk_FullMethodName = "/authorization.v2.AuthorizationService/GetDecisionBulk" + AuthorizationService_GetEntitlements_FullMethodName = "/authorization.v2.AuthorizationService/GetEntitlements" ) // AuthorizationServiceClient is the client API for AuthorizationService service. @@ -35,10 +32,7 @@ type AuthorizationServiceClient interface { GetDecision(ctx context.Context, in *GetDecisionRequest, opts ...grpc.CallOption) (*GetDecisionResponse, error) GetDecisionMultiResource(ctx context.Context, in *GetDecisionMultiResourceRequest, opts ...grpc.CallOption) (*GetDecisionMultiResourceResponse, error) GetDecisionBulk(ctx context.Context, in *GetDecisionBulkRequest, opts ...grpc.CallOption) (*GetDecisionBulkResponse, error) - GetDecisionByToken(ctx context.Context, in *GetDecisionByTokenRequest, opts ...grpc.CallOption) (*GetDecisionByTokenResponse, error) - GetDecisionByTokenMultiResource(ctx context.Context, in *GetDecisionByTokenMultiResourceRequest, opts ...grpc.CallOption) (*GetDecisionByTokenMultiResourceResponse, error) GetEntitlements(ctx context.Context, in *GetEntitlementsRequest, opts ...grpc.CallOption) (*GetEntitlementsResponse, error) - GetEntitlementsByToken(ctx context.Context, in *GetEntitlementsByTokenRequest, opts ...grpc.CallOption) (*GetEntitlementsByTokenResponse, error) } type authorizationServiceClient struct { @@ -76,24 +70,6 @@ func (c *authorizationServiceClient) GetDecisionBulk(ctx context.Context, in *Ge return out, nil } -func (c *authorizationServiceClient) GetDecisionByToken(ctx context.Context, in *GetDecisionByTokenRequest, opts ...grpc.CallOption) (*GetDecisionByTokenResponse, error) { - out := new(GetDecisionByTokenResponse) - err := c.cc.Invoke(ctx, AuthorizationService_GetDecisionByToken_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *authorizationServiceClient) GetDecisionByTokenMultiResource(ctx context.Context, in *GetDecisionByTokenMultiResourceRequest, opts ...grpc.CallOption) (*GetDecisionByTokenMultiResourceResponse, error) { - out := new(GetDecisionByTokenMultiResourceResponse) - err := c.cc.Invoke(ctx, AuthorizationService_GetDecisionByTokenMultiResource_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - func (c *authorizationServiceClient) GetEntitlements(ctx context.Context, in *GetEntitlementsRequest, opts ...grpc.CallOption) (*GetEntitlementsResponse, error) { out := new(GetEntitlementsResponse) err := c.cc.Invoke(ctx, AuthorizationService_GetEntitlements_FullMethodName, in, out, opts...) @@ -103,15 +79,6 @@ func (c *authorizationServiceClient) GetEntitlements(ctx context.Context, in *Ge return out, nil } -func (c *authorizationServiceClient) GetEntitlementsByToken(ctx context.Context, in *GetEntitlementsByTokenRequest, opts ...grpc.CallOption) (*GetEntitlementsByTokenResponse, error) { - out := new(GetEntitlementsByTokenResponse) - err := c.cc.Invoke(ctx, AuthorizationService_GetEntitlementsByToken_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - // AuthorizationServiceServer is the server API for AuthorizationService service. // All implementations must embed UnimplementedAuthorizationServiceServer // for forward compatibility @@ -119,10 +86,7 @@ type AuthorizationServiceServer interface { GetDecision(context.Context, *GetDecisionRequest) (*GetDecisionResponse, error) GetDecisionMultiResource(context.Context, *GetDecisionMultiResourceRequest) (*GetDecisionMultiResourceResponse, error) GetDecisionBulk(context.Context, *GetDecisionBulkRequest) (*GetDecisionBulkResponse, error) - GetDecisionByToken(context.Context, *GetDecisionByTokenRequest) (*GetDecisionByTokenResponse, error) - GetDecisionByTokenMultiResource(context.Context, *GetDecisionByTokenMultiResourceRequest) (*GetDecisionByTokenMultiResourceResponse, error) GetEntitlements(context.Context, *GetEntitlementsRequest) (*GetEntitlementsResponse, error) - GetEntitlementsByToken(context.Context, *GetEntitlementsByTokenRequest) (*GetEntitlementsByTokenResponse, error) mustEmbedUnimplementedAuthorizationServiceServer() } @@ -139,18 +103,9 @@ func (UnimplementedAuthorizationServiceServer) GetDecisionMultiResource(context. func (UnimplementedAuthorizationServiceServer) GetDecisionBulk(context.Context, *GetDecisionBulkRequest) (*GetDecisionBulkResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetDecisionBulk not implemented") } -func (UnimplementedAuthorizationServiceServer) GetDecisionByToken(context.Context, *GetDecisionByTokenRequest) (*GetDecisionByTokenResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetDecisionByToken not implemented") -} -func (UnimplementedAuthorizationServiceServer) GetDecisionByTokenMultiResource(context.Context, *GetDecisionByTokenMultiResourceRequest) (*GetDecisionByTokenMultiResourceResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetDecisionByTokenMultiResource not implemented") -} func (UnimplementedAuthorizationServiceServer) GetEntitlements(context.Context, *GetEntitlementsRequest) (*GetEntitlementsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetEntitlements not implemented") } -func (UnimplementedAuthorizationServiceServer) GetEntitlementsByToken(context.Context, *GetEntitlementsByTokenRequest) (*GetEntitlementsByTokenResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetEntitlementsByToken not implemented") -} func (UnimplementedAuthorizationServiceServer) mustEmbedUnimplementedAuthorizationServiceServer() {} // UnsafeAuthorizationServiceServer may be embedded to opt out of forward compatibility for this service. @@ -218,42 +173,6 @@ func _AuthorizationService_GetDecisionBulk_Handler(srv interface{}, ctx context. return interceptor(ctx, in, info, handler) } -func _AuthorizationService_GetDecisionByToken_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetDecisionByTokenRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizationServiceServer).GetDecisionByToken(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizationService_GetDecisionByToken_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizationServiceServer).GetDecisionByToken(ctx, req.(*GetDecisionByTokenRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _AuthorizationService_GetDecisionByTokenMultiResource_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetDecisionByTokenMultiResourceRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizationServiceServer).GetDecisionByTokenMultiResource(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizationService_GetDecisionByTokenMultiResource_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizationServiceServer).GetDecisionByTokenMultiResource(ctx, req.(*GetDecisionByTokenMultiResourceRequest)) - } - return interceptor(ctx, in, info, handler) -} - func _AuthorizationService_GetEntitlements_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(GetEntitlementsRequest) if err := dec(in); err != nil { @@ -272,24 +191,6 @@ func _AuthorizationService_GetEntitlements_Handler(srv interface{}, ctx context. return interceptor(ctx, in, info, handler) } -func _AuthorizationService_GetEntitlementsByToken_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetEntitlementsByTokenRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(AuthorizationServiceServer).GetEntitlementsByToken(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: AuthorizationService_GetEntitlementsByToken_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(AuthorizationServiceServer).GetEntitlementsByToken(ctx, req.(*GetEntitlementsByTokenRequest)) - } - return interceptor(ctx, in, info, handler) -} - // AuthorizationService_ServiceDesc is the grpc.ServiceDesc for AuthorizationService service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -309,22 +210,10 @@ var AuthorizationService_ServiceDesc = grpc.ServiceDesc{ MethodName: "GetDecisionBulk", Handler: _AuthorizationService_GetDecisionBulk_Handler, }, - { - MethodName: "GetDecisionByToken", - Handler: _AuthorizationService_GetDecisionByToken_Handler, - }, - { - MethodName: "GetDecisionByTokenMultiResource", - Handler: _AuthorizationService_GetDecisionByTokenMultiResource_Handler, - }, { MethodName: "GetEntitlements", Handler: _AuthorizationService_GetEntitlements_Handler, }, - { - MethodName: "GetEntitlementsByToken", - Handler: _AuthorizationService_GetEntitlementsByToken_Handler, - }, }, Streams: []grpc.StreamDesc{}, Metadata: "authorization/v2/authorization.proto", diff --git a/protocol/go/authorization/v2/authorizationv2connect/authorization.connect.go b/protocol/go/authorization/v2/authorizationv2connect/authorization.connect.go index 359e8391c1..43bd8db6de 100644 --- a/protocol/go/authorization/v2/authorizationv2connect/authorization.connect.go +++ b/protocol/go/authorization/v2/authorizationv2connect/authorization.connect.go @@ -42,30 +42,18 @@ const ( // AuthorizationServiceGetDecisionBulkProcedure is the fully-qualified name of the // AuthorizationService's GetDecisionBulk RPC. AuthorizationServiceGetDecisionBulkProcedure = "/authorization.v2.AuthorizationService/GetDecisionBulk" - // AuthorizationServiceGetDecisionByTokenProcedure is the fully-qualified name of the - // AuthorizationService's GetDecisionByToken RPC. - AuthorizationServiceGetDecisionByTokenProcedure = "/authorization.v2.AuthorizationService/GetDecisionByToken" - // AuthorizationServiceGetDecisionByTokenMultiResourceProcedure is the fully-qualified name of the - // AuthorizationService's GetDecisionByTokenMultiResource RPC. - AuthorizationServiceGetDecisionByTokenMultiResourceProcedure = "/authorization.v2.AuthorizationService/GetDecisionByTokenMultiResource" // AuthorizationServiceGetEntitlementsProcedure is the fully-qualified name of the // AuthorizationService's GetEntitlements RPC. AuthorizationServiceGetEntitlementsProcedure = "/authorization.v2.AuthorizationService/GetEntitlements" - // AuthorizationServiceGetEntitlementsByTokenProcedure is the fully-qualified name of the - // AuthorizationService's GetEntitlementsByToken RPC. - AuthorizationServiceGetEntitlementsByTokenProcedure = "/authorization.v2.AuthorizationService/GetEntitlementsByToken" ) // These variables are the protoreflect.Descriptor objects for the RPCs defined in this package. var ( - authorizationServiceServiceDescriptor = v2.File_authorization_v2_authorization_proto.Services().ByName("AuthorizationService") - authorizationServiceGetDecisionMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetDecision") - authorizationServiceGetDecisionMultiResourceMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetDecisionMultiResource") - authorizationServiceGetDecisionBulkMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetDecisionBulk") - authorizationServiceGetDecisionByTokenMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetDecisionByToken") - authorizationServiceGetDecisionByTokenMultiResourceMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetDecisionByTokenMultiResource") - authorizationServiceGetEntitlementsMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetEntitlements") - authorizationServiceGetEntitlementsByTokenMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetEntitlementsByToken") + authorizationServiceServiceDescriptor = v2.File_authorization_v2_authorization_proto.Services().ByName("AuthorizationService") + authorizationServiceGetDecisionMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetDecision") + authorizationServiceGetDecisionMultiResourceMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetDecisionMultiResource") + authorizationServiceGetDecisionBulkMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetDecisionBulk") + authorizationServiceGetEntitlementsMethodDescriptor = authorizationServiceServiceDescriptor.Methods().ByName("GetEntitlements") ) // AuthorizationServiceClient is a client for the authorization.v2.AuthorizationService service. @@ -73,10 +61,7 @@ type AuthorizationServiceClient interface { GetDecision(context.Context, *connect.Request[v2.GetDecisionRequest]) (*connect.Response[v2.GetDecisionResponse], error) GetDecisionMultiResource(context.Context, *connect.Request[v2.GetDecisionMultiResourceRequest]) (*connect.Response[v2.GetDecisionMultiResourceResponse], error) GetDecisionBulk(context.Context, *connect.Request[v2.GetDecisionBulkRequest]) (*connect.Response[v2.GetDecisionBulkResponse], error) - GetDecisionByToken(context.Context, *connect.Request[v2.GetDecisionByTokenRequest]) (*connect.Response[v2.GetDecisionByTokenResponse], error) - GetDecisionByTokenMultiResource(context.Context, *connect.Request[v2.GetDecisionByTokenMultiResourceRequest]) (*connect.Response[v2.GetDecisionByTokenMultiResourceResponse], error) GetEntitlements(context.Context, *connect.Request[v2.GetEntitlementsRequest]) (*connect.Response[v2.GetEntitlementsResponse], error) - GetEntitlementsByToken(context.Context, *connect.Request[v2.GetEntitlementsByTokenRequest]) (*connect.Response[v2.GetEntitlementsByTokenResponse], error) } // NewAuthorizationServiceClient constructs a client for the authorization.v2.AuthorizationService @@ -107,42 +92,21 @@ func NewAuthorizationServiceClient(httpClient connect.HTTPClient, baseURL string connect.WithSchema(authorizationServiceGetDecisionBulkMethodDescriptor), connect.WithClientOptions(opts...), ), - getDecisionByToken: connect.NewClient[v2.GetDecisionByTokenRequest, v2.GetDecisionByTokenResponse]( - httpClient, - baseURL+AuthorizationServiceGetDecisionByTokenProcedure, - connect.WithSchema(authorizationServiceGetDecisionByTokenMethodDescriptor), - connect.WithClientOptions(opts...), - ), - getDecisionByTokenMultiResource: connect.NewClient[v2.GetDecisionByTokenMultiResourceRequest, v2.GetDecisionByTokenMultiResourceResponse]( - httpClient, - baseURL+AuthorizationServiceGetDecisionByTokenMultiResourceProcedure, - connect.WithSchema(authorizationServiceGetDecisionByTokenMultiResourceMethodDescriptor), - connect.WithClientOptions(opts...), - ), getEntitlements: connect.NewClient[v2.GetEntitlementsRequest, v2.GetEntitlementsResponse]( httpClient, baseURL+AuthorizationServiceGetEntitlementsProcedure, connect.WithSchema(authorizationServiceGetEntitlementsMethodDescriptor), connect.WithClientOptions(opts...), ), - getEntitlementsByToken: connect.NewClient[v2.GetEntitlementsByTokenRequest, v2.GetEntitlementsByTokenResponse]( - httpClient, - baseURL+AuthorizationServiceGetEntitlementsByTokenProcedure, - connect.WithSchema(authorizationServiceGetEntitlementsByTokenMethodDescriptor), - connect.WithClientOptions(opts...), - ), } } // authorizationServiceClient implements AuthorizationServiceClient. type authorizationServiceClient struct { - getDecision *connect.Client[v2.GetDecisionRequest, v2.GetDecisionResponse] - getDecisionMultiResource *connect.Client[v2.GetDecisionMultiResourceRequest, v2.GetDecisionMultiResourceResponse] - getDecisionBulk *connect.Client[v2.GetDecisionBulkRequest, v2.GetDecisionBulkResponse] - getDecisionByToken *connect.Client[v2.GetDecisionByTokenRequest, v2.GetDecisionByTokenResponse] - getDecisionByTokenMultiResource *connect.Client[v2.GetDecisionByTokenMultiResourceRequest, v2.GetDecisionByTokenMultiResourceResponse] - getEntitlements *connect.Client[v2.GetEntitlementsRequest, v2.GetEntitlementsResponse] - getEntitlementsByToken *connect.Client[v2.GetEntitlementsByTokenRequest, v2.GetEntitlementsByTokenResponse] + getDecision *connect.Client[v2.GetDecisionRequest, v2.GetDecisionResponse] + getDecisionMultiResource *connect.Client[v2.GetDecisionMultiResourceRequest, v2.GetDecisionMultiResourceResponse] + getDecisionBulk *connect.Client[v2.GetDecisionBulkRequest, v2.GetDecisionBulkResponse] + getEntitlements *connect.Client[v2.GetEntitlementsRequest, v2.GetEntitlementsResponse] } // GetDecision calls authorization.v2.AuthorizationService.GetDecision. @@ -160,37 +124,18 @@ func (c *authorizationServiceClient) GetDecisionBulk(ctx context.Context, req *c return c.getDecisionBulk.CallUnary(ctx, req) } -// GetDecisionByToken calls authorization.v2.AuthorizationService.GetDecisionByToken. -func (c *authorizationServiceClient) GetDecisionByToken(ctx context.Context, req *connect.Request[v2.GetDecisionByTokenRequest]) (*connect.Response[v2.GetDecisionByTokenResponse], error) { - return c.getDecisionByToken.CallUnary(ctx, req) -} - -// GetDecisionByTokenMultiResource calls -// authorization.v2.AuthorizationService.GetDecisionByTokenMultiResource. -func (c *authorizationServiceClient) GetDecisionByTokenMultiResource(ctx context.Context, req *connect.Request[v2.GetDecisionByTokenMultiResourceRequest]) (*connect.Response[v2.GetDecisionByTokenMultiResourceResponse], error) { - return c.getDecisionByTokenMultiResource.CallUnary(ctx, req) -} - // GetEntitlements calls authorization.v2.AuthorizationService.GetEntitlements. func (c *authorizationServiceClient) GetEntitlements(ctx context.Context, req *connect.Request[v2.GetEntitlementsRequest]) (*connect.Response[v2.GetEntitlementsResponse], error) { return c.getEntitlements.CallUnary(ctx, req) } -// GetEntitlementsByToken calls authorization.v2.AuthorizationService.GetEntitlementsByToken. -func (c *authorizationServiceClient) GetEntitlementsByToken(ctx context.Context, req *connect.Request[v2.GetEntitlementsByTokenRequest]) (*connect.Response[v2.GetEntitlementsByTokenResponse], error) { - return c.getEntitlementsByToken.CallUnary(ctx, req) -} - // AuthorizationServiceHandler is an implementation of the authorization.v2.AuthorizationService // service. type AuthorizationServiceHandler interface { GetDecision(context.Context, *connect.Request[v2.GetDecisionRequest]) (*connect.Response[v2.GetDecisionResponse], error) GetDecisionMultiResource(context.Context, *connect.Request[v2.GetDecisionMultiResourceRequest]) (*connect.Response[v2.GetDecisionMultiResourceResponse], error) GetDecisionBulk(context.Context, *connect.Request[v2.GetDecisionBulkRequest]) (*connect.Response[v2.GetDecisionBulkResponse], error) - GetDecisionByToken(context.Context, *connect.Request[v2.GetDecisionByTokenRequest]) (*connect.Response[v2.GetDecisionByTokenResponse], error) - GetDecisionByTokenMultiResource(context.Context, *connect.Request[v2.GetDecisionByTokenMultiResourceRequest]) (*connect.Response[v2.GetDecisionByTokenMultiResourceResponse], error) GetEntitlements(context.Context, *connect.Request[v2.GetEntitlementsRequest]) (*connect.Response[v2.GetEntitlementsResponse], error) - GetEntitlementsByToken(context.Context, *connect.Request[v2.GetEntitlementsByTokenRequest]) (*connect.Response[v2.GetEntitlementsByTokenResponse], error) } // NewAuthorizationServiceHandler builds an HTTP handler from the service implementation. It returns @@ -217,30 +162,12 @@ func NewAuthorizationServiceHandler(svc AuthorizationServiceHandler, opts ...con connect.WithSchema(authorizationServiceGetDecisionBulkMethodDescriptor), connect.WithHandlerOptions(opts...), ) - authorizationServiceGetDecisionByTokenHandler := connect.NewUnaryHandler( - AuthorizationServiceGetDecisionByTokenProcedure, - svc.GetDecisionByToken, - connect.WithSchema(authorizationServiceGetDecisionByTokenMethodDescriptor), - connect.WithHandlerOptions(opts...), - ) - authorizationServiceGetDecisionByTokenMultiResourceHandler := connect.NewUnaryHandler( - AuthorizationServiceGetDecisionByTokenMultiResourceProcedure, - svc.GetDecisionByTokenMultiResource, - connect.WithSchema(authorizationServiceGetDecisionByTokenMultiResourceMethodDescriptor), - connect.WithHandlerOptions(opts...), - ) authorizationServiceGetEntitlementsHandler := connect.NewUnaryHandler( AuthorizationServiceGetEntitlementsProcedure, svc.GetEntitlements, connect.WithSchema(authorizationServiceGetEntitlementsMethodDescriptor), connect.WithHandlerOptions(opts...), ) - authorizationServiceGetEntitlementsByTokenHandler := connect.NewUnaryHandler( - AuthorizationServiceGetEntitlementsByTokenProcedure, - svc.GetEntitlementsByToken, - connect.WithSchema(authorizationServiceGetEntitlementsByTokenMethodDescriptor), - connect.WithHandlerOptions(opts...), - ) return "/authorization.v2.AuthorizationService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { switch r.URL.Path { case AuthorizationServiceGetDecisionProcedure: @@ -249,14 +176,8 @@ func NewAuthorizationServiceHandler(svc AuthorizationServiceHandler, opts ...con authorizationServiceGetDecisionMultiResourceHandler.ServeHTTP(w, r) case AuthorizationServiceGetDecisionBulkProcedure: authorizationServiceGetDecisionBulkHandler.ServeHTTP(w, r) - case AuthorizationServiceGetDecisionByTokenProcedure: - authorizationServiceGetDecisionByTokenHandler.ServeHTTP(w, r) - case AuthorizationServiceGetDecisionByTokenMultiResourceProcedure: - authorizationServiceGetDecisionByTokenMultiResourceHandler.ServeHTTP(w, r) case AuthorizationServiceGetEntitlementsProcedure: authorizationServiceGetEntitlementsHandler.ServeHTTP(w, r) - case AuthorizationServiceGetEntitlementsByTokenProcedure: - authorizationServiceGetEntitlementsByTokenHandler.ServeHTTP(w, r) default: http.NotFound(w, r) } @@ -278,18 +199,6 @@ func (UnimplementedAuthorizationServiceHandler) GetDecisionBulk(context.Context, return nil, connect.NewError(connect.CodeUnimplemented, errors.New("authorization.v2.AuthorizationService.GetDecisionBulk is not implemented")) } -func (UnimplementedAuthorizationServiceHandler) GetDecisionByToken(context.Context, *connect.Request[v2.GetDecisionByTokenRequest]) (*connect.Response[v2.GetDecisionByTokenResponse], error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("authorization.v2.AuthorizationService.GetDecisionByToken is not implemented")) -} - -func (UnimplementedAuthorizationServiceHandler) GetDecisionByTokenMultiResource(context.Context, *connect.Request[v2.GetDecisionByTokenMultiResourceRequest]) (*connect.Response[v2.GetDecisionByTokenMultiResourceResponse], error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("authorization.v2.AuthorizationService.GetDecisionByTokenMultiResource is not implemented")) -} - func (UnimplementedAuthorizationServiceHandler) GetEntitlements(context.Context, *connect.Request[v2.GetEntitlementsRequest]) (*connect.Response[v2.GetEntitlementsResponse], error) { return nil, connect.NewError(connect.CodeUnimplemented, errors.New("authorization.v2.AuthorizationService.GetEntitlements is not implemented")) } - -func (UnimplementedAuthorizationServiceHandler) GetEntitlementsByToken(context.Context, *connect.Request[v2.GetEntitlementsByTokenRequest]) (*connect.Response[v2.GetEntitlementsByTokenResponse], error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("authorization.v2.AuthorizationService.GetEntitlementsByToken is not implemented")) -} diff --git a/protocol/go/entity/entity.pb.go b/protocol/go/entity/entity.pb.go new file mode 100644 index 0000000000..05a24b9e2d --- /dev/null +++ b/protocol/go/entity/entity.pb.go @@ -0,0 +1,470 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.33.0 +// protoc (unknown) +// source: entity/entity.proto + +package entity + +import ( + _ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + anypb "google.golang.org/protobuf/types/known/anypb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type Entity_Category int32 + +const ( + Entity_CATEGORY_UNSPECIFIED Entity_Category = 0 + Entity_CATEGORY_SUBJECT Entity_Category = 1 + Entity_CATEGORY_ENVIRONMENT Entity_Category = 2 +) + +// Enum value maps for Entity_Category. +var ( + Entity_Category_name = map[int32]string{ + 0: "CATEGORY_UNSPECIFIED", + 1: "CATEGORY_SUBJECT", + 2: "CATEGORY_ENVIRONMENT", + } + Entity_Category_value = map[string]int32{ + "CATEGORY_UNSPECIFIED": 0, + "CATEGORY_SUBJECT": 1, + "CATEGORY_ENVIRONMENT": 2, + } +) + +func (x Entity_Category) Enum() *Entity_Category { + p := new(Entity_Category) + *p = x + return p +} + +func (x Entity_Category) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Entity_Category) Descriptor() protoreflect.EnumDescriptor { + return file_entity_entity_proto_enumTypes[0].Descriptor() +} + +func (Entity_Category) Type() protoreflect.EnumType { + return &file_entity_entity_proto_enumTypes[0] +} + +func (x Entity_Category) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Entity_Category.Descriptor instead. +func (Entity_Category) EnumDescriptor() ([]byte, []int) { + return file_entity_entity_proto_rawDescGZIP(), []int{1, 0} +} + +type Token struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // ephemeral id for tracking between request and response + EphemeralId string `protobuf:"bytes,1,opt,name=ephemeral_id,json=ephemeralId,proto3" json:"ephemeral_id,omitempty"` + // the token + Jwt string `protobuf:"bytes,2,opt,name=jwt,proto3" json:"jwt,omitempty"` +} + +func (x *Token) Reset() { + *x = Token{} + if protoimpl.UnsafeEnabled { + mi := &file_entity_entity_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Token) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Token) ProtoMessage() {} + +func (x *Token) ProtoReflect() protoreflect.Message { + mi := &file_entity_entity_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Token.ProtoReflect.Descriptor instead. +func (*Token) Descriptor() ([]byte, []int) { + return file_entity_entity_proto_rawDescGZIP(), []int{0} +} + +func (x *Token) GetEphemeralId() string { + if x != nil { + return x.EphemeralId + } + return "" +} + +func (x *Token) GetJwt() string { + if x != nil { + return x.Jwt + } + return "" +} + +// PE (Person Entity) or NPE (Non-Person Entity) +type Entity struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // ephemeral id for tracking between request and response + EphemeralId string `protobuf:"bytes,1,opt,name=ephemeral_id,json=ephemeralId,proto3" json:"ephemeral_id,omitempty"` + // Standard entity types supported by the platform, one of which must be set + // + // Types that are assignable to EntityType: + // + // *Entity_EmailAddress + // *Entity_UserName + // *Entity_Claims + // *Entity_ClientId + EntityType isEntity_EntityType `protobuf_oneof:"entity_type"` + Category Entity_Category `protobuf:"varint,11,opt,name=category,proto3,enum=entity.Entity_Category" json:"category,omitempty"` +} + +func (x *Entity) Reset() { + *x = Entity{} + if protoimpl.UnsafeEnabled { + mi := &file_entity_entity_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Entity) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Entity) ProtoMessage() {} + +func (x *Entity) ProtoReflect() protoreflect.Message { + mi := &file_entity_entity_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Entity.ProtoReflect.Descriptor instead. +func (*Entity) Descriptor() ([]byte, []int) { + return file_entity_entity_proto_rawDescGZIP(), []int{1} +} + +func (x *Entity) GetEphemeralId() string { + if x != nil { + return x.EphemeralId + } + return "" +} + +func (m *Entity) GetEntityType() isEntity_EntityType { + if m != nil { + return m.EntityType + } + return nil +} + +func (x *Entity) GetEmailAddress() string { + if x, ok := x.GetEntityType().(*Entity_EmailAddress); ok { + return x.EmailAddress + } + return "" +} + +func (x *Entity) GetUserName() string { + if x, ok := x.GetEntityType().(*Entity_UserName); ok { + return x.UserName + } + return "" +} + +func (x *Entity) GetClaims() *anypb.Any { + if x, ok := x.GetEntityType().(*Entity_Claims); ok { + return x.Claims + } + return nil +} + +func (x *Entity) GetClientId() string { + if x, ok := x.GetEntityType().(*Entity_ClientId); ok { + return x.ClientId + } + return "" +} + +func (x *Entity) GetCategory() Entity_Category { + if x != nil { + return x.Category + } + return Entity_CATEGORY_UNSPECIFIED +} + +type isEntity_EntityType interface { + isEntity_EntityType() +} + +type Entity_EmailAddress struct { + EmailAddress string `protobuf:"bytes,2,opt,name=email_address,json=emailAddress,proto3,oneof"` +} + +type Entity_UserName struct { + UserName string `protobuf:"bytes,3,opt,name=user_name,json=userName,proto3,oneof"` +} + +type Entity_Claims struct { + // used by ERS claims mode + Claims *anypb.Any `protobuf:"bytes,4,opt,name=claims,proto3,oneof"` +} + +type Entity_ClientId struct { + ClientId string `protobuf:"bytes,5,opt,name=client_id,json=clientId,proto3,oneof"` +} + +func (*Entity_EmailAddress) isEntity_EntityType() {} + +func (*Entity_UserName) isEntity_EntityType() {} + +func (*Entity_Claims) isEntity_EntityType() {} + +func (*Entity_ClientId) isEntity_EntityType() {} + +// A set of related PE and NPE +type EntityChain struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // ephemeral id for tracking between request and response + EphemeralId string `protobuf:"bytes,1,opt,name=ephemeral_id,json=ephemeralId,proto3" json:"ephemeral_id,omitempty"` + Entities []*Entity `protobuf:"bytes,2,rep,name=entities,proto3" json:"entities,omitempty"` +} + +func (x *EntityChain) Reset() { + *x = EntityChain{} + if protoimpl.UnsafeEnabled { + mi := &file_entity_entity_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EntityChain) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EntityChain) ProtoMessage() {} + +func (x *EntityChain) ProtoReflect() protoreflect.Message { + mi := &file_entity_entity_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EntityChain.ProtoReflect.Descriptor instead. +func (*EntityChain) Descriptor() ([]byte, []int) { + return file_entity_entity_proto_rawDescGZIP(), []int{2} +} + +func (x *EntityChain) GetEphemeralId() string { + if x != nil { + return x.EphemeralId + } + return "" +} + +func (x *EntityChain) GetEntities() []*Entity { + if x != nil { + return x.Entities + } + return nil +} + +var File_entity_entity_proto protoreflect.FileDescriptor + +var file_entity_entity_proto_rawDesc = []byte{ + 0x0a, 0x13, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x1a, 0x1b, 0x62, + 0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x44, 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x21, + 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, + 0x64, 0x12, 0x18, 0x0a, 0x03, 0x6a, 0x77, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, + 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x03, 0x6a, 0x77, 0x74, 0x22, 0xda, 0x02, 0x0a, 0x06, + 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, + 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, + 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0d, 0x65, 0x6d, 0x61, + 0x69, 0x6c, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x48, 0x00, 0x52, 0x0c, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x12, 0x1d, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x2e, 0x0a, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x48, 0x00, 0x52, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x12, + 0x1d, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x33, + 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x17, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x2e, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, + 0x6f, 0x72, 0x79, 0x22, 0x54, 0x0a, 0x08, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, + 0x18, 0x0a, 0x14, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, + 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x41, 0x54, + 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x53, 0x55, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x01, 0x12, + 0x18, 0x0a, 0x14, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x45, 0x4e, 0x56, 0x49, + 0x52, 0x4f, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x42, 0x0d, 0x0a, 0x0b, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x5c, 0x0a, 0x0b, 0x45, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, + 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, + 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x08, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x42, 0x81, 0x01, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x2e, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x42, 0x0b, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, 0x6f, 0x2f, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0xa2, 0x02, 0x03, 0x45, 0x58, 0x58, 0xaa, 0x02, 0x06, 0x45, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0xca, 0x02, 0x06, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0xe2, 0x02, 0x12, 0x45, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0xea, 0x02, 0x06, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, +} + +var ( + file_entity_entity_proto_rawDescOnce sync.Once + file_entity_entity_proto_rawDescData = file_entity_entity_proto_rawDesc +) + +func file_entity_entity_proto_rawDescGZIP() []byte { + file_entity_entity_proto_rawDescOnce.Do(func() { + file_entity_entity_proto_rawDescData = protoimpl.X.CompressGZIP(file_entity_entity_proto_rawDescData) + }) + return file_entity_entity_proto_rawDescData +} + +var file_entity_entity_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_entity_entity_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_entity_entity_proto_goTypes = []interface{}{ + (Entity_Category)(0), // 0: entity.Entity.Category + (*Token)(nil), // 1: entity.Token + (*Entity)(nil), // 2: entity.Entity + (*EntityChain)(nil), // 3: entity.EntityChain + (*anypb.Any)(nil), // 4: google.protobuf.Any +} +var file_entity_entity_proto_depIdxs = []int32{ + 4, // 0: entity.Entity.claims:type_name -> google.protobuf.Any + 0, // 1: entity.Entity.category:type_name -> entity.Entity.Category + 2, // 2: entity.EntityChain.entities:type_name -> entity.Entity + 3, // [3:3] is the sub-list for method output_type + 3, // [3:3] is the sub-list for method input_type + 3, // [3:3] is the sub-list for extension type_name + 3, // [3:3] is the sub-list for extension extendee + 0, // [0:3] is the sub-list for field type_name +} + +func init() { file_entity_entity_proto_init() } +func file_entity_entity_proto_init() { + if File_entity_entity_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_entity_entity_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Token); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_entity_entity_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Entity); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_entity_entity_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EntityChain); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_entity_entity_proto_msgTypes[1].OneofWrappers = []interface{}{ + (*Entity_EmailAddress)(nil), + (*Entity_UserName)(nil), + (*Entity_Claims)(nil), + (*Entity_ClientId)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_entity_entity_proto_rawDesc, + NumEnums: 1, + NumMessages: 3, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_entity_entity_proto_goTypes, + DependencyIndexes: file_entity_entity_proto_depIdxs, + EnumInfos: file_entity_entity_proto_enumTypes, + MessageInfos: file_entity_entity_proto_msgTypes, + }.Build() + File_entity_entity_proto = out.File + file_entity_entity_proto_rawDesc = nil + file_entity_entity_proto_goTypes = nil + file_entity_entity_proto_depIdxs = nil +} diff --git a/protocol/go/entityresolution/entity_resolution.pb.go b/protocol/go/entityresolution/entity_resolution.pb.go index 5dce9d6f7e..afc990717c 100644 --- a/protocol/go/entityresolution/entity_resolution.pb.go +++ b/protocol/go/entityresolution/entity_resolution.pb.go @@ -7,9 +7,7 @@ package entityresolution import ( - _ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate" authorization "github.com/opentdf/platform/protocol/go/authorization" - v2 "github.com/opentdf/platform/protocol/go/authorization/v2" _ "google.golang.org/genproto/googleapis/api/annotations" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" @@ -44,9 +42,7 @@ type ResolveEntitiesRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // either v1 or v2 authorization entities are permitted, but not both - Entities []*authorization.Entity `protobuf:"bytes,1,rep,name=entities,proto3" json:"entities,omitempty"` - EntitiesV2 []*v2.Entity `protobuf:"bytes,2,rep,name=entities_v2,json=entitiesV2,proto3" json:"entities_v2,omitempty"` + Entities []*authorization.Entity `protobuf:"bytes,1,rep,name=entities,proto3" json:"entities,omitempty"` } func (x *ResolveEntitiesRequest) Reset() { @@ -88,13 +84,6 @@ func (x *ResolveEntitiesRequest) GetEntities() []*authorization.Entity { return nil } -func (x *ResolveEntitiesRequest) GetEntitiesV2() []*v2.Entity { - if x != nil { - return x.EntitiesV2 - } - return nil -} - type EntityRepresentation struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -413,105 +402,87 @@ var file_entityresolution_entity_resolution_proto_rawDesc = []byte{ 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x21, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, - 0x24, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, - 0x32, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, - 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, - 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa6, 0x02, 0x0a, 0x16, 0x52, 0x65, - 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x39, 0x0a, 0x0b, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x69, 0x65, 0x73, 0x5f, 0x76, 0x32, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, - 0x56, 0x32, 0x3a, 0x9d, 0x01, 0xba, 0x48, 0x99, 0x01, 0x1a, 0x96, 0x01, 0x0a, 0x2c, 0x72, 0x65, - 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x5f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x5f, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x61, 0x74, 0x5f, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x5f, - 0x6f, 0x6e, 0x65, 0x5f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x06, 0x65, 0x69, 0x74, 0x68, - 0x65, 0x72, 0x1a, 0x5e, 0x28, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x29, 0x20, 0x26, 0x26, 0x20, 0x21, 0x68, 0x61, 0x73, 0x28, - 0x74, 0x68, 0x69, 0x73, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x5f, 0x76, 0x32, - 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x21, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x29, 0x20, 0x26, 0x26, 0x20, 0x68, 0x61, 0x73, 0x28, - 0x74, 0x68, 0x69, 0x73, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x5f, 0x76, 0x32, - 0x29, 0x29, 0x22, 0x7b, 0x0a, 0x14, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x70, 0x72, - 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x42, 0x0a, 0x10, 0x61, 0x64, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0f, 0x61, - 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x73, 0x12, 0x1f, - 0x0a, 0x0b, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x49, 0x64, 0x22, - 0x78, 0x0a, 0x17, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x16, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x15, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x70, 0x72, 0x65, 0x73, - 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x8b, 0x01, 0x0a, 0x13, 0x45, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x2e, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, - 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x4f, 0x0a, 0x1f, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, - 0x4a, 0x77, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x06, 0x74, 0x6f, - 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x52, 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x22, 0x63, 0x0a, 0x20, 0x43, 0x72, 0x65, 0x61, + 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, + 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x4b, 0x0a, 0x16, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, + 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x31, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x69, 0x65, 0x73, 0x22, 0x7b, 0x0a, 0x14, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x70, + 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x42, 0x0a, 0x10, 0x61, + 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0f, + 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x73, 0x12, + 0x1f, 0x0a, 0x0b, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x49, 0x64, + 0x22, 0x78, 0x0a, 0x17, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, + 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, 0x0a, 0x16, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x70, 0x72, 0x65, + 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x8b, 0x01, 0x0a, 0x13, 0x45, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x2e, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, + 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x4f, 0x0a, 0x1f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, - 0x6d, 0x4a, 0x77, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x0d, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, - 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x32, 0xd6, 0x02, - 0x0a, 0x17, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8c, 0x01, 0x0a, 0x0f, 0x52, 0x65, - 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x28, 0x2e, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, - 0x76, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x01, 0x2a, 0x22, 0x19, 0x2f, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x12, 0xab, 0x01, 0x0a, 0x18, 0x43, 0x72, 0x65, + 0x6d, 0x4a, 0x77, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x06, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x52, 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x22, 0x63, 0x0a, 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, - 0x6f, 0x6d, 0x4a, 0x77, 0x74, 0x12, 0x31, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, - 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x4a, 0x77, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, - 0x6d, 0x4a, 0x77, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x22, 0x3a, 0x01, 0x2a, 0x22, 0x1d, 0x2f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x42, 0xc7, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x42, - 0x15, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, - 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x38, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, - 0x6f, 0x2f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0xa2, 0x02, 0x03, 0x45, 0x58, 0x58, 0xaa, 0x02, 0x10, 0x45, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0xca, 0x02, 0x10, 0x45, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0xe2, 0x02, - 0x1c, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, - 0x6e, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x10, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6f, 0x6d, 0x4a, 0x77, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, + 0x0d, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, + 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x32, 0xd6, + 0x02, 0x0a, 0x17, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, + 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x8c, 0x01, 0x0a, 0x0f, 0x52, + 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x28, + 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x73, 0x6f, + 0x6c, 0x76, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x01, 0x2a, 0x22, 0x19, + 0x2f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, + 0x6e, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x12, 0xab, 0x01, 0x0a, 0x18, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, + 0x72, 0x6f, 0x6d, 0x4a, 0x77, 0x74, 0x12, 0x31, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, + 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x4a, + 0x77, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, + 0x6f, 0x6d, 0x4a, 0x77, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x3a, 0x01, 0x2a, 0x22, 0x1d, 0x2f, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x42, 0xc7, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x42, 0x15, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x38, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, + 0x67, 0x6f, 0x2f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, + 0x69, 0x6f, 0x6e, 0xa2, 0x02, 0x03, 0x45, 0x58, 0x58, 0xaa, 0x02, 0x10, 0x45, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0xca, 0x02, 0x10, 0x45, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0xe2, + 0x02, 0x1c, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, + 0x6f, 0x6e, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, + 0x10, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, + 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -535,29 +506,27 @@ var file_entityresolution_entity_resolution_proto_goTypes = []interface{}{ (*CreateEntityChainFromJwtRequest)(nil), // 4: entityresolution.CreateEntityChainFromJwtRequest (*CreateEntityChainFromJwtResponse)(nil), // 5: entityresolution.CreateEntityChainFromJwtResponse (*authorization.Entity)(nil), // 6: authorization.Entity - (*v2.Entity)(nil), // 7: authorization.v2.Entity - (*structpb.Struct)(nil), // 8: google.protobuf.Struct - (*anypb.Any)(nil), // 9: google.protobuf.Any - (*authorization.Token)(nil), // 10: authorization.Token - (*authorization.EntityChain)(nil), // 11: authorization.EntityChain + (*structpb.Struct)(nil), // 7: google.protobuf.Struct + (*anypb.Any)(nil), // 8: google.protobuf.Any + (*authorization.Token)(nil), // 9: authorization.Token + (*authorization.EntityChain)(nil), // 10: authorization.EntityChain } var file_entityresolution_entity_resolution_proto_depIdxs = []int32{ 6, // 0: entityresolution.ResolveEntitiesRequest.entities:type_name -> authorization.Entity - 7, // 1: entityresolution.ResolveEntitiesRequest.entities_v2:type_name -> authorization.v2.Entity - 8, // 2: entityresolution.EntityRepresentation.additional_props:type_name -> google.protobuf.Struct - 1, // 3: entityresolution.ResolveEntitiesResponse.entity_representations:type_name -> entityresolution.EntityRepresentation - 9, // 4: entityresolution.EntityNotFoundError.details:type_name -> google.protobuf.Any - 10, // 5: entityresolution.CreateEntityChainFromJwtRequest.tokens:type_name -> authorization.Token - 11, // 6: entityresolution.CreateEntityChainFromJwtResponse.entity_chains:type_name -> authorization.EntityChain - 0, // 7: entityresolution.EntityResolutionService.ResolveEntities:input_type -> entityresolution.ResolveEntitiesRequest - 4, // 8: entityresolution.EntityResolutionService.CreateEntityChainFromJwt:input_type -> entityresolution.CreateEntityChainFromJwtRequest - 2, // 9: entityresolution.EntityResolutionService.ResolveEntities:output_type -> entityresolution.ResolveEntitiesResponse - 5, // 10: entityresolution.EntityResolutionService.CreateEntityChainFromJwt:output_type -> entityresolution.CreateEntityChainFromJwtResponse - 9, // [9:11] is the sub-list for method output_type - 7, // [7:9] is the sub-list for method input_type - 7, // [7:7] is the sub-list for extension type_name - 7, // [7:7] is the sub-list for extension extendee - 0, // [0:7] is the sub-list for field type_name + 7, // 1: entityresolution.EntityRepresentation.additional_props:type_name -> google.protobuf.Struct + 1, // 2: entityresolution.ResolveEntitiesResponse.entity_representations:type_name -> entityresolution.EntityRepresentation + 8, // 3: entityresolution.EntityNotFoundError.details:type_name -> google.protobuf.Any + 9, // 4: entityresolution.CreateEntityChainFromJwtRequest.tokens:type_name -> authorization.Token + 10, // 5: entityresolution.CreateEntityChainFromJwtResponse.entity_chains:type_name -> authorization.EntityChain + 0, // 6: entityresolution.EntityResolutionService.ResolveEntities:input_type -> entityresolution.ResolveEntitiesRequest + 4, // 7: entityresolution.EntityResolutionService.CreateEntityChainFromJwt:input_type -> entityresolution.CreateEntityChainFromJwtRequest + 2, // 8: entityresolution.EntityResolutionService.ResolveEntities:output_type -> entityresolution.ResolveEntitiesResponse + 5, // 9: entityresolution.EntityResolutionService.CreateEntityChainFromJwt:output_type -> entityresolution.CreateEntityChainFromJwtResponse + 8, // [8:10] is the sub-list for method output_type + 6, // [6:8] is the sub-list for method input_type + 6, // [6:6] is the sub-list for extension type_name + 6, // [6:6] is the sub-list for extension extendee + 0, // [0:6] is the sub-list for field type_name } func init() { file_entityresolution_entity_resolution_proto_init() } diff --git a/protocol/go/entityresolution/v2/entity_resolution.pb.go b/protocol/go/entityresolution/v2/entity_resolution.pb.go index 34fe42316f..cc2dd7c0c9 100644 --- a/protocol/go/entityresolution/v2/entity_resolution.pb.go +++ b/protocol/go/entityresolution/v2/entity_resolution.pb.go @@ -8,11 +8,11 @@ package entityresolutionv2 import ( _ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate" - authorization "github.com/opentdf/platform/protocol/go/authorization" - v2 "github.com/opentdf/platform/protocol/go/authorization/v2" - entityresolution "github.com/opentdf/platform/protocol/go/entityresolution" + entity "github.com/opentdf/platform/protocol/go/entity" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + anypb "google.golang.org/protobuf/types/known/anypb" + structpb "google.golang.org/protobuf/types/known/structpb" reflect "reflect" sync "sync" ) @@ -24,17 +24,18 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) -// Resolve a set of entities to their representations. -type ResolveEntitiesRequest struct { +type EntityRepresentation struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EntitiesV2 []*v2.Entity `protobuf:"bytes,2,rep,name=entities_v2,json=entitiesV2,proto3" json:"entities_v2,omitempty"` + // ephemeral entity id from the request + OriginalId string `protobuf:"bytes,1,opt,name=original_id,json=originalId,proto3" json:"original_id,omitempty"` + AdditionalProps []*structpb.Struct `protobuf:"bytes,2,rep,name=additional_props,json=additionalProps,proto3" json:"additional_props,omitempty"` } -func (x *ResolveEntitiesRequest) Reset() { - *x = ResolveEntitiesRequest{} +func (x *EntityRepresentation) Reset() { + *x = EntityRepresentation{} if protoimpl.UnsafeEnabled { mi := &file_entityresolution_v2_entity_resolution_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -42,13 +43,13 @@ func (x *ResolveEntitiesRequest) Reset() { } } -func (x *ResolveEntitiesRequest) String() string { +func (x *EntityRepresentation) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveEntitiesRequest) ProtoMessage() {} +func (*EntityRepresentation) ProtoMessage() {} -func (x *ResolveEntitiesRequest) ProtoReflect() protoreflect.Message { +func (x *EntityRepresentation) ProtoReflect() protoreflect.Message { mi := &file_entityresolution_v2_entity_resolution_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -60,28 +61,36 @@ func (x *ResolveEntitiesRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ResolveEntitiesRequest.ProtoReflect.Descriptor instead. -func (*ResolveEntitiesRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use EntityRepresentation.ProtoReflect.Descriptor instead. +func (*EntityRepresentation) Descriptor() ([]byte, []int) { return file_entityresolution_v2_entity_resolution_proto_rawDescGZIP(), []int{0} } -func (x *ResolveEntitiesRequest) GetEntitiesV2() []*v2.Entity { +func (x *EntityRepresentation) GetOriginalId() string { if x != nil { - return x.EntitiesV2 + return x.OriginalId + } + return "" +} + +func (x *EntityRepresentation) GetAdditionalProps() []*structpb.Struct { + if x != nil { + return x.AdditionalProps } return nil } -type ResolveEntitiesResponse struct { +// Resolve a set of entities to their representations. +type ResolveEntitiesRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EntityRepresentations []*entityresolution.EntityRepresentation `protobuf:"bytes,1,rep,name=entity_representations,json=entityRepresentations,proto3" json:"entity_representations,omitempty"` + Entities []*entity.Entity `protobuf:"bytes,1,rep,name=entities,proto3" json:"entities,omitempty"` } -func (x *ResolveEntitiesResponse) Reset() { - *x = ResolveEntitiesResponse{} +func (x *ResolveEntitiesRequest) Reset() { + *x = ResolveEntitiesRequest{} if protoimpl.UnsafeEnabled { mi := &file_entityresolution_v2_entity_resolution_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -89,13 +98,13 @@ func (x *ResolveEntitiesResponse) Reset() { } } -func (x *ResolveEntitiesResponse) String() string { +func (x *ResolveEntitiesRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ResolveEntitiesResponse) ProtoMessage() {} +func (*ResolveEntitiesRequest) ProtoMessage() {} -func (x *ResolveEntitiesResponse) ProtoReflect() protoreflect.Message { +func (x *ResolveEntitiesRequest) ProtoReflect() protoreflect.Message { mi := &file_entityresolution_v2_entity_resolution_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -107,29 +116,28 @@ func (x *ResolveEntitiesResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ResolveEntitiesResponse.ProtoReflect.Descriptor instead. -func (*ResolveEntitiesResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use ResolveEntitiesRequest.ProtoReflect.Descriptor instead. +func (*ResolveEntitiesRequest) Descriptor() ([]byte, []int) { return file_entityresolution_v2_entity_resolution_proto_rawDescGZIP(), []int{1} } -func (x *ResolveEntitiesResponse) GetEntityRepresentations() []*entityresolution.EntityRepresentation { +func (x *ResolveEntitiesRequest) GetEntities() []*entity.Entity { if x != nil { - return x.EntityRepresentations + return x.Entities } return nil } -// Create an entity chain from a single JWT. -type CreateEntityChainFromJwtRequest struct { +type ResolveEntitiesResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Token *authorization.Token `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` + EntityRepresentations []*EntityRepresentation `protobuf:"bytes,1,rep,name=entity_representations,json=entityRepresentations,proto3" json:"entity_representations,omitempty"` } -func (x *CreateEntityChainFromJwtRequest) Reset() { - *x = CreateEntityChainFromJwtRequest{} +func (x *ResolveEntitiesResponse) Reset() { + *x = ResolveEntitiesResponse{} if protoimpl.UnsafeEnabled { mi := &file_entityresolution_v2_entity_resolution_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -137,13 +145,13 @@ func (x *CreateEntityChainFromJwtRequest) Reset() { } } -func (x *CreateEntityChainFromJwtRequest) String() string { +func (x *ResolveEntitiesResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CreateEntityChainFromJwtRequest) ProtoMessage() {} +func (*ResolveEntitiesResponse) ProtoMessage() {} -func (x *CreateEntityChainFromJwtRequest) ProtoReflect() protoreflect.Message { +func (x *ResolveEntitiesResponse) ProtoReflect() protoreflect.Message { mi := &file_entityresolution_v2_entity_resolution_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -155,28 +163,31 @@ func (x *CreateEntityChainFromJwtRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use CreateEntityChainFromJwtRequest.ProtoReflect.Descriptor instead. -func (*CreateEntityChainFromJwtRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use ResolveEntitiesResponse.ProtoReflect.Descriptor instead. +func (*ResolveEntitiesResponse) Descriptor() ([]byte, []int) { return file_entityresolution_v2_entity_resolution_proto_rawDescGZIP(), []int{2} } -func (x *CreateEntityChainFromJwtRequest) GetToken() *authorization.Token { +func (x *ResolveEntitiesResponse) GetEntityRepresentations() []*EntityRepresentation { if x != nil { - return x.Token + return x.EntityRepresentations } return nil } -type CreateEntityChainFromJwtResponse struct { +type EntityNotFoundError struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EntityChains *v2.EntityChain `protobuf:"bytes,1,opt,name=entity_chains,json=entityChains,proto3" json:"entity_chains,omitempty"` + Code int32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` + Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` + Details []*anypb.Any `protobuf:"bytes,3,rep,name=details,proto3" json:"details,omitempty"` + Entity string `protobuf:"bytes,4,opt,name=entity,proto3" json:"entity,omitempty"` } -func (x *CreateEntityChainFromJwtResponse) Reset() { - *x = CreateEntityChainFromJwtResponse{} +func (x *EntityNotFoundError) Reset() { + *x = EntityNotFoundError{} if protoimpl.UnsafeEnabled { mi := &file_entityresolution_v2_entity_resolution_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -184,13 +195,13 @@ func (x *CreateEntityChainFromJwtResponse) Reset() { } } -func (x *CreateEntityChainFromJwtResponse) String() string { +func (x *EntityNotFoundError) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CreateEntityChainFromJwtResponse) ProtoMessage() {} +func (*EntityNotFoundError) ProtoMessage() {} -func (x *CreateEntityChainFromJwtResponse) ProtoReflect() protoreflect.Message { +func (x *EntityNotFoundError) ProtoReflect() protoreflect.Message { mi := &file_entityresolution_v2_entity_resolution_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -202,29 +213,50 @@ func (x *CreateEntityChainFromJwtResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use CreateEntityChainFromJwtResponse.ProtoReflect.Descriptor instead. -func (*CreateEntityChainFromJwtResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use EntityNotFoundError.ProtoReflect.Descriptor instead. +func (*EntityNotFoundError) Descriptor() ([]byte, []int) { return file_entityresolution_v2_entity_resolution_proto_rawDescGZIP(), []int{3} } -func (x *CreateEntityChainFromJwtResponse) GetEntityChains() *v2.EntityChain { +func (x *EntityNotFoundError) GetCode() int32 { if x != nil { - return x.EntityChains + return x.Code + } + return 0 +} + +func (x *EntityNotFoundError) GetMessage() string { + if x != nil { + return x.Message + } + return "" +} + +func (x *EntityNotFoundError) GetDetails() []*anypb.Any { + if x != nil { + return x.Details } return nil } -// Create an entity chain from multiple JWTs. -type CreateEntityChainFromJwtMultiRequest struct { +func (x *EntityNotFoundError) GetEntity() string { + if x != nil { + return x.Entity + } + return "" +} + +// Create an entity chain for each token (JWT) in the request. +type CreateEntityChainsFromTokensRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Token []*authorization.Token `protobuf:"bytes,1,rep,name=token,proto3" json:"token,omitempty"` + Tokens []*entity.Token `protobuf:"bytes,1,rep,name=tokens,proto3" json:"tokens,omitempty"` } -func (x *CreateEntityChainFromJwtMultiRequest) Reset() { - *x = CreateEntityChainFromJwtMultiRequest{} +func (x *CreateEntityChainsFromTokensRequest) Reset() { + *x = CreateEntityChainsFromTokensRequest{} if protoimpl.UnsafeEnabled { mi := &file_entityresolution_v2_entity_resolution_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -232,13 +264,13 @@ func (x *CreateEntityChainFromJwtMultiRequest) Reset() { } } -func (x *CreateEntityChainFromJwtMultiRequest) String() string { +func (x *CreateEntityChainsFromTokensRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CreateEntityChainFromJwtMultiRequest) ProtoMessage() {} +func (*CreateEntityChainsFromTokensRequest) ProtoMessage() {} -func (x *CreateEntityChainFromJwtMultiRequest) ProtoReflect() protoreflect.Message { +func (x *CreateEntityChainsFromTokensRequest) ProtoReflect() protoreflect.Message { mi := &file_entityresolution_v2_entity_resolution_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -250,28 +282,28 @@ func (x *CreateEntityChainFromJwtMultiRequest) ProtoReflect() protoreflect.Messa return mi.MessageOf(x) } -// Deprecated: Use CreateEntityChainFromJwtMultiRequest.ProtoReflect.Descriptor instead. -func (*CreateEntityChainFromJwtMultiRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use CreateEntityChainsFromTokensRequest.ProtoReflect.Descriptor instead. +func (*CreateEntityChainsFromTokensRequest) Descriptor() ([]byte, []int) { return file_entityresolution_v2_entity_resolution_proto_rawDescGZIP(), []int{4} } -func (x *CreateEntityChainFromJwtMultiRequest) GetToken() []*authorization.Token { +func (x *CreateEntityChainsFromTokensRequest) GetTokens() []*entity.Token { if x != nil { - return x.Token + return x.Tokens } return nil } -type CreateEntityChainFromJwtMultiResponse struct { +type CreateEntityChainsFromTokensResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - EntityChains []*v2.EntityChain `protobuf:"bytes,1,rep,name=entity_chains,json=entityChains,proto3" json:"entity_chains,omitempty"` + EntityChains []*entity.EntityChain `protobuf:"bytes,1,rep,name=entity_chains,json=entityChains,proto3" json:"entity_chains,omitempty"` } -func (x *CreateEntityChainFromJwtMultiResponse) Reset() { - *x = CreateEntityChainFromJwtMultiResponse{} +func (x *CreateEntityChainsFromTokensResponse) Reset() { + *x = CreateEntityChainsFromTokensResponse{} if protoimpl.UnsafeEnabled { mi := &file_entityresolution_v2_entity_resolution_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -279,13 +311,13 @@ func (x *CreateEntityChainFromJwtMultiResponse) Reset() { } } -func (x *CreateEntityChainFromJwtMultiResponse) String() string { +func (x *CreateEntityChainsFromTokensResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CreateEntityChainFromJwtMultiResponse) ProtoMessage() {} +func (*CreateEntityChainsFromTokensResponse) ProtoMessage() {} -func (x *CreateEntityChainFromJwtMultiResponse) ProtoReflect() protoreflect.Message { +func (x *CreateEntityChainsFromTokensResponse) ProtoReflect() protoreflect.Message { mi := &file_entityresolution_v2_entity_resolution_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -297,12 +329,12 @@ func (x *CreateEntityChainFromJwtMultiResponse) ProtoReflect() protoreflect.Mess return mi.MessageOf(x) } -// Deprecated: Use CreateEntityChainFromJwtMultiResponse.ProtoReflect.Descriptor instead. -func (*CreateEntityChainFromJwtMultiResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use CreateEntityChainsFromTokensResponse.ProtoReflect.Descriptor instead. +func (*CreateEntityChainsFromTokensResponse) Descriptor() ([]byte, []int) { return file_entityresolution_v2_entity_resolution_proto_rawDescGZIP(), []int{5} } -func (x *CreateEntityChainFromJwtMultiResponse) GetEntityChains() []*v2.EntityChain { +func (x *CreateEntityChainsFromTokensResponse) GetEntityChains() []*entity.EntityChain { if x != nil { return x.EntityChains } @@ -316,96 +348,88 @@ var file_entityresolution_v2_entity_resolution_proto_rawDesc = []byte{ 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x2f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x13, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x1a, 0x21, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x24, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x62, 0x75, 0x66, - 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x28, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x22, 0x60, 0x0a, 0x16, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x45, 0x6e, 0x74, - 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x46, 0x0a, 0x0b, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x5f, 0x76, 0x32, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x42, 0x0b, 0xba, 0x48, 0x08, - 0xc8, 0x01, 0x01, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x0a, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, - 0x65, 0x73, 0x56, 0x32, 0x22, 0x78, 0x0a, 0x17, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x45, - 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x5d, 0x0a, 0x16, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, - 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x26, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, - 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, - 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x4d, - 0x0a, 0x1f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, - 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x4a, 0x77, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x2a, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x14, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x66, 0x0a, - 0x20, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, - 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x4a, 0x77, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x42, 0x0a, 0x0d, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, - 0x68, 0x61, 0x69, 0x6e, 0x73, 0x22, 0x52, 0x0a, 0x24, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x4a, 0x77, - 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, - 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x6b, 0x0a, 0x25, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, - 0x6f, 0x6d, 0x4a, 0x77, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x42, 0x0a, 0x0d, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x43, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x32, 0xb0, 0x03, 0x0a, 0x17, 0x45, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x12, 0x6e, 0x0a, 0x0f, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x45, 0x6e, 0x74, - 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x2b, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, - 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, - 0x6c, 0x76, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, - 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x00, 0x12, 0x89, 0x01, 0x0a, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x4a, 0x77, 0x74, 0x12, - 0x34, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x4a, 0x77, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, + 0x76, 0x32, 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, + 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x13, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, + 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x7b, 0x0a, + 0x14, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, + 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x72, 0x69, 0x67, + 0x69, 0x6e, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x42, 0x0a, 0x10, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x70, 0x72, 0x6f, 0x70, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0f, 0x61, 0x64, 0x64, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x73, 0x22, 0x51, 0x0a, 0x16, 0x52, 0x65, + 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, + 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x92, 0x01, + 0x02, 0x08, 0x01, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0x7b, 0x0a, + 0x17, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x60, 0x0a, 0x16, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x5f, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x70, 0x72, 0x65, + 0x73, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x8b, 0x01, 0x0a, 0x13, 0x45, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x4e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x2e, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, + 0x12, 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x4c, 0x0a, 0x23, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x46, 0x72, + 0x6f, 0x6d, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x25, 0x0a, 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x0d, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x06, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x22, 0x60, 0x0a, 0x24, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x46, 0x72, 0x6f, 0x6d, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, + 0x0a, 0x0d, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x45, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x32, 0xa1, 0x02, 0x0a, 0x17, 0x45, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x6e, 0x0a, 0x0f, 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x45, + 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x2b, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, + 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, + 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x6c, + 0x76, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x00, 0x12, 0x95, 0x01, 0x0a, 0x1c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x46, 0x72, 0x6f, 0x6d, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x38, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, - 0x6d, 0x4a, 0x77, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x98, - 0x01, 0x0a, 0x1d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, - 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x4a, 0x77, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, - 0x12, 0x39, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x4a, 0x77, 0x74, 0x4d, - 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, - 0x61, 0x69, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x4a, 0x77, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xed, 0x01, 0x0a, 0x17, 0x63, 0x6f, - 0x6d, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x42, 0x15, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, - 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x4e, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, - 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, 0x6f, 0x2f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, - 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x3b, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x32, 0xa2, 0x02, - 0x03, 0x45, 0x58, 0x58, 0xaa, 0x02, 0x13, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, - 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x13, 0x45, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, - 0xe2, 0x02, 0x1f, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, - 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0xea, 0x02, 0x14, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, - 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, + 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x46, 0x72, + 0x6f, 0x6d, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x39, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x46, 0x72, 0x6f, 0x6d, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xed, 0x01, 0x0a, + 0x17, 0x63, 0x6f, 0x6d, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, + 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x42, 0x15, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x52, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, + 0x01, 0x5a, 0x4e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, + 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, 0x6f, 0x2f, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x3b, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x76, + 0x32, 0xa2, 0x02, 0x03, 0x45, 0x58, 0x58, 0xaa, 0x02, 0x13, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x13, + 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x1f, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, 0x73, 0x6f, + 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x14, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x72, 0x65, + 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -422,35 +446,34 @@ func file_entityresolution_v2_entity_resolution_proto_rawDescGZIP() []byte { var file_entityresolution_v2_entity_resolution_proto_msgTypes = make([]protoimpl.MessageInfo, 6) var file_entityresolution_v2_entity_resolution_proto_goTypes = []interface{}{ - (*ResolveEntitiesRequest)(nil), // 0: entityresolution.v2.ResolveEntitiesRequest - (*ResolveEntitiesResponse)(nil), // 1: entityresolution.v2.ResolveEntitiesResponse - (*CreateEntityChainFromJwtRequest)(nil), // 2: entityresolution.v2.CreateEntityChainFromJwtRequest - (*CreateEntityChainFromJwtResponse)(nil), // 3: entityresolution.v2.CreateEntityChainFromJwtResponse - (*CreateEntityChainFromJwtMultiRequest)(nil), // 4: entityresolution.v2.CreateEntityChainFromJwtMultiRequest - (*CreateEntityChainFromJwtMultiResponse)(nil), // 5: entityresolution.v2.CreateEntityChainFromJwtMultiResponse - (*v2.Entity)(nil), // 6: authorization.v2.Entity - (*entityresolution.EntityRepresentation)(nil), // 7: entityresolution.EntityRepresentation - (*authorization.Token)(nil), // 8: authorization.Token - (*v2.EntityChain)(nil), // 9: authorization.v2.EntityChain + (*EntityRepresentation)(nil), // 0: entityresolution.v2.EntityRepresentation + (*ResolveEntitiesRequest)(nil), // 1: entityresolution.v2.ResolveEntitiesRequest + (*ResolveEntitiesResponse)(nil), // 2: entityresolution.v2.ResolveEntitiesResponse + (*EntityNotFoundError)(nil), // 3: entityresolution.v2.EntityNotFoundError + (*CreateEntityChainsFromTokensRequest)(nil), // 4: entityresolution.v2.CreateEntityChainsFromTokensRequest + (*CreateEntityChainsFromTokensResponse)(nil), // 5: entityresolution.v2.CreateEntityChainsFromTokensResponse + (*structpb.Struct)(nil), // 6: google.protobuf.Struct + (*entity.Entity)(nil), // 7: entity.Entity + (*anypb.Any)(nil), // 8: google.protobuf.Any + (*entity.Token)(nil), // 9: entity.Token + (*entity.EntityChain)(nil), // 10: entity.EntityChain } var file_entityresolution_v2_entity_resolution_proto_depIdxs = []int32{ - 6, // 0: entityresolution.v2.ResolveEntitiesRequest.entities_v2:type_name -> authorization.v2.Entity - 7, // 1: entityresolution.v2.ResolveEntitiesResponse.entity_representations:type_name -> entityresolution.EntityRepresentation - 8, // 2: entityresolution.v2.CreateEntityChainFromJwtRequest.token:type_name -> authorization.Token - 9, // 3: entityresolution.v2.CreateEntityChainFromJwtResponse.entity_chains:type_name -> authorization.v2.EntityChain - 8, // 4: entityresolution.v2.CreateEntityChainFromJwtMultiRequest.token:type_name -> authorization.Token - 9, // 5: entityresolution.v2.CreateEntityChainFromJwtMultiResponse.entity_chains:type_name -> authorization.v2.EntityChain - 0, // 6: entityresolution.v2.EntityResolutionService.ResolveEntities:input_type -> entityresolution.v2.ResolveEntitiesRequest - 2, // 7: entityresolution.v2.EntityResolutionService.CreateEntityChainFromJwt:input_type -> entityresolution.v2.CreateEntityChainFromJwtRequest - 4, // 8: entityresolution.v2.EntityResolutionService.CreateEntityChainFromJwtMulti:input_type -> entityresolution.v2.CreateEntityChainFromJwtMultiRequest - 1, // 9: entityresolution.v2.EntityResolutionService.ResolveEntities:output_type -> entityresolution.v2.ResolveEntitiesResponse - 3, // 10: entityresolution.v2.EntityResolutionService.CreateEntityChainFromJwt:output_type -> entityresolution.v2.CreateEntityChainFromJwtResponse - 5, // 11: entityresolution.v2.EntityResolutionService.CreateEntityChainFromJwtMulti:output_type -> entityresolution.v2.CreateEntityChainFromJwtMultiResponse - 9, // [9:12] is the sub-list for method output_type - 6, // [6:9] is the sub-list for method input_type - 6, // [6:6] is the sub-list for extension type_name - 6, // [6:6] is the sub-list for extension extendee - 0, // [0:6] is the sub-list for field type_name + 6, // 0: entityresolution.v2.EntityRepresentation.additional_props:type_name -> google.protobuf.Struct + 7, // 1: entityresolution.v2.ResolveEntitiesRequest.entities:type_name -> entity.Entity + 0, // 2: entityresolution.v2.ResolveEntitiesResponse.entity_representations:type_name -> entityresolution.v2.EntityRepresentation + 8, // 3: entityresolution.v2.EntityNotFoundError.details:type_name -> google.protobuf.Any + 9, // 4: entityresolution.v2.CreateEntityChainsFromTokensRequest.tokens:type_name -> entity.Token + 10, // 5: entityresolution.v2.CreateEntityChainsFromTokensResponse.entity_chains:type_name -> entity.EntityChain + 1, // 6: entityresolution.v2.EntityResolutionService.ResolveEntities:input_type -> entityresolution.v2.ResolveEntitiesRequest + 4, // 7: entityresolution.v2.EntityResolutionService.CreateEntityChainsFromTokens:input_type -> entityresolution.v2.CreateEntityChainsFromTokensRequest + 2, // 8: entityresolution.v2.EntityResolutionService.ResolveEntities:output_type -> entityresolution.v2.ResolveEntitiesResponse + 5, // 9: entityresolution.v2.EntityResolutionService.CreateEntityChainsFromTokens:output_type -> entityresolution.v2.CreateEntityChainsFromTokensResponse + 8, // [8:10] is the sub-list for method output_type + 6, // [6:8] is the sub-list for method input_type + 6, // [6:6] is the sub-list for extension type_name + 6, // [6:6] is the sub-list for extension extendee + 0, // [0:6] is the sub-list for field type_name } func init() { file_entityresolution_v2_entity_resolution_proto_init() } @@ -460,7 +483,7 @@ func file_entityresolution_v2_entity_resolution_proto_init() { } if !protoimpl.UnsafeEnabled { file_entityresolution_v2_entity_resolution_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ResolveEntitiesRequest); i { + switch v := v.(*EntityRepresentation); i { case 0: return &v.state case 1: @@ -472,7 +495,7 @@ func file_entityresolution_v2_entity_resolution_proto_init() { } } file_entityresolution_v2_entity_resolution_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ResolveEntitiesResponse); i { + switch v := v.(*ResolveEntitiesRequest); i { case 0: return &v.state case 1: @@ -484,7 +507,7 @@ func file_entityresolution_v2_entity_resolution_proto_init() { } } file_entityresolution_v2_entity_resolution_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateEntityChainFromJwtRequest); i { + switch v := v.(*ResolveEntitiesResponse); i { case 0: return &v.state case 1: @@ -496,7 +519,7 @@ func file_entityresolution_v2_entity_resolution_proto_init() { } } file_entityresolution_v2_entity_resolution_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateEntityChainFromJwtResponse); i { + switch v := v.(*EntityNotFoundError); i { case 0: return &v.state case 1: @@ -508,7 +531,7 @@ func file_entityresolution_v2_entity_resolution_proto_init() { } } file_entityresolution_v2_entity_resolution_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateEntityChainFromJwtMultiRequest); i { + switch v := v.(*CreateEntityChainsFromTokensRequest); i { case 0: return &v.state case 1: @@ -520,7 +543,7 @@ func file_entityresolution_v2_entity_resolution_proto_init() { } } file_entityresolution_v2_entity_resolution_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateEntityChainFromJwtMultiResponse); i { + switch v := v.(*CreateEntityChainsFromTokensResponse); i { case 0: return &v.state case 1: diff --git a/protocol/go/entityresolution/v2/entity_resolution_grpc.pb.go b/protocol/go/entityresolution/v2/entity_resolution_grpc.pb.go index 5aef54e38d..13f92df221 100644 --- a/protocol/go/entityresolution/v2/entity_resolution_grpc.pb.go +++ b/protocol/go/entityresolution/v2/entity_resolution_grpc.pb.go @@ -19,9 +19,8 @@ import ( const _ = grpc.SupportPackageIsVersion7 const ( - EntityResolutionService_ResolveEntities_FullMethodName = "/entityresolution.v2.EntityResolutionService/ResolveEntities" - EntityResolutionService_CreateEntityChainFromJwt_FullMethodName = "/entityresolution.v2.EntityResolutionService/CreateEntityChainFromJwt" - EntityResolutionService_CreateEntityChainFromJwtMulti_FullMethodName = "/entityresolution.v2.EntityResolutionService/CreateEntityChainFromJwtMulti" + EntityResolutionService_ResolveEntities_FullMethodName = "/entityresolution.v2.EntityResolutionService/ResolveEntities" + EntityResolutionService_CreateEntityChainsFromTokens_FullMethodName = "/entityresolution.v2.EntityResolutionService/CreateEntityChainsFromTokens" ) // EntityResolutionServiceClient is the client API for EntityResolutionService service. @@ -29,8 +28,7 @@ const ( // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. type EntityResolutionServiceClient interface { ResolveEntities(ctx context.Context, in *ResolveEntitiesRequest, opts ...grpc.CallOption) (*ResolveEntitiesResponse, error) - CreateEntityChainFromJwt(ctx context.Context, in *CreateEntityChainFromJwtRequest, opts ...grpc.CallOption) (*CreateEntityChainFromJwtResponse, error) - CreateEntityChainFromJwtMulti(ctx context.Context, in *CreateEntityChainFromJwtMultiRequest, opts ...grpc.CallOption) (*CreateEntityChainFromJwtMultiResponse, error) + CreateEntityChainsFromTokens(ctx context.Context, in *CreateEntityChainsFromTokensRequest, opts ...grpc.CallOption) (*CreateEntityChainsFromTokensResponse, error) } type entityResolutionServiceClient struct { @@ -50,18 +48,9 @@ func (c *entityResolutionServiceClient) ResolveEntities(ctx context.Context, in return out, nil } -func (c *entityResolutionServiceClient) CreateEntityChainFromJwt(ctx context.Context, in *CreateEntityChainFromJwtRequest, opts ...grpc.CallOption) (*CreateEntityChainFromJwtResponse, error) { - out := new(CreateEntityChainFromJwtResponse) - err := c.cc.Invoke(ctx, EntityResolutionService_CreateEntityChainFromJwt_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *entityResolutionServiceClient) CreateEntityChainFromJwtMulti(ctx context.Context, in *CreateEntityChainFromJwtMultiRequest, opts ...grpc.CallOption) (*CreateEntityChainFromJwtMultiResponse, error) { - out := new(CreateEntityChainFromJwtMultiResponse) - err := c.cc.Invoke(ctx, EntityResolutionService_CreateEntityChainFromJwtMulti_FullMethodName, in, out, opts...) +func (c *entityResolutionServiceClient) CreateEntityChainsFromTokens(ctx context.Context, in *CreateEntityChainsFromTokensRequest, opts ...grpc.CallOption) (*CreateEntityChainsFromTokensResponse, error) { + out := new(CreateEntityChainsFromTokensResponse) + err := c.cc.Invoke(ctx, EntityResolutionService_CreateEntityChainsFromTokens_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -73,8 +62,7 @@ func (c *entityResolutionServiceClient) CreateEntityChainFromJwtMulti(ctx contex // for forward compatibility type EntityResolutionServiceServer interface { ResolveEntities(context.Context, *ResolveEntitiesRequest) (*ResolveEntitiesResponse, error) - CreateEntityChainFromJwt(context.Context, *CreateEntityChainFromJwtRequest) (*CreateEntityChainFromJwtResponse, error) - CreateEntityChainFromJwtMulti(context.Context, *CreateEntityChainFromJwtMultiRequest) (*CreateEntityChainFromJwtMultiResponse, error) + CreateEntityChainsFromTokens(context.Context, *CreateEntityChainsFromTokensRequest) (*CreateEntityChainsFromTokensResponse, error) mustEmbedUnimplementedEntityResolutionServiceServer() } @@ -85,11 +73,8 @@ type UnimplementedEntityResolutionServiceServer struct { func (UnimplementedEntityResolutionServiceServer) ResolveEntities(context.Context, *ResolveEntitiesRequest) (*ResolveEntitiesResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method ResolveEntities not implemented") } -func (UnimplementedEntityResolutionServiceServer) CreateEntityChainFromJwt(context.Context, *CreateEntityChainFromJwtRequest) (*CreateEntityChainFromJwtResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateEntityChainFromJwt not implemented") -} -func (UnimplementedEntityResolutionServiceServer) CreateEntityChainFromJwtMulti(context.Context, *CreateEntityChainFromJwtMultiRequest) (*CreateEntityChainFromJwtMultiResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method CreateEntityChainFromJwtMulti not implemented") +func (UnimplementedEntityResolutionServiceServer) CreateEntityChainsFromTokens(context.Context, *CreateEntityChainsFromTokensRequest) (*CreateEntityChainsFromTokensResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateEntityChainsFromTokens not implemented") } func (UnimplementedEntityResolutionServiceServer) mustEmbedUnimplementedEntityResolutionServiceServer() { } @@ -123,38 +108,20 @@ func _EntityResolutionService_ResolveEntities_Handler(srv interface{}, ctx conte return interceptor(ctx, in, info, handler) } -func _EntityResolutionService_CreateEntityChainFromJwt_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(CreateEntityChainFromJwtRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(EntityResolutionServiceServer).CreateEntityChainFromJwt(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: EntityResolutionService_CreateEntityChainFromJwt_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(EntityResolutionServiceServer).CreateEntityChainFromJwt(ctx, req.(*CreateEntityChainFromJwtRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _EntityResolutionService_CreateEntityChainFromJwtMulti_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(CreateEntityChainFromJwtMultiRequest) +func _EntityResolutionService_CreateEntityChainsFromTokens_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CreateEntityChainsFromTokensRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(EntityResolutionServiceServer).CreateEntityChainFromJwtMulti(ctx, in) + return srv.(EntityResolutionServiceServer).CreateEntityChainsFromTokens(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: EntityResolutionService_CreateEntityChainFromJwtMulti_FullMethodName, + FullMethod: EntityResolutionService_CreateEntityChainsFromTokens_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(EntityResolutionServiceServer).CreateEntityChainFromJwtMulti(ctx, req.(*CreateEntityChainFromJwtMultiRequest)) + return srv.(EntityResolutionServiceServer).CreateEntityChainsFromTokens(ctx, req.(*CreateEntityChainsFromTokensRequest)) } return interceptor(ctx, in, info, handler) } @@ -171,12 +138,8 @@ var EntityResolutionService_ServiceDesc = grpc.ServiceDesc{ Handler: _EntityResolutionService_ResolveEntities_Handler, }, { - MethodName: "CreateEntityChainFromJwt", - Handler: _EntityResolutionService_CreateEntityChainFromJwt_Handler, - }, - { - MethodName: "CreateEntityChainFromJwtMulti", - Handler: _EntityResolutionService_CreateEntityChainFromJwtMulti_Handler, + MethodName: "CreateEntityChainsFromTokens", + Handler: _EntityResolutionService_CreateEntityChainsFromTokens_Handler, }, }, Streams: []grpc.StreamDesc{}, diff --git a/protocol/go/entityresolution/v2/entityresolutionv2connect/entity_resolution.connect.go b/protocol/go/entityresolution/v2/entityresolutionv2connect/entity_resolution.connect.go index 8ed310670a..8ceee1587a 100644 --- a/protocol/go/entityresolution/v2/entityresolutionv2connect/entity_resolution.connect.go +++ b/protocol/go/entityresolution/v2/entityresolutionv2connect/entity_resolution.connect.go @@ -36,28 +36,23 @@ const ( // EntityResolutionServiceResolveEntitiesProcedure is the fully-qualified name of the // EntityResolutionService's ResolveEntities RPC. EntityResolutionServiceResolveEntitiesProcedure = "/entityresolution.v2.EntityResolutionService/ResolveEntities" - // EntityResolutionServiceCreateEntityChainFromJwtProcedure is the fully-qualified name of the - // EntityResolutionService's CreateEntityChainFromJwt RPC. - EntityResolutionServiceCreateEntityChainFromJwtProcedure = "/entityresolution.v2.EntityResolutionService/CreateEntityChainFromJwt" - // EntityResolutionServiceCreateEntityChainFromJwtMultiProcedure is the fully-qualified name of the - // EntityResolutionService's CreateEntityChainFromJwtMulti RPC. - EntityResolutionServiceCreateEntityChainFromJwtMultiProcedure = "/entityresolution.v2.EntityResolutionService/CreateEntityChainFromJwtMulti" + // EntityResolutionServiceCreateEntityChainsFromTokensProcedure is the fully-qualified name of the + // EntityResolutionService's CreateEntityChainsFromTokens RPC. + EntityResolutionServiceCreateEntityChainsFromTokensProcedure = "/entityresolution.v2.EntityResolutionService/CreateEntityChainsFromTokens" ) // These variables are the protoreflect.Descriptor objects for the RPCs defined in this package. var ( - entityResolutionServiceServiceDescriptor = v2.File_entityresolution_v2_entity_resolution_proto.Services().ByName("EntityResolutionService") - entityResolutionServiceResolveEntitiesMethodDescriptor = entityResolutionServiceServiceDescriptor.Methods().ByName("ResolveEntities") - entityResolutionServiceCreateEntityChainFromJwtMethodDescriptor = entityResolutionServiceServiceDescriptor.Methods().ByName("CreateEntityChainFromJwt") - entityResolutionServiceCreateEntityChainFromJwtMultiMethodDescriptor = entityResolutionServiceServiceDescriptor.Methods().ByName("CreateEntityChainFromJwtMulti") + entityResolutionServiceServiceDescriptor = v2.File_entityresolution_v2_entity_resolution_proto.Services().ByName("EntityResolutionService") + entityResolutionServiceResolveEntitiesMethodDescriptor = entityResolutionServiceServiceDescriptor.Methods().ByName("ResolveEntities") + entityResolutionServiceCreateEntityChainsFromTokensMethodDescriptor = entityResolutionServiceServiceDescriptor.Methods().ByName("CreateEntityChainsFromTokens") ) // EntityResolutionServiceClient is a client for the entityresolution.v2.EntityResolutionService // service. type EntityResolutionServiceClient interface { ResolveEntities(context.Context, *connect.Request[v2.ResolveEntitiesRequest]) (*connect.Response[v2.ResolveEntitiesResponse], error) - CreateEntityChainFromJwt(context.Context, *connect.Request[v2.CreateEntityChainFromJwtRequest]) (*connect.Response[v2.CreateEntityChainFromJwtResponse], error) - CreateEntityChainFromJwtMulti(context.Context, *connect.Request[v2.CreateEntityChainFromJwtMultiRequest]) (*connect.Response[v2.CreateEntityChainFromJwtMultiResponse], error) + CreateEntityChainsFromTokens(context.Context, *connect.Request[v2.CreateEntityChainsFromTokensRequest]) (*connect.Response[v2.CreateEntityChainsFromTokensResponse], error) } // NewEntityResolutionServiceClient constructs a client for the @@ -77,16 +72,10 @@ func NewEntityResolutionServiceClient(httpClient connect.HTTPClient, baseURL str connect.WithSchema(entityResolutionServiceResolveEntitiesMethodDescriptor), connect.WithClientOptions(opts...), ), - createEntityChainFromJwt: connect.NewClient[v2.CreateEntityChainFromJwtRequest, v2.CreateEntityChainFromJwtResponse]( + createEntityChainsFromTokens: connect.NewClient[v2.CreateEntityChainsFromTokensRequest, v2.CreateEntityChainsFromTokensResponse]( httpClient, - baseURL+EntityResolutionServiceCreateEntityChainFromJwtProcedure, - connect.WithSchema(entityResolutionServiceCreateEntityChainFromJwtMethodDescriptor), - connect.WithClientOptions(opts...), - ), - createEntityChainFromJwtMulti: connect.NewClient[v2.CreateEntityChainFromJwtMultiRequest, v2.CreateEntityChainFromJwtMultiResponse]( - httpClient, - baseURL+EntityResolutionServiceCreateEntityChainFromJwtMultiProcedure, - connect.WithSchema(entityResolutionServiceCreateEntityChainFromJwtMultiMethodDescriptor), + baseURL+EntityResolutionServiceCreateEntityChainsFromTokensProcedure, + connect.WithSchema(entityResolutionServiceCreateEntityChainsFromTokensMethodDescriptor), connect.WithClientOptions(opts...), ), } @@ -94,9 +83,8 @@ func NewEntityResolutionServiceClient(httpClient connect.HTTPClient, baseURL str // entityResolutionServiceClient implements EntityResolutionServiceClient. type entityResolutionServiceClient struct { - resolveEntities *connect.Client[v2.ResolveEntitiesRequest, v2.ResolveEntitiesResponse] - createEntityChainFromJwt *connect.Client[v2.CreateEntityChainFromJwtRequest, v2.CreateEntityChainFromJwtResponse] - createEntityChainFromJwtMulti *connect.Client[v2.CreateEntityChainFromJwtMultiRequest, v2.CreateEntityChainFromJwtMultiResponse] + resolveEntities *connect.Client[v2.ResolveEntitiesRequest, v2.ResolveEntitiesResponse] + createEntityChainsFromTokens *connect.Client[v2.CreateEntityChainsFromTokensRequest, v2.CreateEntityChainsFromTokensResponse] } // ResolveEntities calls entityresolution.v2.EntityResolutionService.ResolveEntities. @@ -104,24 +92,17 @@ func (c *entityResolutionServiceClient) ResolveEntities(ctx context.Context, req return c.resolveEntities.CallUnary(ctx, req) } -// CreateEntityChainFromJwt calls -// entityresolution.v2.EntityResolutionService.CreateEntityChainFromJwt. -func (c *entityResolutionServiceClient) CreateEntityChainFromJwt(ctx context.Context, req *connect.Request[v2.CreateEntityChainFromJwtRequest]) (*connect.Response[v2.CreateEntityChainFromJwtResponse], error) { - return c.createEntityChainFromJwt.CallUnary(ctx, req) -} - -// CreateEntityChainFromJwtMulti calls -// entityresolution.v2.EntityResolutionService.CreateEntityChainFromJwtMulti. -func (c *entityResolutionServiceClient) CreateEntityChainFromJwtMulti(ctx context.Context, req *connect.Request[v2.CreateEntityChainFromJwtMultiRequest]) (*connect.Response[v2.CreateEntityChainFromJwtMultiResponse], error) { - return c.createEntityChainFromJwtMulti.CallUnary(ctx, req) +// CreateEntityChainsFromTokens calls +// entityresolution.v2.EntityResolutionService.CreateEntityChainsFromTokens. +func (c *entityResolutionServiceClient) CreateEntityChainsFromTokens(ctx context.Context, req *connect.Request[v2.CreateEntityChainsFromTokensRequest]) (*connect.Response[v2.CreateEntityChainsFromTokensResponse], error) { + return c.createEntityChainsFromTokens.CallUnary(ctx, req) } // EntityResolutionServiceHandler is an implementation of the // entityresolution.v2.EntityResolutionService service. type EntityResolutionServiceHandler interface { ResolveEntities(context.Context, *connect.Request[v2.ResolveEntitiesRequest]) (*connect.Response[v2.ResolveEntitiesResponse], error) - CreateEntityChainFromJwt(context.Context, *connect.Request[v2.CreateEntityChainFromJwtRequest]) (*connect.Response[v2.CreateEntityChainFromJwtResponse], error) - CreateEntityChainFromJwtMulti(context.Context, *connect.Request[v2.CreateEntityChainFromJwtMultiRequest]) (*connect.Response[v2.CreateEntityChainFromJwtMultiResponse], error) + CreateEntityChainsFromTokens(context.Context, *connect.Request[v2.CreateEntityChainsFromTokensRequest]) (*connect.Response[v2.CreateEntityChainsFromTokensResponse], error) } // NewEntityResolutionServiceHandler builds an HTTP handler from the service implementation. It @@ -136,26 +117,18 @@ func NewEntityResolutionServiceHandler(svc EntityResolutionServiceHandler, opts connect.WithSchema(entityResolutionServiceResolveEntitiesMethodDescriptor), connect.WithHandlerOptions(opts...), ) - entityResolutionServiceCreateEntityChainFromJwtHandler := connect.NewUnaryHandler( - EntityResolutionServiceCreateEntityChainFromJwtProcedure, - svc.CreateEntityChainFromJwt, - connect.WithSchema(entityResolutionServiceCreateEntityChainFromJwtMethodDescriptor), - connect.WithHandlerOptions(opts...), - ) - entityResolutionServiceCreateEntityChainFromJwtMultiHandler := connect.NewUnaryHandler( - EntityResolutionServiceCreateEntityChainFromJwtMultiProcedure, - svc.CreateEntityChainFromJwtMulti, - connect.WithSchema(entityResolutionServiceCreateEntityChainFromJwtMultiMethodDescriptor), + entityResolutionServiceCreateEntityChainsFromTokensHandler := connect.NewUnaryHandler( + EntityResolutionServiceCreateEntityChainsFromTokensProcedure, + svc.CreateEntityChainsFromTokens, + connect.WithSchema(entityResolutionServiceCreateEntityChainsFromTokensMethodDescriptor), connect.WithHandlerOptions(opts...), ) return "/entityresolution.v2.EntityResolutionService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { switch r.URL.Path { case EntityResolutionServiceResolveEntitiesProcedure: entityResolutionServiceResolveEntitiesHandler.ServeHTTP(w, r) - case EntityResolutionServiceCreateEntityChainFromJwtProcedure: - entityResolutionServiceCreateEntityChainFromJwtHandler.ServeHTTP(w, r) - case EntityResolutionServiceCreateEntityChainFromJwtMultiProcedure: - entityResolutionServiceCreateEntityChainFromJwtMultiHandler.ServeHTTP(w, r) + case EntityResolutionServiceCreateEntityChainsFromTokensProcedure: + entityResolutionServiceCreateEntityChainsFromTokensHandler.ServeHTTP(w, r) default: http.NotFound(w, r) } @@ -169,10 +142,6 @@ func (UnimplementedEntityResolutionServiceHandler) ResolveEntities(context.Conte return nil, connect.NewError(connect.CodeUnimplemented, errors.New("entityresolution.v2.EntityResolutionService.ResolveEntities is not implemented")) } -func (UnimplementedEntityResolutionServiceHandler) CreateEntityChainFromJwt(context.Context, *connect.Request[v2.CreateEntityChainFromJwtRequest]) (*connect.Response[v2.CreateEntityChainFromJwtResponse], error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("entityresolution.v2.EntityResolutionService.CreateEntityChainFromJwt is not implemented")) -} - -func (UnimplementedEntityResolutionServiceHandler) CreateEntityChainFromJwtMulti(context.Context, *connect.Request[v2.CreateEntityChainFromJwtMultiRequest]) (*connect.Response[v2.CreateEntityChainFromJwtMultiResponse], error) { - return nil, connect.NewError(connect.CodeUnimplemented, errors.New("entityresolution.v2.EntityResolutionService.CreateEntityChainFromJwtMulti is not implemented")) +func (UnimplementedEntityResolutionServiceHandler) CreateEntityChainsFromTokens(context.Context, *connect.Request[v2.CreateEntityChainsFromTokensRequest]) (*connect.Response[v2.CreateEntityChainsFromTokensResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("entityresolution.v2.EntityResolutionService.CreateEntityChainsFromTokens is not implemented")) } diff --git a/service/authorization/authorization.proto b/service/authorization/authorization.proto index ca06ad6463..cb485219a9 100644 --- a/service/authorization/authorization.proto +++ b/service/authorization/authorization.proto @@ -16,16 +16,27 @@ message Token { // PE (Person Entity) or NPE (Non-Person Entity) message Entity { - string id = 1; // ephemeral id for tracking between request and response - // Standard entity types supported by the platform + // ephemeral id for tracking between request and response + string id = 1; + + // Deprecated: was not supported + reserved 4; + reserved "remote_claims_url"; + + // Deprecated: was not supported + reserved 5; + reserved "uuid"; + + // Deprecated: use claims instead + reserved 7; + reserved "custom"; + + // Standard entity types supported by the platform, one of which must be set oneof entity_type { - // one of the entity options must be set string email_address = 2; string user_name = 3; - string remote_claims_url = 4; - string uuid = 5; + // used by ERS claims mode google.protobuf.Any claims = 6; - EntityCustom custom = 7; string client_id = 8; } enum Category { @@ -45,10 +56,7 @@ message EntityCustom { message EntityChain { // ephemeral id for tracking between request and response string id = 1; - repeated Entity entities = 2 [ - (buf.validate.field).required = true, - (buf.validate.field).repeated = {min_items: 1} - ]; + repeated Entity entities = 2; } /* @@ -298,11 +306,11 @@ service AuthorizationService { body: "*" }; } - // Deprecated: Use AuthorizationV2 methods instead (GetDecisionByToken, GetDecisionByTokenMultiResource) + // Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetDecisionMultiResource) rpc GetDecisionsByToken(GetDecisionsByTokenRequest) returns (GetDecisionsByTokenResponse) { option (google.api.http) = {post: "/v1/token/authorization"}; } - // Deprecated: Use AuthorizationV2 method instead (GetEntitlements, GetEntitlementsByToken) + // Deprecated: Use AuthorizationV2 method instead (GetEntitlements) rpc GetEntitlements(GetEntitlementsRequest) returns (GetEntitlementsResponse) { option (google.api.http) = { post: "/v1/entitlements" diff --git a/service/authorization/v2/authorization.proto b/service/authorization/v2/authorization.proto index 0acbd8b177..1f74629aae 100644 --- a/service/authorization/v2/authorization.proto +++ b/service/authorization/v2/authorization.proto @@ -2,9 +2,8 @@ syntax = "proto3"; package authorization.v2; -import "authorization/authorization.proto"; import "buf/validate/validate.proto"; -import "google/protobuf/any.proto"; +import "entity/entity.proto"; import "google/protobuf/wrappers.proto"; import "policy/objects.proto"; @@ -15,37 +14,31 @@ enum Decision { // DECISION_OBLIGATED = 3; } -// A set of related PE and NPE -message EntityChain { - // ephemeral id for tracking between request and response - string ephemeral_chain_id = 1; - repeated Entity entities = 2 [ - (buf.validate.field).required = true, - (buf.validate.field).repeated = {min_items: 1} - ]; -} - -// PE (Person Entity) or NPE (Non-Person Entity) -message Entity { - // ephemeral id for tracking between request and response - string ephemeral_id = 1; - // Standard entity types supported by the platform - oneof entity_type { - // one of the entity options must be set - string email_address = 2; - string user_name = 3; - // used by ERS claims mode - google.protobuf.Any claims = 4; - // EntityCustom custom = 5; - string client_id = 6; - string registered_resource_value_fqn = 7; - } - enum Category { - CATEGORY_UNSPECIFIED = 0; - CATEGORY_SUBJECT = 1; - CATEGORY_ENVIRONMENT = 2; +// The EntityReference is the actor in an entitlement or decision request - the PE, NPE, or PE+NPE being authorized. +// The abstraction houses the distinct entity types, PE and/or NPE combinations, or a registered +// resource value being treated as an entity in entitlement/authorization decisioning. +message EntityReference { + oneof actor { + option (buf.validate.oneof).required = true; + + // chain of one or more entities + entity.EntityChain entity_chain = 1 [(buf.validate.field).cel = { + id: "entity_chain_required" + message: "entities must be provided" + expression: "has(this.entities) && this.entities.size() > 0" + }]; + + // fully qualified name of the registered resource value stored in platform policy, where in + // this case the resource acts as and represents a single entity for authorization/entitlement decisioning + string registered_resource_value_fqn = 2 [(buf.validate.field).string.min_len = 1]; + + // access token (JWT), which is used to create an entity chain (comprising one or more entities) + entity.Token token = 3 [(buf.validate.field).cel = { + id: "token_required" + message: "token must be provided" + expression: "has(this.jwt) && this.jwt.size() > 0" + }]; } - Category category = 9; } // Entitlements for a given entity, mapping each attribute value FQN to any entitled actions[] @@ -86,7 +79,8 @@ message ResourceDecision { // 2. one action // 3. one resource message GetDecisionRequest { - EntityChain entity = 1 [(buf.validate.field).required = true]; + // entity must be provided + EntityReference entity = 1 [(buf.validate.field).required = true]; // name on action is required policy.Action action = 2 [(buf.validate.field).required = true]; Resource resource = 3 [(buf.validate.field).required = true]; @@ -110,8 +104,8 @@ message GetDecisionResponse { // 3. multiple resources // Note: this is a more performant bulk request for multiple resource decisions message GetDecisionMultiResourceRequest { - // entity chain must be defined - EntityChain entity = 1 [(buf.validate.field).required = true]; + // entity must be provided + EntityReference entity = 1 [(buf.validate.field).required = true]; // name on action is required policy.Action action = 2 [(buf.validate.field).required = true]; repeated Resource resources = 3 [ @@ -148,7 +142,8 @@ message GetDecisionBulkResponse { // Note: the v1 API parameter 'scope' has been dropped, and it is recommended to use // GetDecision if the resource is known message GetEntitlementsRequest { - EntityChain entity_chain = 1 [(buf.validate.field).required = true]; + // entity must be provided + EntityReference entity = 1 [(buf.validate.field).required = true]; // optional parameter to return all entitled values for attribute definitions with hierarchy rules, propagating // down the hierarchical values instead of returning solely the value that is directly entitled optional bool with_comprehensive_hierarchy = 2; @@ -157,71 +152,10 @@ message GetEntitlementsResponse { repeated EntityEntitlements entitlements = 1; } -// What can the entity (PE or NPE, represented by the token) do, broken down as permitted actions on attribute value FQNs? -message GetEntitlementsByTokenRequest { - authorization.Token token = 1 [(buf.validate.field).required = true]; - // optional parameter to return all entitled values for attribute definitions with hierarchy rules, propagating - // down the hierarchical values instead of returning solely the value that is directly entitled - optional bool with_comprehensive_hierarchy = 2; -} -message GetEntitlementsByTokenResponse { - repeated EntityEntitlements entitlements = 1; -} - -// Can the entity (PE or NPE) represented by this token access? -// 1. one token -// 2. one action -// 3. one resource -message GetDecisionByTokenRequest { - authorization.Token token = 1 [(buf.validate.field).required = true]; - // name on action is required - policy.Action action = 2 [(buf.validate.field).required = true]; - Resource resource = 3 [(buf.validate.field).required = true]; - - option (buf.validate.message).cel = { - id: "token_decision_request.action_name_required" - message: "action.name must be provided" - expression: "has(this.action.name)" - }; -} -message GetDecisionByTokenResponse { - GetDecisionResponse decision_response = 1; -} - -// Can the entity (PE or NPE) represented by this token access? -// 1. one token -// 2. one action -// 3. multiple resource -message GetDecisionByTokenMultiResourceRequest { - authorization.Token token = 1 [(buf.validate.field).required = true]; - // name on action is required - policy.Action action = 2 [(buf.validate.field).required = true]; - repeated Resource resources = 3 [ - (buf.validate.field).required = true, - (buf.validate.field).repeated = {min_items: 1} - ]; - - option (buf.validate.message).cel = { - id: "token_decision_multi_resource_request.action_name_required" - message: "action.name must be provided" - expression: "has(this.action.name)" - }; -} -message GetDecisionByTokenMultiResourceResponse { - // convenience flag indicating global resource decisions result (permit/deny) - google.protobuf.BoolValue all_permitted = 1; - // individual resource decisions - repeated ResourceDecision resource_decisions = 2; -} - service AuthorizationService { rpc GetDecision(GetDecisionRequest) returns (GetDecisionResponse) {} rpc GetDecisionMultiResource(GetDecisionMultiResourceRequest) returns (GetDecisionMultiResourceResponse) {} rpc GetDecisionBulk(GetDecisionBulkRequest) returns (GetDecisionBulkResponse) {} - rpc GetDecisionByToken(GetDecisionByTokenRequest) returns (GetDecisionByTokenResponse) {} - rpc GetDecisionByTokenMultiResource(GetDecisionByTokenMultiResourceRequest) returns (GetDecisionByTokenMultiResourceResponse) {} - rpc GetEntitlements(GetEntitlementsRequest) returns (GetEntitlementsResponse) {} - rpc GetEntitlementsByToken(GetEntitlementsByTokenRequest) returns (GetEntitlementsByTokenResponse) {} } diff --git a/service/entity/entity.proto b/service/entity/entity.proto new file mode 100644 index 0000000000..b807bef9d4 --- /dev/null +++ b/service/entity/entity.proto @@ -0,0 +1,41 @@ +syntax = "proto3"; + +package entity; + +import "buf/validate/validate.proto"; +import "google/protobuf/any.proto"; + +message Token { + // ephemeral id for tracking between request and response + string ephemeral_id = 1; + // the token + string jwt = 2 [(buf.validate.field).required = true]; +} + +// PE (Person Entity) or NPE (Non-Person Entity) +message Entity { + // ephemeral id for tracking between request and response + string ephemeral_id = 1; + + // Standard entity types supported by the platform, one of which must be set + oneof entity_type { + string email_address = 2; + string user_name = 3; + // used by ERS claims mode + google.protobuf.Any claims = 4; + string client_id = 5; + } + enum Category { + CATEGORY_UNSPECIFIED = 0; + CATEGORY_SUBJECT = 1; + CATEGORY_ENVIRONMENT = 2; + } + Category category = 11; +} + +// A set of related PE and NPE +message EntityChain { + // ephemeral id for tracking between request and response + string ephemeral_id = 1; + repeated Entity entities = 2; +} diff --git a/service/entityresolution/entity_resolution.proto b/service/entityresolution/entity_resolution.proto index 82b5656e78..90d83d9cda 100644 --- a/service/entityresolution/entity_resolution.proto +++ b/service/entityresolution/entity_resolution.proto @@ -3,11 +3,9 @@ syntax = "proto3"; package entityresolution; import "authorization/authorization.proto"; -import "authorization/v2/authorization.proto"; -import "buf/validate/validate.proto"; -import "google/api/annotations.proto"; -import "google/protobuf/any.proto"; import "google/protobuf/struct.proto"; +import "google/protobuf/any.proto"; +import "google/api/annotations.proto"; /* Example: Get idp attributes for bob and alice (both represented using an email address @@ -26,22 +24,16 @@ import "google/protobuf/struct.proto"; */ message ResolveEntitiesRequest { - // either v1 or v2 authorization entities are permitted, but not both - repeated authorization.Entity entities = 1; - repeated authorization.v2.Entity entities_v2 = 2; - - option (buf.validate.message).cel = { - id: "resolve_entities_request.at_least_one_entity" - message: "either" - expression: "(has(this.entities) && !has(this.entities_v2) || !has(this.entities) && has(this.entities_v2))" - }; + repeated authorization.Entity entities = 1; } + message EntityRepresentation { repeated google.protobuf.Struct additional_props = 1; string original_id = 2; // ephemeral entity id from the request } + /* Example: Get idp attributes for bob and alice { @@ -69,6 +61,7 @@ message EntityNotFoundError { string entity = 4; } + /* Example: Get Entity chains for tokens aaaaaa and bbbbbb { @@ -80,49 +73,50 @@ message EntityNotFoundError { */ message CreateEntityChainFromJwtRequest { - repeated authorization.Token tokens = 1; + repeated authorization.Token tokens = 1; } /* - Example: Return the entity chains from the provided tokens + Example: Return the entity chains from the provided tokens + { + "entity_chains": [ + { + "id": "tok1", + "entities": [ + { + "clientId": "client1" + } + ] + }, { - "entity_chains": [ - { - "id": "tok1", - "entities": [ - { - "clientId": "client1" - } - ] - }, - { - "id": "tok2", - "entities": [ - { - "userName": "alice", - "clientId": "client2" - } - ] - } - ] + "id": "tok2", + "entities": [ + { + "userName": "alice", + "clientId": "client2" + } + ] } + ] + } */ message CreateEntityChainFromJwtResponse { repeated authorization.EntityChain entity_chains = 1; } + service EntityResolutionService { rpc ResolveEntities(ResolveEntitiesRequest) returns (ResolveEntitiesResponse) { option (google.api.http) = { - post: "/entityresolution/resolve" - body: "*" + post: "/entityresolution/resolve" + body: "*"; }; } rpc CreateEntityChainFromJwt(CreateEntityChainFromJwtRequest) returns (CreateEntityChainFromJwtResponse) { option (google.api.http) = { - post: "/entityresolution/entitychain" - body: "*" + post: "/entityresolution/entitychain" + body: "*"; }; } -} +} \ No newline at end of file diff --git a/service/entityresolution/v2/entity_resolution.proto b/service/entityresolution/v2/entity_resolution.proto index 2e66f84d67..7dffbf3ef9 100644 --- a/service/entityresolution/v2/entity_resolution.proto +++ b/service/entityresolution/v2/entity_resolution.proto @@ -2,40 +2,45 @@ syntax = "proto3"; package entityresolution.v2; -import "authorization/authorization.proto"; -import "authorization/v2/authorization.proto"; import "buf/validate/validate.proto"; -import "entityresolution/entity_resolution.proto"; +import "entity/entity.proto"; +import "google/protobuf/any.proto"; +import "google/protobuf/struct.proto"; + +message EntityRepresentation { + // ephemeral entity id from the request + string original_id = 1; + repeated google.protobuf.Struct additional_props = 2; +} // Resolve a set of entities to their representations. message ResolveEntitiesRequest { - repeated authorization.v2.Entity entities_v2 = 2 [ + repeated entity.Entity entities = 1 [ (buf.validate.field).required = true, (buf.validate.field).repeated = {min_items: 1} ]; } message ResolveEntitiesResponse { - repeated entityresolution.EntityRepresentation entity_representations = 1; + repeated EntityRepresentation entity_representations = 1; } -// Create an entity chain from a single JWT. -message CreateEntityChainFromJwtRequest { - authorization.Token token = 1; -} -message CreateEntityChainFromJwtResponse { - authorization.v2.EntityChain entity_chains = 1; +message EntityNotFoundError { + int32 code = 1; + string message = 2; + repeated google.protobuf.Any details = 3; + string entity = 4; } -// Create an entity chain from multiple JWTs. -message CreateEntityChainFromJwtMultiRequest { - repeated authorization.Token token = 1; +// Create an entity chain for each token (JWT) in the request. +message CreateEntityChainsFromTokensRequest { + repeated entity.Token tokens = 1; } -message CreateEntityChainFromJwtMultiResponse { - repeated authorization.v2.EntityChain entity_chains = 1; + +message CreateEntityChainsFromTokensResponse { + repeated entity.EntityChain entity_chains = 1; } service EntityResolutionService { rpc ResolveEntities(ResolveEntitiesRequest) returns (ResolveEntitiesResponse) {} - rpc CreateEntityChainFromJwt(CreateEntityChainFromJwtRequest) returns (CreateEntityChainFromJwtResponse) {} - rpc CreateEntityChainFromJwtMulti(CreateEntityChainFromJwtMultiRequest) returns (CreateEntityChainFromJwtMultiResponse) {} + rpc CreateEntityChainsFromTokens(CreateEntityChainsFromTokensRequest) returns (CreateEntityChainsFromTokensResponse) {} } From 8ee0b3bacb2c267061edbf366ad969c4d309c361 Mon Sep 17 00:00:00 2001 From: jakedoublev Date: Wed, 14 May 2025 13:38:59 -0700 Subject: [PATCH 31/49] make no changes at all to authz v1 --- service/authorization/authorization.proto | 193 ++++++++++------------ 1 file changed, 89 insertions(+), 104 deletions(-) diff --git a/service/authorization/authorization.proto b/service/authorization/authorization.proto index cb485219a9..f2b4a7b1d8 100644 --- a/service/authorization/authorization.proto +++ b/service/authorization/authorization.proto @@ -2,41 +2,29 @@ syntax = "proto3"; package authorization; -import "buf/validate/validate.proto"; import "google/api/annotations.proto"; import "google/protobuf/any.proto"; + import "policy/objects.proto"; + message Token { - // ephemeral id for tracking between request and response - string id = 1; - // the token - string jwt = 2 [(buf.validate.field).required = true]; + string id = 1; // ephemeral id for tracking between request and response + string jwt = 2; // the token } // PE (Person Entity) or NPE (Non-Person Entity) message Entity { - // ephemeral id for tracking between request and response - string id = 1; - - // Deprecated: was not supported - reserved 4; - reserved "remote_claims_url"; - - // Deprecated: was not supported - reserved 5; - reserved "uuid"; - - // Deprecated: use claims instead - reserved 7; - reserved "custom"; - - // Standard entity types supported by the platform, one of which must be set + string id = 1; // ephemeral id for tracking between request and response + // Standard entity types supported by the platform oneof entity_type { + // one of the entity options must be set string email_address = 2; string user_name = 3; - // used by ERS claims mode + string remote_claims_url = 4; + string uuid = 5; google.protobuf.Any claims = 6; + EntityCustom custom = 7; string client_id = 8; } enum Category { @@ -54,56 +42,55 @@ message EntityCustom { // A set of related PE and NPE message EntityChain { - // ephemeral id for tracking between request and response - string id = 1; + string id = 1; // ephemeral id for tracking between request and response repeated Entity entities = 2; } /* - Example Request Get Decisions to answer the question - Do Bob (represented by entity chain ec1) - and Alice (represented by entity chain ec2) have TRANSMIT authorization for - 2 resources; resource1 (attr-set-1) defined by attributes foo:bar resource2 (attr-set-2) defined by attribute foo:bar, color:red ? + Example Request Get Decisions to answer the question - Do Bob (represented by entity chain ec1) + and Alice (represented by entity chain ec2) have TRANSMIT authorization for + 2 resources; resource1 (attr-set-1) defined by attributes foo:bar resource2 (attr-set-2) defined by attribute foo:bar, color:red ? - { - "actions": [ - { - "standard": "STANDARD_ACTION_TRANSMIT" - } - ], - "entityChains": [ - { - "id": "ec1", - "entities": [ - { - "emailAddress": "bob@example.org" - } - ] - }, - { - "id": "ec2", - "entities": [ - { - "userName": "alice@example.org" - } - ] - } - ], - "resourceAttributes": [ - { - "resourceAttributeId": "attr-set-1", - "attributeFqns": [ - "https://www.example.org/attr/foo/value/value1" - ] - }, - { - "resourceAttributeId": "attr-set-2", - "attributeFqns": [ - "https://example.net/attr/attr1/value/value1", - "https://example.net/attr/attr1/value/value2" - ] - } - ] - } + { + "actions": [ + { + "standard": "STANDARD_ACTION_TRANSMIT" + } + ], + "entityChains": [ + { + "id": "ec1", + "entities": [ + { + "emailAddress": "bob@example.org" + } + ] + }, + { + "id": "ec2", + "entities": [ + { + "userName": "alice@example.org" + } + ] + } + ], + "resourceAttributes": [ + { + "resourceAttributeId": "attr-set-1", + "attributeFqns": [ + "https://www.example.org/attr/foo/value/value1" + ] + }, + { + "resourceAttributeId": "attr-set-2", + "attributeFqns": [ + "https://example.net/attr/attr1/value/value1", + "https://example.net/attr/attr1/value/value2" + ] + } + ] +} */ message DecisionRequest { @@ -247,41 +234,42 @@ message GetEntitlementsResponse { repeated EntityEntitlements entitlements = 1; } + /* - Example Request Get Decisions by Token to answer the question - Do Bob and client1 (represented by token tok1) - and Alice and client2 (represented by token tok2) have TRANSMIT authorization for - 2 resources; resource1 (attr-set-1) defined by attributes foo:bar resource2 (attr-set-2) defined by attribute foo:bar, color:red ? + Example Request Get Decisions by Token to answer the question - Do Bob and client1 (represented by token tok1) + and Alice and client2 (represented by token tok2) have TRANSMIT authorization for + 2 resources; resource1 (attr-set-1) defined by attributes foo:bar resource2 (attr-set-2) defined by attribute foo:bar, color:red ? - { - "actions": [ - { - "standard": "STANDARD_ACTION_TRANSMIT" - } - ], - "tokens": [ - { - "id": "tok1", - "jwt": .... - }, - { - "id": "tok2", - "jwt": ..... - } - ], - "resourceAttributes": [ - { - "attributeFqns": [ - "https://www.example.org/attr/foo/value/value1" - ] - }, - { - "attributeFqns": [ - "https://example.net/attr/attr1/value/value1", - "https://example.net/attr/attr1/value/value2" - ] - } - ] - } + { + "actions": [ + { + "standard": "STANDARD_ACTION_TRANSMIT" + } + ], + "tokens": [ + { + "id": "tok1", + "jwt": .... + }, + { + "id": "tok2", + "jwt": ..... + } + ], + "resourceAttributes": [ + { + "attributeFqns": [ + "https://www.example.org/attr/foo/value/value1" + ] + }, + { + "attributeFqns": [ + "https://example.net/attr/attr1/value/value1", + "https://example.net/attr/attr1/value/value2" + ] + } + ] +} */ message TokenDecisionRequest { @@ -299,22 +287,19 @@ message GetDecisionsByTokenResponse { } service AuthorizationService { - // Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetDecisionMultiResource, GetDecisionBulk) rpc GetDecisions(GetDecisionsRequest) returns (GetDecisionsResponse) { option (google.api.http) = { post: "/v1/authorization" body: "*" }; } - // Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetDecisionMultiResource) rpc GetDecisionsByToken(GetDecisionsByTokenRequest) returns (GetDecisionsByTokenResponse) { option (google.api.http) = {post: "/v1/token/authorization"}; } - // Deprecated: Use AuthorizationV2 method instead (GetEntitlements) rpc GetEntitlements(GetEntitlementsRequest) returns (GetEntitlementsResponse) { option (google.api.http) = { post: "/v1/entitlements" body: "*" }; } -} +} \ No newline at end of file From 1c5a1a9b7ccdf82e2c8643c543d0707afd680b0e Mon Sep 17 00:00:00 2001 From: jakedoublev Date: Wed, 14 May 2025 13:47:30 -0700 Subject: [PATCH 32/49] proto comments --- docs/grpc/index.html | 39 +- .../authorization/authorization.swagger.json | 27 +- .../v2/authorization.swagger.json | 2 +- .../entity_resolution.swagger.json | 24 +- protocol/go/authorization/authorization.pb.go | 499 ++++++++++-------- .../go/authorization/authorization_grpc.pb.go | 6 - .../authorization.connect.go | 6 - .../go/authorization/v2/authorization.pb.go | 10 +- service/authorization/v2/authorization.proto | 10 +- 9 files changed, 354 insertions(+), 269 deletions(-) diff --git a/docs/grpc/index.html b/docs/grpc/index.html index a498bd2d49..d3f8db9ef4 100644 --- a/docs/grpc/index.html +++ b/docs/grpc/index.html @@ -3678,7 +3678,7 @@

            Entity

            - + @@ -3688,11 +3688,32 @@

            Entity

            + + + + + + + + + + + + + + - + + + + + + + + @@ -4136,21 +4157,21 @@

            AuthorizationService

            - + - + - + @@ -4503,7 +4524,7 @@

            EntityReference

            GetDecisionBulkRequest

            -

            Can the entities (PE or NPE) access?

            1. Multiplexing of a Decision request

            This is a more performant bulk request for complex decisioning (multiple entity chains or actions on

            multiple resource decisions)

            +

            Is access allowed?

            1. Multiplexing of a Decision request

            This is a more performant bulk request for complex decisioning (multiple entity chains or actions on

            multiple resource decisions)

            tokenauthorization.Tokencodeint32

            messagestring

            detailsgoogle.protobuf.Anyrepeated

            entitystring

            entity_chainsauthorization.v2.EntityChainoriginal_idstring

            ephemeral entity id from the request

            additional_propsgoogle.protobuf.Structrepeated

            entities_v2authorization.v2.Entityentitiesentity.Entity repeated

            entity_representationsentityresolution.EntityRepresentationEntityRepresentation repeated

            CreateEntityChainFromJwtCreateEntityChainFromJwtRequestCreateEntityChainFromJwtResponse

            CreateEntityChainFromJwtMultiCreateEntityChainFromJwtMultiRequestCreateEntityChainFromJwtMultiResponseCreateEntityChainsFromTokensCreateEntityChainsFromTokensRequestCreateEntityChainsFromTokensResponse

            email_address string

            one of the entity options must be set

            remote_claims_urlstring

            uuidstring

            claims google.protobuf.Any

            used by ERS claims mode

            customEntityCustom

            GetDecisions GetDecisionsRequest GetDecisionsResponse

            Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetDecisionMultiResource, GetDecisionBulk)

            GetDecisionsByToken GetDecisionsByTokenRequest GetDecisionsByTokenResponse

            Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetDecisionMultiResource)

            GetEntitlements GetEntitlementsRequest GetEntitlementsResponse

            Deprecated: Use AuthorizationV2 method instead (GetEntitlements)

            @@ -4551,7 +4572,7 @@

            GetDecisionBulkResponse

            GetDecisionMultiResourceRequest

            -

            Can the entity (PE or NPE) access?

            1. one entity chain

            2. one action

            3. multiple resources

            Note: this is a more performant bulk request for multiple resource decisions

            +

            Can the entity (PE or NPE) access?

            1. one entity reference (actor)

            2. one action

            3. multiple resources

            Note: this is a more performant bulk request for multiple resource decisions

            @@ -4620,7 +4641,7 @@

            GetDecisionMultiResou

            GetDecisionRequest

            -

            Can the entity (PE or NPE) access?

            1. one entity chain

            2. one action

            3. one resource

            +

            Can the entity (PE or NPE) access?

            1. one entity reference (actor)

            2. one action

            3. one resource

            @@ -4685,7 +4706,7 @@

            GetDecisionResponse

            GetEntitlementsRequest

            -

            What can the entity (PE or NPE, represented by the entity chain) do, broken down as permitted actions on attribute value FQNs?

            Note: the v1 API parameter 'scope' has been dropped, and it is recommended to use

            GetDecision if the resource is known

            +

            What is permitted to the EntityReference (actor), broken down as permitted actions on attribute value FQNs?

            Note: the v1 API parameter 'scope' has been dropped, and it is recommended to use

            GetDecision if the resource is known

            diff --git a/docs/openapi/authorization/authorization.swagger.json b/docs/openapi/authorization/authorization.swagger.json index 341d319cc1..5f9b787c93 100644 --- a/docs/openapi/authorization/authorization.swagger.json +++ b/docs/openapi/authorization/authorization.swagger.json @@ -18,7 +18,6 @@ "paths": { "/v1/authorization": { "post": { - "summary": "Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetDecisionMultiResource, GetDecisionBulk)", "operationId": "AuthorizationService_GetDecisions", "responses": { "200": { @@ -51,7 +50,6 @@ }, "/v1/entitlements": { "post": { - "summary": "Deprecated: Use AuthorizationV2 method instead (GetEntitlements)", "operationId": "AuthorizationService_GetEntitlements", "responses": { "200": { @@ -85,7 +83,6 @@ }, "/v1/token/authorization": { "post": { - "summary": "Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetDecisionMultiResource)", "operationId": "AuthorizationService_GetDecisionsByToken", "responses": { "200": { @@ -193,14 +190,23 @@ "title": "ephemeral id for tracking between request and response" }, "emailAddress": { - "type": "string" + "type": "string", + "title": "one of the entity options must be set" }, "userName": { "type": "string" }, + "remoteClaimsUrl": { + "type": "string" + }, + "uuid": { + "type": "string" + }, "claims": { - "$ref": "#/definitions/protobufAny", - "title": "used by ERS claims mode" + "$ref": "#/definitions/protobufAny" + }, + "custom": { + "$ref": "#/definitions/authorizationEntityCustom" }, "clientId": { "type": "string" @@ -237,6 +243,15 @@ }, "title": "A set of related PE and NPE" }, + "authorizationEntityCustom": { + "type": "object", + "properties": { + "extension": { + "$ref": "#/definitions/protobufAny" + } + }, + "title": "Entity type for custom entities beyond the standard types" + }, "authorizationEntityEntitlements": { "type": "object", "properties": { diff --git a/docs/openapi/authorization/v2/authorization.swagger.json b/docs/openapi/authorization/v2/authorization.swagger.json index 9eff5a56dd..2698e98614 100644 --- a/docs/openapi/authorization/v2/authorization.swagger.json +++ b/docs/openapi/authorization/v2/authorization.swagger.json @@ -279,7 +279,7 @@ } } }, - "title": "Can the entity (PE or NPE) access?\n1. one entity chain\n2. one action\n3. multiple resources\nNote: this is a more performant bulk request for multiple resource decisions" + "title": "Can the entity (PE or NPE) access?\n1. one entity reference (actor)\n2. one action\n3. multiple resources\nNote: this is a more performant bulk request for multiple resource decisions" }, "v2GetDecisionMultiResourceResponse": { "type": "object", diff --git a/docs/openapi/entityresolution/entity_resolution.swagger.json b/docs/openapi/entityresolution/entity_resolution.swagger.json index 8ae9837892..8e179b635f 100644 --- a/docs/openapi/entityresolution/entity_resolution.swagger.json +++ b/docs/openapi/entityresolution/entity_resolution.swagger.json @@ -90,14 +90,23 @@ "title": "ephemeral id for tracking between request and response" }, "emailAddress": { - "type": "string" + "type": "string", + "title": "one of the entity options must be set" }, "userName": { "type": "string" }, + "remoteClaimsUrl": { + "type": "string" + }, + "uuid": { + "type": "string" + }, "claims": { - "$ref": "#/definitions/protobufAny", - "title": "used by ERS claims mode" + "$ref": "#/definitions/protobufAny" + }, + "custom": { + "$ref": "#/definitions/authorizationEntityCustom" }, "clientId": { "type": "string" @@ -134,6 +143,15 @@ }, "title": "A set of related PE and NPE" }, + "authorizationEntityCustom": { + "type": "object", + "properties": { + "extension": { + "$ref": "#/definitions/protobufAny" + } + }, + "title": "Entity type for custom entities beyond the standard types" + }, "authorizationToken": { "type": "object", "properties": { diff --git a/protocol/go/authorization/authorization.pb.go b/protocol/go/authorization/authorization.pb.go index 96e59deeb2..210f7213fe 100644 --- a/protocol/go/authorization/authorization.pb.go +++ b/protocol/go/authorization/authorization.pb.go @@ -7,7 +7,6 @@ package authorization import ( - _ "buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate" policy "github.com/opentdf/platform/protocol/go/policy" _ "google.golang.org/genproto/googleapis/api/annotations" protoreflect "google.golang.org/protobuf/reflect/protoreflect" @@ -127,10 +126,8 @@ type Token struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // ephemeral id for tracking between request and response - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // the token - Jwt string `protobuf:"bytes,2,opt,name=jwt,proto3" json:"jwt,omitempty"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // ephemeral id for tracking between request and response + Jwt string `protobuf:"bytes,2,opt,name=jwt,proto3" json:"jwt,omitempty"` // the token } func (x *Token) Reset() { @@ -185,15 +182,17 @@ type Entity struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // ephemeral id for tracking between request and response - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // Standard entity types supported by the platform, one of which must be set + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // ephemeral id for tracking between request and response + // Standard entity types supported by the platform // // Types that are assignable to EntityType: // // *Entity_EmailAddress // *Entity_UserName + // *Entity_RemoteClaimsUrl + // *Entity_Uuid // *Entity_Claims + // *Entity_Custom // *Entity_ClientId EntityType isEntity_EntityType `protobuf_oneof:"entity_type"` Category Entity_Category `protobuf:"varint,9,opt,name=category,proto3,enum=authorization.Entity_Category" json:"category,omitempty"` @@ -259,6 +258,20 @@ func (x *Entity) GetUserName() string { return "" } +func (x *Entity) GetRemoteClaimsUrl() string { + if x, ok := x.GetEntityType().(*Entity_RemoteClaimsUrl); ok { + return x.RemoteClaimsUrl + } + return "" +} + +func (x *Entity) GetUuid() string { + if x, ok := x.GetEntityType().(*Entity_Uuid); ok { + return x.Uuid + } + return "" +} + func (x *Entity) GetClaims() *anypb.Any { if x, ok := x.GetEntityType().(*Entity_Claims); ok { return x.Claims @@ -266,6 +279,13 @@ func (x *Entity) GetClaims() *anypb.Any { return nil } +func (x *Entity) GetCustom() *EntityCustom { + if x, ok := x.GetEntityType().(*Entity_Custom); ok { + return x.Custom + } + return nil +} + func (x *Entity) GetClientId() string { if x, ok := x.GetEntityType().(*Entity_ClientId); ok { return x.ClientId @@ -285,6 +305,7 @@ type isEntity_EntityType interface { } type Entity_EmailAddress struct { + // one of the entity options must be set EmailAddress string `protobuf:"bytes,2,opt,name=email_address,json=emailAddress,proto3,oneof"` } @@ -292,11 +313,22 @@ type Entity_UserName struct { UserName string `protobuf:"bytes,3,opt,name=user_name,json=userName,proto3,oneof"` } +type Entity_RemoteClaimsUrl struct { + RemoteClaimsUrl string `protobuf:"bytes,4,opt,name=remote_claims_url,json=remoteClaimsUrl,proto3,oneof"` +} + +type Entity_Uuid struct { + Uuid string `protobuf:"bytes,5,opt,name=uuid,proto3,oneof"` +} + type Entity_Claims struct { - // used by ERS claims mode Claims *anypb.Any `protobuf:"bytes,6,opt,name=claims,proto3,oneof"` } +type Entity_Custom struct { + Custom *EntityCustom `protobuf:"bytes,7,opt,name=custom,proto3,oneof"` +} + type Entity_ClientId struct { ClientId string `protobuf:"bytes,8,opt,name=client_id,json=clientId,proto3,oneof"` } @@ -305,8 +337,14 @@ func (*Entity_EmailAddress) isEntity_EntityType() {} func (*Entity_UserName) isEntity_EntityType() {} +func (*Entity_RemoteClaimsUrl) isEntity_EntityType() {} + +func (*Entity_Uuid) isEntity_EntityType() {} + func (*Entity_Claims) isEntity_EntityType() {} +func (*Entity_Custom) isEntity_EntityType() {} + func (*Entity_ClientId) isEntity_EntityType() {} // Entity type for custom entities beyond the standard types @@ -363,8 +401,7 @@ type EntityChain struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // ephemeral id for tracking between request and response - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // ephemeral id for tracking between request and response Entities []*Entity `protobuf:"bytes,2,rep,name=entities,proto3" json:"entities,omitempty"` } @@ -1192,197 +1229,199 @@ var file_authorization_authorization_proto_rawDesc = []byte{ 0x0a, 0x21, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x1a, 0x1b, 0x62, 0x75, 0x66, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, - 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, - 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, - 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, - 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x31, - 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x03, 0x6a, 0x77, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x03, 0x6a, 0x77, - 0x74, 0x22, 0x81, 0x03, 0x0a, 0x06, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x0e, 0x0a, 0x02, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x25, 0x0a, 0x0d, - 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0c, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x12, 0x1d, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x48, 0x00, 0x52, 0x06, 0x63, 0x6c, 0x61, 0x69, - 0x6d, 0x73, 0x12, 0x1d, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, - 0x64, 0x12, 0x3a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x43, 0x61, 0x74, 0x65, 0x67, - 0x6f, 0x72, 0x79, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x22, 0x54, 0x0a, - 0x08, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x41, 0x54, - 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, - 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, - 0x53, 0x55, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x41, 0x54, - 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x45, 0x4e, 0x56, 0x49, 0x52, 0x4f, 0x4e, 0x4d, 0x45, 0x4e, - 0x54, 0x10, 0x02, 0x42, 0x0d, 0x0a, 0x0b, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, - 0x08, 0x07, 0x10, 0x08, 0x52, 0x11, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x61, - 0x69, 0x6d, 0x73, 0x5f, 0x75, 0x72, 0x6c, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x52, 0x06, 0x63, - 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x22, 0x42, 0x0a, 0x0c, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, - 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x32, 0x0a, 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, - 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x09, - 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x50, 0x0a, 0x0b, 0x45, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x31, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x75, 0x74, + 0x6f, 0x6e, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, + 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x70, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x22, 0x29, 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6a, 0x77, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6a, 0x77, 0x74, 0x22, 0xc9, 0x03, 0x0a, + 0x06, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x25, 0x0a, 0x0d, 0x65, 0x6d, 0x61, 0x69, 0x6c, + 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, + 0x52, 0x0c, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1d, + 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x48, 0x00, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, + 0x11, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x5f, 0x75, + 0x72, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0f, 0x72, 0x65, 0x6d, 0x6f, + 0x74, 0x65, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x55, 0x72, 0x6c, 0x12, 0x14, 0x0a, 0x04, 0x75, + 0x75, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x75, 0x75, 0x69, + 0x64, 0x12, 0x2e, 0x0a, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x48, 0x00, 0x52, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, + 0x73, 0x12, 0x35, 0x0a, 0x06, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1b, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x48, 0x00, + 0x52, 0x06, 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x1d, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x63, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x12, 0x3a, 0x0a, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, + 0x6f, 0x72, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x2e, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x08, 0x63, 0x61, 0x74, 0x65, 0x67, + 0x6f, 0x72, 0x79, 0x22, 0x54, 0x0a, 0x08, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, + 0x18, 0x0a, 0x14, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, + 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x41, 0x54, + 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x53, 0x55, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x01, 0x12, + 0x18, 0x0a, 0x14, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x59, 0x5f, 0x45, 0x4e, 0x56, 0x49, + 0x52, 0x4f, 0x4e, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x42, 0x0d, 0x0a, 0x0b, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x42, 0x0a, 0x0c, 0x45, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x43, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x12, 0x32, 0x0a, 0x09, 0x65, 0x78, 0x74, 0x65, + 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, + 0x79, 0x52, 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x50, 0x0a, 0x0b, + 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x31, 0x0a, 0x08, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0xcf, + 0x01, 0x0a, 0x0f, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3f, 0x0a, 0x0d, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, + 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x12, 0x51, 0x0a, + 0x13, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x12, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, + 0x22, 0xce, 0x02, 0x0a, 0x10, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x34, 0x0a, + 0x16, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x65, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x72, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, + 0x73, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x44, 0x0a, 0x08, 0x64, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x22, 0x4c, 0x0a, 0x08, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, + 0x18, 0x0a, 0x14, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, + 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x45, 0x43, + 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4e, 0x59, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, + 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x54, 0x10, + 0x02, 0x22, 0x62, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4b, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, 0x66, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, + 0x12, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22, 0xfa, 0x01, + 0x0a, 0x16, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0xcf, 0x01, 0x0a, 0x0f, - 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3f, 0x0a, 0x0d, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x52, 0x0c, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x73, 0x12, 0x51, 0x0a, 0x13, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, 0xce, 0x02, - 0x0a, 0x10, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x16, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, - 0x73, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x49, 0x64, - 0x12, 0x26, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x44, 0x0a, 0x08, 0x64, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x44, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x20, - 0x0a, 0x0b, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x22, 0x4c, 0x0a, 0x08, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x14, - 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, - 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, - 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4e, 0x59, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x45, 0x43, - 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x22, 0x62, - 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4b, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1e, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x73, 0x22, 0x66, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x12, 0x64, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22, 0xfa, 0x01, 0x0a, 0x16, 0x47, - 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x3b, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x48, 0x00, 0x52, 0x05, 0x73, 0x63, 0x6f, - 0x70, 0x65, 0x88, 0x01, 0x01, 0x12, 0x45, 0x0a, 0x1c, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, - 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, - 0x61, 0x72, 0x63, 0x68, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x1a, 0x77, - 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, - 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, - 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x42, 0x1f, 0x0a, 0x1d, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, - 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, - 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x22, 0x63, 0x0a, 0x12, 0x45, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x1b, 0x0a, - 0x09, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x61, 0x74, + 0x79, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x3b, 0x0a, 0x05, 0x73, + 0x63, 0x6f, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x48, 0x00, 0x52, 0x05, + 0x73, 0x63, 0x6f, 0x70, 0x65, 0x88, 0x01, 0x01, 0x12, 0x45, 0x0a, 0x1c, 0x77, 0x69, 0x74, 0x68, + 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, + 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, + 0x52, 0x1a, 0x77, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, + 0x69, 0x76, 0x65, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x88, 0x01, 0x01, 0x42, + 0x08, 0x0a, 0x06, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x42, 0x1f, 0x0a, 0x1d, 0x5f, 0x77, 0x69, + 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, + 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x22, 0x63, 0x0a, 0x12, 0x45, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x12, 0x30, 0x0a, + 0x14, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x5f, 0x66, 0x71, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x61, 0x74, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x73, 0x22, + 0x7b, 0x0a, 0x11, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x73, 0x22, 0x7b, 0x0a, 0x11, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x12, 0x34, 0x0a, 0x16, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x74, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x14, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x73, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x14, 0x61, 0x74, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x73, 0x18, - 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x73, 0x22, 0x60, 0x0a, 0x17, 0x47, 0x65, 0x74, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x0c, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xc1, 0x01, 0x0a, 0x14, - 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2c, - 0x0a, 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, - 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x51, 0x0a, 0x13, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x12, 0x72, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x22, - 0x6e, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, - 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x50, 0x0a, - 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x10, 0x64, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, - 0x6d, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, - 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, - 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x11, 0x64, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x32, 0x9c, - 0x03, 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x75, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x44, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x44, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x3a, 0x01, 0x2a, 0x22, 0x11, 0x2f, 0x76, 0x31, - 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x8d, - 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, - 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, - 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, - 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x7d, - 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x12, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, - 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x3a, 0x01, 0x2a, 0x22, 0x10, 0x2f, 0x76, 0x31, - 0x2f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x42, 0xb2, 0x01, - 0x0a, 0x11, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x42, 0x12, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x35, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, - 0x67, 0x6f, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0xca, 0x02, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0xe2, 0x02, 0x19, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0xea, 0x02, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x73, 0x22, 0x60, 0x0a, 0x17, + 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x45, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xc1, + 0x01, 0x0a, 0x14, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, + 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x2c, 0x0a, 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x06, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, + 0x51, 0x0a, 0x13, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x61, 0x74, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x12, + 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x65, 0x73, 0x22, 0x6e, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x50, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x73, 0x22, 0x6d, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x4e, 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x11, + 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x73, 0x32, 0x9c, 0x03, 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x75, 0x0a, 0x0c, 0x47, 0x65, + 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x22, 0x2e, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, + 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, + 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x3a, 0x01, 0x2a, 0x22, 0x11, + 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x8d, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x42, 0x79, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x7d, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x47, 0x65, 0x74, 0x45, + 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x3a, 0x01, 0x2a, 0x22, 0x10, + 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x42, 0xb2, 0x01, 0x0a, 0x11, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x12, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x35, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, + 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, + 0x6f, 0x6c, 0x2f, 0x67, 0x6f, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x0d, 0x41, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0xca, 0x02, 0x0d, 0x41, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0xe2, 0x02, 0x19, 0x41, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0d, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1422,35 +1461,36 @@ var file_authorization_authorization_proto_goTypes = []interface{}{ } var file_authorization_authorization_proto_depIdxs = []int32{ 17, // 0: authorization.Entity.claims:type_name -> google.protobuf.Any - 0, // 1: authorization.Entity.category:type_name -> authorization.Entity.Category - 17, // 2: authorization.EntityCustom.extension:type_name -> google.protobuf.Any - 3, // 3: authorization.EntityChain.entities:type_name -> authorization.Entity - 18, // 4: authorization.DecisionRequest.actions:type_name -> policy.Action - 5, // 5: authorization.DecisionRequest.entity_chains:type_name -> authorization.EntityChain - 12, // 6: authorization.DecisionRequest.resource_attributes:type_name -> authorization.ResourceAttribute - 18, // 7: authorization.DecisionResponse.action:type_name -> policy.Action - 1, // 8: authorization.DecisionResponse.decision:type_name -> authorization.DecisionResponse.Decision - 6, // 9: authorization.GetDecisionsRequest.decision_requests:type_name -> authorization.DecisionRequest - 7, // 10: authorization.GetDecisionsResponse.decision_responses:type_name -> authorization.DecisionResponse - 3, // 11: authorization.GetEntitlementsRequest.entities:type_name -> authorization.Entity - 12, // 12: authorization.GetEntitlementsRequest.scope:type_name -> authorization.ResourceAttribute - 11, // 13: authorization.GetEntitlementsResponse.entitlements:type_name -> authorization.EntityEntitlements - 18, // 14: authorization.TokenDecisionRequest.actions:type_name -> policy.Action - 2, // 15: authorization.TokenDecisionRequest.tokens:type_name -> authorization.Token - 12, // 16: authorization.TokenDecisionRequest.resource_attributes:type_name -> authorization.ResourceAttribute - 14, // 17: authorization.GetDecisionsByTokenRequest.decision_requests:type_name -> authorization.TokenDecisionRequest - 7, // 18: authorization.GetDecisionsByTokenResponse.decision_responses:type_name -> authorization.DecisionResponse - 8, // 19: authorization.AuthorizationService.GetDecisions:input_type -> authorization.GetDecisionsRequest - 15, // 20: authorization.AuthorizationService.GetDecisionsByToken:input_type -> authorization.GetDecisionsByTokenRequest - 10, // 21: authorization.AuthorizationService.GetEntitlements:input_type -> authorization.GetEntitlementsRequest - 9, // 22: authorization.AuthorizationService.GetDecisions:output_type -> authorization.GetDecisionsResponse - 16, // 23: authorization.AuthorizationService.GetDecisionsByToken:output_type -> authorization.GetDecisionsByTokenResponse - 13, // 24: authorization.AuthorizationService.GetEntitlements:output_type -> authorization.GetEntitlementsResponse - 22, // [22:25] is the sub-list for method output_type - 19, // [19:22] is the sub-list for method input_type - 19, // [19:19] is the sub-list for extension type_name - 19, // [19:19] is the sub-list for extension extendee - 0, // [0:19] is the sub-list for field type_name + 4, // 1: authorization.Entity.custom:type_name -> authorization.EntityCustom + 0, // 2: authorization.Entity.category:type_name -> authorization.Entity.Category + 17, // 3: authorization.EntityCustom.extension:type_name -> google.protobuf.Any + 3, // 4: authorization.EntityChain.entities:type_name -> authorization.Entity + 18, // 5: authorization.DecisionRequest.actions:type_name -> policy.Action + 5, // 6: authorization.DecisionRequest.entity_chains:type_name -> authorization.EntityChain + 12, // 7: authorization.DecisionRequest.resource_attributes:type_name -> authorization.ResourceAttribute + 18, // 8: authorization.DecisionResponse.action:type_name -> policy.Action + 1, // 9: authorization.DecisionResponse.decision:type_name -> authorization.DecisionResponse.Decision + 6, // 10: authorization.GetDecisionsRequest.decision_requests:type_name -> authorization.DecisionRequest + 7, // 11: authorization.GetDecisionsResponse.decision_responses:type_name -> authorization.DecisionResponse + 3, // 12: authorization.GetEntitlementsRequest.entities:type_name -> authorization.Entity + 12, // 13: authorization.GetEntitlementsRequest.scope:type_name -> authorization.ResourceAttribute + 11, // 14: authorization.GetEntitlementsResponse.entitlements:type_name -> authorization.EntityEntitlements + 18, // 15: authorization.TokenDecisionRequest.actions:type_name -> policy.Action + 2, // 16: authorization.TokenDecisionRequest.tokens:type_name -> authorization.Token + 12, // 17: authorization.TokenDecisionRequest.resource_attributes:type_name -> authorization.ResourceAttribute + 14, // 18: authorization.GetDecisionsByTokenRequest.decision_requests:type_name -> authorization.TokenDecisionRequest + 7, // 19: authorization.GetDecisionsByTokenResponse.decision_responses:type_name -> authorization.DecisionResponse + 8, // 20: authorization.AuthorizationService.GetDecisions:input_type -> authorization.GetDecisionsRequest + 15, // 21: authorization.AuthorizationService.GetDecisionsByToken:input_type -> authorization.GetDecisionsByTokenRequest + 10, // 22: authorization.AuthorizationService.GetEntitlements:input_type -> authorization.GetEntitlementsRequest + 9, // 23: authorization.AuthorizationService.GetDecisions:output_type -> authorization.GetDecisionsResponse + 16, // 24: authorization.AuthorizationService.GetDecisionsByToken:output_type -> authorization.GetDecisionsByTokenResponse + 13, // 25: authorization.AuthorizationService.GetEntitlements:output_type -> authorization.GetEntitlementsResponse + 23, // [23:26] is the sub-list for method output_type + 20, // [20:23] is the sub-list for method input_type + 20, // [20:20] is the sub-list for extension type_name + 20, // [20:20] is the sub-list for extension extendee + 0, // [0:20] is the sub-list for field type_name } func init() { file_authorization_authorization_proto_init() } @@ -1643,7 +1683,10 @@ func file_authorization_authorization_proto_init() { file_authorization_authorization_proto_msgTypes[1].OneofWrappers = []interface{}{ (*Entity_EmailAddress)(nil), (*Entity_UserName)(nil), + (*Entity_RemoteClaimsUrl)(nil), + (*Entity_Uuid)(nil), (*Entity_Claims)(nil), + (*Entity_Custom)(nil), (*Entity_ClientId)(nil), } file_authorization_authorization_proto_msgTypes[8].OneofWrappers = []interface{}{} diff --git a/protocol/go/authorization/authorization_grpc.pb.go b/protocol/go/authorization/authorization_grpc.pb.go index 91e0e3ea06..ec4e9c9dce 100644 --- a/protocol/go/authorization/authorization_grpc.pb.go +++ b/protocol/go/authorization/authorization_grpc.pb.go @@ -28,11 +28,8 @@ const ( // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. type AuthorizationServiceClient interface { - // Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetDecisionMultiResource, GetDecisionBulk) GetDecisions(ctx context.Context, in *GetDecisionsRequest, opts ...grpc.CallOption) (*GetDecisionsResponse, error) - // Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetDecisionMultiResource) GetDecisionsByToken(ctx context.Context, in *GetDecisionsByTokenRequest, opts ...grpc.CallOption) (*GetDecisionsByTokenResponse, error) - // Deprecated: Use AuthorizationV2 method instead (GetEntitlements) GetEntitlements(ctx context.Context, in *GetEntitlementsRequest, opts ...grpc.CallOption) (*GetEntitlementsResponse, error) } @@ -75,11 +72,8 @@ func (c *authorizationServiceClient) GetEntitlements(ctx context.Context, in *Ge // All implementations must embed UnimplementedAuthorizationServiceServer // for forward compatibility type AuthorizationServiceServer interface { - // Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetDecisionMultiResource, GetDecisionBulk) GetDecisions(context.Context, *GetDecisionsRequest) (*GetDecisionsResponse, error) - // Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetDecisionMultiResource) GetDecisionsByToken(context.Context, *GetDecisionsByTokenRequest) (*GetDecisionsByTokenResponse, error) - // Deprecated: Use AuthorizationV2 method instead (GetEntitlements) GetEntitlements(context.Context, *GetEntitlementsRequest) (*GetEntitlementsResponse, error) mustEmbedUnimplementedAuthorizationServiceServer() } diff --git a/protocol/go/authorization/authorizationconnect/authorization.connect.go b/protocol/go/authorization/authorizationconnect/authorization.connect.go index 7797adf4d8..dd5efadb4d 100644 --- a/protocol/go/authorization/authorizationconnect/authorization.connect.go +++ b/protocol/go/authorization/authorizationconnect/authorization.connect.go @@ -54,11 +54,8 @@ var ( // AuthorizationServiceClient is a client for the authorization.AuthorizationService service. type AuthorizationServiceClient interface { - // Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetDecisionMultiResource, GetDecisionBulk) GetDecisions(context.Context, *connect.Request[authorization.GetDecisionsRequest]) (*connect.Response[authorization.GetDecisionsResponse], error) - // Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetDecisionMultiResource) GetDecisionsByToken(context.Context, *connect.Request[authorization.GetDecisionsByTokenRequest]) (*connect.Response[authorization.GetDecisionsByTokenResponse], error) - // Deprecated: Use AuthorizationV2 method instead (GetEntitlements) GetEntitlements(context.Context, *connect.Request[authorization.GetEntitlementsRequest]) (*connect.Response[authorization.GetEntitlementsResponse], error) } @@ -118,11 +115,8 @@ func (c *authorizationServiceClient) GetEntitlements(ctx context.Context, req *c // AuthorizationServiceHandler is an implementation of the authorization.AuthorizationService // service. type AuthorizationServiceHandler interface { - // Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetDecisionMultiResource, GetDecisionBulk) GetDecisions(context.Context, *connect.Request[authorization.GetDecisionsRequest]) (*connect.Response[authorization.GetDecisionsResponse], error) - // Deprecated: Use AuthorizationV2 methods instead (GetDecision, GetDecisionMultiResource) GetDecisionsByToken(context.Context, *connect.Request[authorization.GetDecisionsByTokenRequest]) (*connect.Response[authorization.GetDecisionsByTokenResponse], error) - // Deprecated: Use AuthorizationV2 method instead (GetEntitlements) GetEntitlements(context.Context, *connect.Request[authorization.GetEntitlementsRequest]) (*connect.Response[authorization.GetEntitlementsResponse], error) } diff --git a/protocol/go/authorization/v2/authorization.pb.go b/protocol/go/authorization/v2/authorization.pb.go index 13930b7a7a..1a6bee6f03 100644 --- a/protocol/go/authorization/v2/authorization.pb.go +++ b/protocol/go/authorization/v2/authorization.pb.go @@ -381,7 +381,7 @@ func (x *ResourceDecision) GetDecision() Decision { } // Can the entity (PE or NPE) access? -// 1. one entity chain +// 1. one entity reference (actor) // 2. one action // 3. one resource type GetDecisionRequest struct { @@ -498,7 +498,7 @@ func (x *GetDecisionResponse) GetDecision() *ResourceDecision { } // Can the entity (PE or NPE) access? -// 1. one entity chain +// 1. one entity reference (actor) // 2. one action // 3. multiple resources // Note: this is a more performant bulk request for multiple resource decisions @@ -624,8 +624,8 @@ func (x *GetDecisionMultiResourceResponse) GetResourceDecisions() []*ResourceDec return nil } -// Can the entities (PE or NPE) access? -// 1. Multiplexing of a Decision request +// Is access allowed? +// 1. Multiplexing of a Decision request // This is a more performant bulk request for complex decisioning (multiple entity chains or actions on // multiple resource decisions) type GetDecisionBulkRequest struct { @@ -722,7 +722,7 @@ func (x *GetDecisionBulkResponse) GetDecisionResponses() []*GetDecisionMultiReso return nil } -// What can the entity (PE or NPE, represented by the entity chain) do, broken down as permitted actions on attribute value FQNs? +// What is permitted to the EntityReference (actor), broken down as permitted actions on attribute value FQNs? // // Note: the v1 API parameter 'scope' has been dropped, and it is recommended to use // GetDecision if the resource is known diff --git a/service/authorization/v2/authorization.proto b/service/authorization/v2/authorization.proto index 1f74629aae..de9462df77 100644 --- a/service/authorization/v2/authorization.proto +++ b/service/authorization/v2/authorization.proto @@ -75,7 +75,7 @@ message ResourceDecision { } // Can the entity (PE or NPE) access? -// 1. one entity chain +// 1. one entity reference (actor) // 2. one action // 3. one resource message GetDecisionRequest { @@ -99,7 +99,7 @@ message GetDecisionResponse { } // Can the entity (PE or NPE) access? -// 1. one entity chain +// 1. one entity reference (actor) // 2. one action // 3. multiple resources // Note: this is a more performant bulk request for multiple resource decisions @@ -126,8 +126,8 @@ message GetDecisionMultiResourceResponse { repeated ResourceDecision resource_decisions = 2; } -// Can the entities (PE or NPE) access? -// 1. Multiplexing of a Decision request +// Is access allowed? +// 1. Multiplexing of a Decision request // This is a more performant bulk request for complex decisioning (multiple entity chains or actions on // multiple resource decisions) message GetDecisionBulkRequest { @@ -137,7 +137,7 @@ message GetDecisionBulkResponse { repeated GetDecisionMultiResourceResponse decision_responses = 1; } -// What can the entity (PE or NPE, represented by the entity chain) do, broken down as permitted actions on attribute value FQNs? +// What is permitted to the EntityReference (actor), broken down as permitted actions on attribute value FQNs? // // Note: the v1 API parameter 'scope' has been dropped, and it is recommended to use // GetDecision if the resource is known From 67bc23c9ca2c2de4dc90d44875b407d5e3d6edc6 Mon Sep 17 00:00:00 2001 From: jakedoublev Date: Wed, 14 May 2025 13:49:30 -0700 Subject: [PATCH 33/49] field names --- docs/grpc/index.html | 6 +- .../v2/authorization.swagger.json | 2 +- .../go/authorization/v2/authorization.pb.go | 323 +++++++++--------- service/authorization/v2/authorization.proto | 8 +- 4 files changed, 171 insertions(+), 168 deletions(-) diff --git a/docs/grpc/index.html b/docs/grpc/index.html index d3f8db9ef4..ff6755fc47 100644 --- a/docs/grpc/index.html +++ b/docs/grpc/index.html @@ -4582,7 +4582,7 @@

            GetDecisionMultiResour

            - + @@ -4651,7 +4651,7 @@

            GetDecisionRequest

            - + @@ -4716,7 +4716,7 @@

            GetEntitlementsRequest

            - + diff --git a/docs/openapi/authorization/v2/authorization.swagger.json b/docs/openapi/authorization/v2/authorization.swagger.json index 2698e98614..0916d97e3d 100644 --- a/docs/openapi/authorization/v2/authorization.swagger.json +++ b/docs/openapi/authorization/v2/authorization.swagger.json @@ -263,7 +263,7 @@ "v2GetDecisionMultiResourceRequest": { "type": "object", "properties": { - "entity": { + "entityReference": { "$ref": "#/definitions/v2EntityReference", "title": "entity must be provided" }, diff --git a/protocol/go/authorization/v2/authorization.pb.go b/protocol/go/authorization/v2/authorization.pb.go index 1a6bee6f03..e6d1d3d00c 100644 --- a/protocol/go/authorization/v2/authorization.pb.go +++ b/protocol/go/authorization/v2/authorization.pb.go @@ -81,12 +81,12 @@ type EntityReference struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Types that are assignable to Actor: + // Types that are assignable to Value: // // *EntityReference_EntityChain // *EntityReference_RegisteredResourceValueFqn // *EntityReference_Token - Actor isEntityReference_Actor `protobuf_oneof:"actor"` + Value isEntityReference_Value `protobuf_oneof:"value"` } func (x *EntityReference) Reset() { @@ -121,36 +121,36 @@ func (*EntityReference) Descriptor() ([]byte, []int) { return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{0} } -func (m *EntityReference) GetActor() isEntityReference_Actor { +func (m *EntityReference) GetValue() isEntityReference_Value { if m != nil { - return m.Actor + return m.Value } return nil } func (x *EntityReference) GetEntityChain() *entity.EntityChain { - if x, ok := x.GetActor().(*EntityReference_EntityChain); ok { + if x, ok := x.GetValue().(*EntityReference_EntityChain); ok { return x.EntityChain } return nil } func (x *EntityReference) GetRegisteredResourceValueFqn() string { - if x, ok := x.GetActor().(*EntityReference_RegisteredResourceValueFqn); ok { + if x, ok := x.GetValue().(*EntityReference_RegisteredResourceValueFqn); ok { return x.RegisteredResourceValueFqn } return "" } func (x *EntityReference) GetToken() *entity.Token { - if x, ok := x.GetActor().(*EntityReference_Token); ok { + if x, ok := x.GetValue().(*EntityReference_Token); ok { return x.Token } return nil } -type isEntityReference_Actor interface { - isEntityReference_Actor() +type isEntityReference_Value interface { + isEntityReference_Value() } type EntityReference_EntityChain struct { @@ -169,11 +169,11 @@ type EntityReference_Token struct { Token *entity.Token `protobuf:"bytes,3,opt,name=token,proto3,oneof"` } -func (*EntityReference_EntityChain) isEntityReference_Actor() {} +func (*EntityReference_EntityChain) isEntityReference_Value() {} -func (*EntityReference_RegisteredResourceValueFqn) isEntityReference_Actor() {} +func (*EntityReference_RegisteredResourceValueFqn) isEntityReference_Value() {} -func (*EntityReference_Token) isEntityReference_Actor() {} +func (*EntityReference_Token) isEntityReference_Value() {} // Entitlements for a given entity, mapping each attribute value FQN to any entitled actions[] type EntityEntitlements struct { @@ -390,7 +390,7 @@ type GetDecisionRequest struct { unknownFields protoimpl.UnknownFields // entity must be provided - Entity *EntityReference `protobuf:"bytes,1,opt,name=entity,proto3" json:"entity,omitempty"` + EntityReference *EntityReference `protobuf:"bytes,1,opt,name=entity_reference,json=entityReference,proto3" json:"entity_reference,omitempty"` // name on action is required Action *policy.Action `protobuf:"bytes,2,opt,name=action,proto3" json:"action,omitempty"` Resource *Resource `protobuf:"bytes,3,opt,name=resource,proto3" json:"resource,omitempty"` @@ -428,9 +428,9 @@ func (*GetDecisionRequest) Descriptor() ([]byte, []int) { return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{4} } -func (x *GetDecisionRequest) GetEntity() *EntityReference { +func (x *GetDecisionRequest) GetEntityReference() *EntityReference { if x != nil { - return x.Entity + return x.EntityReference } return nil } @@ -508,7 +508,7 @@ type GetDecisionMultiResourceRequest struct { unknownFields protoimpl.UnknownFields // entity must be provided - Entity *EntityReference `protobuf:"bytes,1,opt,name=entity,proto3" json:"entity,omitempty"` + EntityReference *EntityReference `protobuf:"bytes,1,opt,name=entity_reference,json=entityReference,proto3" json:"entity_reference,omitempty"` // name on action is required Action *policy.Action `protobuf:"bytes,2,opt,name=action,proto3" json:"action,omitempty"` Resources []*Resource `protobuf:"bytes,3,rep,name=resources,proto3" json:"resources,omitempty"` @@ -546,9 +546,9 @@ func (*GetDecisionMultiResourceRequest) Descriptor() ([]byte, []int) { return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{6} } -func (x *GetDecisionMultiResourceRequest) GetEntity() *EntityReference { +func (x *GetDecisionMultiResourceRequest) GetEntityReference() *EntityReference { if x != nil { - return x.Entity + return x.EntityReference } return nil } @@ -732,7 +732,7 @@ type GetEntitlementsRequest struct { unknownFields protoimpl.UnknownFields // entity must be provided - Entity *EntityReference `protobuf:"bytes,1,opt,name=entity,proto3" json:"entity,omitempty"` + EntityReference *EntityReference `protobuf:"bytes,1,opt,name=entity_reference,json=entityReference,proto3" json:"entity_reference,omitempty"` // optional parameter to return all entitled values for attribute definitions with hierarchy rules, propagating // down the hierarchical values instead of returning solely the value that is directly entitled WithComprehensiveHierarchy *bool `protobuf:"varint,2,opt,name=with_comprehensive_hierarchy,json=withComprehensiveHierarchy,proto3,oneof" json:"with_comprehensive_hierarchy,omitempty"` @@ -770,9 +770,9 @@ func (*GetEntitlementsRequest) Descriptor() ([]byte, []int) { return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{10} } -func (x *GetEntitlementsRequest) GetEntity() *EntityReference { +func (x *GetEntitlementsRequest) GetEntityReference() *EntityReference { if x != nil { - return x.Entity + return x.EntityReference } return nil } @@ -962,7 +962,7 @@ var file_authorization_v2_authorization_proto_rawDesc = []byte{ 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x24, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6a, 0x77, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6a, 0x77, 0x74, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x29, 0x20, 0x3e, 0x20, 0x30, 0x48, 0x00, 0x52, 0x05, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x0e, 0x0a, 0x05, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x05, 0xba, + 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x0e, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x05, 0xba, 0x48, 0x02, 0x08, 0x01, 0x22, 0x81, 0x03, 0x0a, 0x12, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, @@ -1011,146 +1011,149 @@ var file_authorization_v2_authorization_proto_rawDesc = []byte{ 0x64, 0x12, 0x36, 0x0a, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xae, 0x02, 0x0a, 0x12, 0x47, 0x65, + 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xc1, 0x02, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x41, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x21, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x12, 0x2e, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x3a, 0x65, 0xba, 0x48, 0x62, 0x1a, 0x60, 0x0a, 0x29, 0x67, 0x65, 0x74, 0x5f, - 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x72, 0x65, 0x71, - 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x1c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, - 0x6d, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x64, 0x1a, 0x15, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x22, 0x55, 0x0a, 0x13, 0x47, 0x65, - 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x3e, 0x0a, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x22, 0xc8, 0x02, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, - 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, - 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x2e, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, - 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, - 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x92, - 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x3a, - 0x6b, 0xba, 0x48, 0x68, 0x1a, 0x66, 0x0a, 0x2f, 0x67, 0x65, 0x74, 0x5f, 0x64, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x72, - 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x1c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x15, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x22, 0xb6, 0x01, 0x0a, - 0x20, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, - 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, - 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, - 0x65, 0x64, 0x12, 0x51, 0x0a, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x64, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, - 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x78, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x5e, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, - 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x10, 0x64, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, - 0x7c, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, - 0x6c, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, 0x12, 0x64, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22, 0xc3, 0x01, - 0x0a, 0x16, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x12, 0x54, 0x0a, 0x10, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x42, 0x06, 0xba, + 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x0f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, + 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x2e, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x08, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3a, 0x65, 0xba, 0x48, 0x62, 0x1a, 0x60, 0x0a, 0x29, 0x67, + 0x65, 0x74, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, + 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x1c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x15, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x22, 0x55, 0x0a, + 0x13, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xdb, 0x02, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x54, 0x0a, 0x10, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, + 0x72, 0x65, 0x6e, 0x63, 0x65, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x0f, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x2e, + 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, + 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x06, + 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, + 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x0b, 0xba, + 0x48, 0x08, 0xc8, 0x01, 0x01, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x73, 0x3a, 0x6b, 0xba, 0x48, 0x68, 0x1a, 0x66, 0x0a, 0x2f, 0x67, 0x65, + 0x74, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, + 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x1c, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, + 0x62, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x15, 0x68, 0x61, 0x73, + 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, + 0x65, 0x29, 0x22, 0xb6, 0x01, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x5f, 0x70, + 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x50, + 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x12, 0x51, 0x0a, 0x12, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x78, 0x0a, 0x16, 0x47, + 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5e, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x31, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, + 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, 0x7c, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x61, 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x73, 0x22, 0xd6, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x54, + 0x0a, 0x10, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x42, 0x06, 0xba, 0x48, 0x03, - 0xc8, 0x01, 0x01, 0x52, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x45, 0x0a, 0x1c, 0x77, - 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, - 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x08, 0x48, 0x00, 0x52, 0x1a, 0x77, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, - 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x88, - 0x01, 0x01, 0x42, 0x1f, 0x0a, 0x1d, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, - 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, - 0x63, 0x68, 0x79, 0x22, 0x63, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, - 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, - 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2a, 0x4c, 0x0a, 0x08, 0x44, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x14, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, - 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x11, - 0x0a, 0x0d, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4e, 0x59, 0x10, - 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x45, - 0x52, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x32, 0xce, 0x03, 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, - 0x5c, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, - 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x83, 0x01, - 0x0a, 0x18, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, - 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x31, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, - 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, + 0xc8, 0x01, 0x01, 0x52, 0x0f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x12, 0x45, 0x0a, 0x1c, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, + 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, + 0x72, 0x63, 0x68, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x1a, 0x77, 0x69, + 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x48, + 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x88, 0x01, 0x01, 0x42, 0x1f, 0x0a, 0x1d, 0x5f, + 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, + 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x22, 0x63, 0x0a, 0x17, + 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, - 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x12, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, - 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, - 0x0f, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x12, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, - 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xd5, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, + 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x2a, 0x4c, 0x0a, 0x08, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, + 0x14, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, + 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x45, 0x43, 0x49, 0x53, + 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4e, 0x59, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x45, + 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x32, + 0xce, 0x03, 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5c, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x44, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x42, 0x12, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x48, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, 0x6f, 0x2f, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, - 0x3b, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x32, - 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x1c, 0x41, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0x5c, - 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x41, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x32, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x83, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x44, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x12, 0x31, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x0f, + 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x12, + 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, + 0x6c, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, + 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, + 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, + 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, + 0x42, 0xd5, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x42, 0x12, 0x41, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, + 0x48, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, + 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, 0x6f, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x3b, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x32, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, + 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x56, 0x32, 0xca, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x1c, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1195,18 +1198,18 @@ var file_authorization_v2_authorization_proto_depIdxs = []int32{ 14, // 2: authorization.v2.EntityEntitlements.actions_per_attribute_value_fqn:type_name -> authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry 15, // 3: authorization.v2.Resource.attribute_values:type_name -> authorization.v2.Resource.AttributeValues 0, // 4: authorization.v2.ResourceDecision.decision:type_name -> authorization.v2.Decision - 1, // 5: authorization.v2.GetDecisionRequest.entity:type_name -> authorization.v2.EntityReference + 1, // 5: authorization.v2.GetDecisionRequest.entity_reference:type_name -> authorization.v2.EntityReference 18, // 6: authorization.v2.GetDecisionRequest.action:type_name -> policy.Action 3, // 7: authorization.v2.GetDecisionRequest.resource:type_name -> authorization.v2.Resource 4, // 8: authorization.v2.GetDecisionResponse.decision:type_name -> authorization.v2.ResourceDecision - 1, // 9: authorization.v2.GetDecisionMultiResourceRequest.entity:type_name -> authorization.v2.EntityReference + 1, // 9: authorization.v2.GetDecisionMultiResourceRequest.entity_reference:type_name -> authorization.v2.EntityReference 18, // 10: authorization.v2.GetDecisionMultiResourceRequest.action:type_name -> policy.Action 3, // 11: authorization.v2.GetDecisionMultiResourceRequest.resources:type_name -> authorization.v2.Resource 19, // 12: authorization.v2.GetDecisionMultiResourceResponse.all_permitted:type_name -> google.protobuf.BoolValue 4, // 13: authorization.v2.GetDecisionMultiResourceResponse.resource_decisions:type_name -> authorization.v2.ResourceDecision 7, // 14: authorization.v2.GetDecisionBulkRequest.decision_requests:type_name -> authorization.v2.GetDecisionMultiResourceRequest 8, // 15: authorization.v2.GetDecisionBulkResponse.decision_responses:type_name -> authorization.v2.GetDecisionMultiResourceResponse - 1, // 16: authorization.v2.GetEntitlementsRequest.entity:type_name -> authorization.v2.EntityReference + 1, // 16: authorization.v2.GetEntitlementsRequest.entity_reference:type_name -> authorization.v2.EntityReference 2, // 17: authorization.v2.GetEntitlementsResponse.entitlements:type_name -> authorization.v2.EntityEntitlements 18, // 18: authorization.v2.EntityEntitlements.ActionsList.actions:type_name -> policy.Action 13, // 19: authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry.value:type_name -> authorization.v2.EntityEntitlements.ActionsList diff --git a/service/authorization/v2/authorization.proto b/service/authorization/v2/authorization.proto index de9462df77..98733447be 100644 --- a/service/authorization/v2/authorization.proto +++ b/service/authorization/v2/authorization.proto @@ -18,7 +18,7 @@ enum Decision { // The abstraction houses the distinct entity types, PE and/or NPE combinations, or a registered // resource value being treated as an entity in entitlement/authorization decisioning. message EntityReference { - oneof actor { + oneof value { option (buf.validate.oneof).required = true; // chain of one or more entities @@ -80,7 +80,7 @@ message ResourceDecision { // 3. one resource message GetDecisionRequest { // entity must be provided - EntityReference entity = 1 [(buf.validate.field).required = true]; + EntityReference entity_reference = 1 [(buf.validate.field).required = true]; // name on action is required policy.Action action = 2 [(buf.validate.field).required = true]; Resource resource = 3 [(buf.validate.field).required = true]; @@ -105,7 +105,7 @@ message GetDecisionResponse { // Note: this is a more performant bulk request for multiple resource decisions message GetDecisionMultiResourceRequest { // entity must be provided - EntityReference entity = 1 [(buf.validate.field).required = true]; + EntityReference entity_reference = 1 [(buf.validate.field).required = true]; // name on action is required policy.Action action = 2 [(buf.validate.field).required = true]; repeated Resource resources = 3 [ @@ -143,7 +143,7 @@ message GetDecisionBulkResponse { // GetDecision if the resource is known message GetEntitlementsRequest { // entity must be provided - EntityReference entity = 1 [(buf.validate.field).required = true]; + EntityReference entity_reference = 1 [(buf.validate.field).required = true]; // optional parameter to return all entitled values for attribute definitions with hierarchy rules, propagating // down the hierarchical values instead of returning solely the value that is directly entitled optional bool with_comprehensive_hierarchy = 2; From 1782f1816dfd7d54025854f2a7da1134a791b0ec Mon Sep 17 00:00:00 2001 From: jakedoublev Date: Wed, 14 May 2025 14:54:05 -0700 Subject: [PATCH 34/49] entity identifier proto name --- docs/grpc/index.html | 16 +- .../v2/authorization.swagger.json | 6 +- .../go/authorization/v2/authorization.pb.go | 517 +++++++++--------- service/authorization/v2/authorization.proto | 20 +- 4 files changed, 280 insertions(+), 279 deletions(-) diff --git a/docs/grpc/index.html b/docs/grpc/index.html index ff6755fc47..a6508a3ad7 100644 --- a/docs/grpc/index.html +++ b/docs/grpc/index.html @@ -483,7 +483,7 @@

            Table of Contents

          • - MEntityReference + MEntityIdentifier
          • @@ -4484,8 +4484,8 @@

            En -

            EntityReference

            -

            The EntityReference is the actor in an entitlement or decision request - the PE, NPE, or PE+NPE being authorized.

            The abstraction houses the distinct entity types, PE and/or NPE combinations, or a registered

            resource value being treated as an entity in entitlement/authorization decisioning.

            +

            EntityIdentifier

            +

            The EntityIdentifier specifies the actor in an entitlement or decision request - the PE, NPE, or PE+NPE being authorized.

            The abstraction houses the distinct entity types, PE and/or NPE combinations, or a registered resource value

            being treated as an entity in entitlement/authorization decisioning.

          • entityentity_reference EntityReference

            entity must be provided

            entityentity_reference EntityReference

            entity must be provided

            entityentity_reference EntityReference

            entity must be provided

            @@ -4524,7 +4524,7 @@

            EntityReference

            GetDecisionBulkRequest

            -

            Is access allowed?

            1. Multiplexing of a Decision request

            This is a more performant bulk request for complex decisioning (multiple entity chains or actions on

            multiple resource decisions)

            +

            Is access allowed?

            1. Multiplexing of a Decision request

            This is a more performant bulk request for complex decisioning (multiple entity chains or actions on

            multiple resource decisions)

            @@ -4583,7 +4583,7 @@

            GetDecisionMultiResour

            - + @@ -4652,7 +4652,7 @@

            GetDecisionRequest

            - + @@ -4706,7 +4706,7 @@

            GetDecisionResponse

            GetEntitlementsRequest

            -

            What is permitted to the EntityReference (actor), broken down as permitted actions on attribute value FQNs?

            Note: the v1 API parameter 'scope' has been dropped, and it is recommended to use

            GetDecision if the resource is known

            +

            What is permitted to the EntityIdentifier (actor), broken down as permitted actions on attribute value FQNs?

            Note: the v1 API parameter 'scope' has been dropped, and it is recommended to use

            GetDecision if the resource is known

            entity_referenceEntityReferenceEntityIdentifier

            entity must be provided

            entity_referenceEntityReferenceEntityIdentifier

            entity must be provided

            @@ -4717,7 +4717,7 @@

            GetEntitlementsRequest

            - + diff --git a/docs/openapi/authorization/v2/authorization.swagger.json b/docs/openapi/authorization/v2/authorization.swagger.json index 0916d97e3d..f7efe4f7d6 100644 --- a/docs/openapi/authorization/v2/authorization.swagger.json +++ b/docs/openapi/authorization/v2/authorization.swagger.json @@ -230,7 +230,7 @@ } } }, - "v2EntityReference": { + "v2EntityIdentifier": { "type": "object", "properties": { "entityChain": { @@ -246,7 +246,7 @@ "title": "access token (JWT), which is used to create an entity chain (comprising one or more entities)" } }, - "description": "The EntityReference is the actor in an entitlement or decision request - the PE, NPE, or PE+NPE being authorized.\nThe abstraction houses the distinct entity types, PE and/or NPE combinations, or a registered\nresource value being treated as an entity in entitlement/authorization decisioning." + "description": "The EntityIdentifier specifies the actor in an entitlement or decision request - the PE, NPE, or PE+NPE being authorized.\nThe abstraction houses the distinct entity types, PE and/or NPE combinations, or a registered resource value\nbeing treated as an entity in entitlement/authorization decisioning." }, "v2GetDecisionBulkResponse": { "type": "object", @@ -264,7 +264,7 @@ "type": "object", "properties": { "entityReference": { - "$ref": "#/definitions/v2EntityReference", + "$ref": "#/definitions/v2EntityIdentifier", "title": "entity must be provided" }, "action": { diff --git a/protocol/go/authorization/v2/authorization.pb.go b/protocol/go/authorization/v2/authorization.pb.go index e6d1d3d00c..bf2d4833df 100644 --- a/protocol/go/authorization/v2/authorization.pb.go +++ b/protocol/go/authorization/v2/authorization.pb.go @@ -73,24 +73,24 @@ func (Decision) EnumDescriptor() ([]byte, []int) { return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{0} } -// The EntityReference is the actor in an entitlement or decision request - the PE, NPE, or PE+NPE being authorized. -// The abstraction houses the distinct entity types, PE and/or NPE combinations, or a registered -// resource value being treated as an entity in entitlement/authorization decisioning. -type EntityReference struct { +// The EntityIdentifier specifies the actor in an entitlement or decision request - the PE, NPE, or PE+NPE being authorized. +// The abstraction houses the distinct entity types, PE and/or NPE combinations, or a registered resource value +// being treated as an entity in entitlement/authorization decisioning. +type EntityIdentifier struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Types that are assignable to Value: + // Types that are assignable to Identifier: // - // *EntityReference_EntityChain - // *EntityReference_RegisteredResourceValueFqn - // *EntityReference_Token - Value isEntityReference_Value `protobuf_oneof:"value"` + // *EntityIdentifier_EntityChain + // *EntityIdentifier_RegisteredResourceValueFqn + // *EntityIdentifier_Token + Identifier isEntityIdentifier_Identifier `protobuf_oneof:"identifier"` } -func (x *EntityReference) Reset() { - *x = EntityReference{} +func (x *EntityIdentifier) Reset() { + *x = EntityIdentifier{} if protoimpl.UnsafeEnabled { mi := &file_authorization_v2_authorization_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -98,13 +98,13 @@ func (x *EntityReference) Reset() { } } -func (x *EntityReference) String() string { +func (x *EntityIdentifier) String() string { return protoimpl.X.MessageStringOf(x) } -func (*EntityReference) ProtoMessage() {} +func (*EntityIdentifier) ProtoMessage() {} -func (x *EntityReference) ProtoReflect() protoreflect.Message { +func (x *EntityIdentifier) ProtoReflect() protoreflect.Message { mi := &file_authorization_v2_authorization_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -116,64 +116,64 @@ func (x *EntityReference) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use EntityReference.ProtoReflect.Descriptor instead. -func (*EntityReference) Descriptor() ([]byte, []int) { +// Deprecated: Use EntityIdentifier.ProtoReflect.Descriptor instead. +func (*EntityIdentifier) Descriptor() ([]byte, []int) { return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{0} } -func (m *EntityReference) GetValue() isEntityReference_Value { +func (m *EntityIdentifier) GetIdentifier() isEntityIdentifier_Identifier { if m != nil { - return m.Value + return m.Identifier } return nil } -func (x *EntityReference) GetEntityChain() *entity.EntityChain { - if x, ok := x.GetValue().(*EntityReference_EntityChain); ok { +func (x *EntityIdentifier) GetEntityChain() *entity.EntityChain { + if x, ok := x.GetIdentifier().(*EntityIdentifier_EntityChain); ok { return x.EntityChain } return nil } -func (x *EntityReference) GetRegisteredResourceValueFqn() string { - if x, ok := x.GetValue().(*EntityReference_RegisteredResourceValueFqn); ok { +func (x *EntityIdentifier) GetRegisteredResourceValueFqn() string { + if x, ok := x.GetIdentifier().(*EntityIdentifier_RegisteredResourceValueFqn); ok { return x.RegisteredResourceValueFqn } return "" } -func (x *EntityReference) GetToken() *entity.Token { - if x, ok := x.GetValue().(*EntityReference_Token); ok { +func (x *EntityIdentifier) GetToken() *entity.Token { + if x, ok := x.GetIdentifier().(*EntityIdentifier_Token); ok { return x.Token } return nil } -type isEntityReference_Value interface { - isEntityReference_Value() +type isEntityIdentifier_Identifier interface { + isEntityIdentifier_Identifier() } -type EntityReference_EntityChain struct { +type EntityIdentifier_EntityChain struct { // chain of one or more entities EntityChain *entity.EntityChain `protobuf:"bytes,1,opt,name=entity_chain,json=entityChain,proto3,oneof"` } -type EntityReference_RegisteredResourceValueFqn struct { +type EntityIdentifier_RegisteredResourceValueFqn struct { // fully qualified name of the registered resource value stored in platform policy, where in // this case the resource acts as and represents a single entity for authorization/entitlement decisioning RegisteredResourceValueFqn string `protobuf:"bytes,2,opt,name=registered_resource_value_fqn,json=registeredResourceValueFqn,proto3,oneof"` } -type EntityReference_Token struct { +type EntityIdentifier_Token struct { // access token (JWT), which is used to create an entity chain (comprising one or more entities) Token *entity.Token `protobuf:"bytes,3,opt,name=token,proto3,oneof"` } -func (*EntityReference_EntityChain) isEntityReference_Value() {} +func (*EntityIdentifier_EntityChain) isEntityIdentifier_Identifier() {} -func (*EntityReference_RegisteredResourceValueFqn) isEntityReference_Value() {} +func (*EntityIdentifier_RegisteredResourceValueFqn) isEntityIdentifier_Identifier() {} -func (*EntityReference_Token) isEntityReference_Value() {} +func (*EntityIdentifier_Token) isEntityIdentifier_Identifier() {} // Entitlements for a given entity, mapping each attribute value FQN to any entitled actions[] type EntityEntitlements struct { @@ -390,7 +390,7 @@ type GetDecisionRequest struct { unknownFields protoimpl.UnknownFields // entity must be provided - EntityReference *EntityReference `protobuf:"bytes,1,opt,name=entity_reference,json=entityReference,proto3" json:"entity_reference,omitempty"` + EntityReference *EntityIdentifier `protobuf:"bytes,1,opt,name=entity_reference,json=entityReference,proto3" json:"entity_reference,omitempty"` // name on action is required Action *policy.Action `protobuf:"bytes,2,opt,name=action,proto3" json:"action,omitempty"` Resource *Resource `protobuf:"bytes,3,opt,name=resource,proto3" json:"resource,omitempty"` @@ -428,7 +428,7 @@ func (*GetDecisionRequest) Descriptor() ([]byte, []int) { return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{4} } -func (x *GetDecisionRequest) GetEntityReference() *EntityReference { +func (x *GetDecisionRequest) GetEntityReference() *EntityIdentifier { if x != nil { return x.EntityReference } @@ -508,7 +508,7 @@ type GetDecisionMultiResourceRequest struct { unknownFields protoimpl.UnknownFields // entity must be provided - EntityReference *EntityReference `protobuf:"bytes,1,opt,name=entity_reference,json=entityReference,proto3" json:"entity_reference,omitempty"` + EntityReference *EntityIdentifier `protobuf:"bytes,1,opt,name=entity_reference,json=entityReference,proto3" json:"entity_reference,omitempty"` // name on action is required Action *policy.Action `protobuf:"bytes,2,opt,name=action,proto3" json:"action,omitempty"` Resources []*Resource `protobuf:"bytes,3,rep,name=resources,proto3" json:"resources,omitempty"` @@ -546,7 +546,7 @@ func (*GetDecisionMultiResourceRequest) Descriptor() ([]byte, []int) { return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{6} } -func (x *GetDecisionMultiResourceRequest) GetEntityReference() *EntityReference { +func (x *GetDecisionMultiResourceRequest) GetEntityReference() *EntityIdentifier { if x != nil { return x.EntityReference } @@ -625,7 +625,7 @@ func (x *GetDecisionMultiResourceResponse) GetResourceDecisions() []*ResourceDec } // Is access allowed? -// 1. Multiplexing of a Decision request +// 1. Multiplexing of a Decision request // This is a more performant bulk request for complex decisioning (multiple entity chains or actions on // multiple resource decisions) type GetDecisionBulkRequest struct { @@ -722,7 +722,7 @@ func (x *GetDecisionBulkResponse) GetDecisionResponses() []*GetDecisionMultiReso return nil } -// What is permitted to the EntityReference (actor), broken down as permitted actions on attribute value FQNs? +// What is permitted to the EntityIdentifier (actor), broken down as permitted actions on attribute value FQNs? // // Note: the v1 API parameter 'scope' has been dropped, and it is recommended to use // GetDecision if the resource is known @@ -732,7 +732,7 @@ type GetEntitlementsRequest struct { unknownFields protoimpl.UnknownFields // entity must be provided - EntityReference *EntityReference `protobuf:"bytes,1,opt,name=entity_reference,json=entityReference,proto3" json:"entity_reference,omitempty"` + EntityReference *EntityIdentifier `protobuf:"bytes,1,opt,name=entity_reference,json=entityReference,proto3" json:"entity_reference,omitempty"` // optional parameter to return all entitled values for attribute definitions with hierarchy rules, propagating // down the hierarchical values instead of returning solely the value that is directly entitled WithComprehensiveHierarchy *bool `protobuf:"varint,2,opt,name=with_comprehensive_hierarchy,json=withComprehensiveHierarchy,proto3,oneof" json:"with_comprehensive_hierarchy,omitempty"` @@ -770,7 +770,7 @@ func (*GetEntitlementsRequest) Descriptor() ([]byte, []int) { return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{10} } -func (x *GetEntitlementsRequest) GetEntityReference() *EntityReference { +func (x *GetEntitlementsRequest) GetEntityReference() *EntityIdentifier { if x != nil { return x.EntityReference } @@ -938,222 +938,223 @@ var file_authorization_v2_authorization_proto_rawDesc = []byte{ 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x22, 0x91, 0x03, 0x0a, 0x0f, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x12, 0xa2, 0x01, 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, - 0x42, 0x68, 0xba, 0x48, 0x65, 0xba, 0x01, 0x62, 0x0a, 0x15, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, - 0x19, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, - 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x2e, 0x68, 0x61, 0x73, 0x28, - 0x74, 0x68, 0x69, 0x73, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x29, 0x20, 0x26, - 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, - 0x73, 0x69, 0x7a, 0x65, 0x28, 0x29, 0x20, 0x3e, 0x20, 0x30, 0x48, 0x00, 0x52, 0x0b, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x4c, 0x0a, 0x1d, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x48, 0x00, 0x52, 0x1a, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x12, 0x7b, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, - 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x54, 0xba, 0x48, 0x51, 0xba, 0x01, 0x4e, 0x0a, 0x0e, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x16, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x24, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, - 0x6a, 0x77, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6a, 0x77, 0x74, - 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x29, 0x20, 0x3e, 0x20, 0x30, 0x48, 0x00, 0x52, 0x05, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x0e, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x05, 0xba, - 0x48, 0x02, 0x08, 0x01, 0x22, 0x81, 0x03, 0x0a, 0x12, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, - 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x65, - 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x8b, - 0x01, 0x0a, 0x1f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x61, - 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, - 0x71, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x41, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, - 0x1b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x1a, 0x37, 0x0a, 0x0b, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x07, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x80, 0x01, 0x0a, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x46, 0x71, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x46, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, + 0x22, 0x97, 0x03, 0x0a, 0x10, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0xa2, 0x01, 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, + 0x6e, 0x42, 0x68, 0xba, 0x48, 0x65, 0xba, 0x01, 0x62, 0x0a, 0x15, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, + 0x12, 0x19, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, + 0x62, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x2e, 0x68, 0x61, 0x73, + 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x29, 0x20, + 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, + 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x29, 0x20, 0x3e, 0x20, 0x30, 0x48, 0x00, 0x52, 0x0b, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x4c, 0x0a, 0x1d, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x48, 0x00, 0x52, 0x1a, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x12, 0x7b, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x54, 0xba, 0x48, 0x51, 0xba, 0x01, 0x4e, 0x0a, 0x0e, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x16, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x24, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x6a, 0x77, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6a, 0x77, + 0x74, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x29, 0x20, 0x3e, 0x20, 0x30, 0x48, 0x00, 0x52, 0x05, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x13, 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, + 0x69, 0x65, 0x72, 0x12, 0x05, 0xba, 0x48, 0x02, 0x08, 0x01, 0x22, 0x81, 0x03, 0x0a, 0x12, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xfe, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, - 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, - 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x57, 0x0a, 0x10, 0x61, 0x74, 0x74, 0x72, - 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x41, - 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x48, 0x00, - 0x52, 0x0f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x73, 0x12, 0x43, 0x0a, 0x1d, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x5f, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, - 0x71, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x1a, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x1a, 0x25, 0x0a, 0x0f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x6e, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x66, 0x71, 0x6e, 0x73, 0x42, 0x0a, 0x0a, - 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, 0x7e, 0x0a, 0x10, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x0a, - 0x15, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x65, 0x70, - 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, - 0x64, 0x12, 0x36, 0x0a, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xc1, 0x02, 0x0a, 0x12, 0x47, 0x65, - 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x54, 0x0a, 0x10, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x42, 0x06, 0xba, + 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, + 0x61, 0x6c, 0x49, 0x64, 0x12, 0x8b, 0x01, 0x0a, 0x1f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, + 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, + 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x1b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, + 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, + 0x71, 0x6e, 0x1a, 0x37, 0x0a, 0x0b, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, + 0x74, 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x80, 0x01, 0x0a, 0x20, + 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, + 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x46, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x30, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xfe, + 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x65, + 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x57, + 0x0a, 0x10, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x73, 0x48, 0x00, 0x52, 0x0f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x43, 0x0a, 0x1d, 0x72, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, + 0x52, 0x1a, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x1a, 0x25, 0x0a, 0x0f, + 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, + 0x12, 0x0a, 0x04, 0x66, 0x71, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x66, + 0x71, 0x6e, 0x73, 0x42, 0x0a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, + 0x7e, 0x0a, 0x10, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x0a, 0x15, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, + 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x13, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, + 0xc2, 0x02, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x55, 0x0a, 0x10, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x0f, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x2e, 0x0a, + 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, + 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x06, 0xba, + 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x0a, + 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x06, 0xba, 0x48, 0x03, + 0xc8, 0x01, 0x01, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3a, 0x65, 0xba, + 0x48, 0x62, 0x1a, 0x60, 0x0a, 0x29, 0x67, 0x65, 0x74, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, + 0x1c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75, 0x73, + 0x74, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x15, 0x68, + 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, + 0x61, 0x6d, 0x65, 0x29, 0x22, 0x55, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x08, 0x64, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, + 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, + 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xdc, 0x02, 0x0a, 0x1f, + 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x55, 0x0a, 0x10, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, + 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x0f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x2e, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x08, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3a, 0x65, 0xba, 0x48, 0x62, 0x1a, 0x60, 0x0a, 0x29, 0x67, - 0x65, 0x74, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, - 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x1c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x15, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, - 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x22, 0x55, 0x0a, - 0x13, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xdb, 0x02, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x54, 0x0a, 0x10, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x63, 0x65, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x0f, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x2e, - 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, - 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x06, - 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, - 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x0b, 0xba, - 0x48, 0x08, 0xc8, 0x01, 0x01, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x3a, 0x6b, 0xba, 0x48, 0x68, 0x1a, 0x66, 0x0a, 0x2f, 0x67, 0x65, - 0x74, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, - 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x1c, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, - 0x62, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x15, 0x68, 0x61, 0x73, - 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, - 0x65, 0x29, 0x22, 0xb6, 0x01, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x5f, 0x70, - 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x50, - 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x12, 0x51, 0x0a, 0x12, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x78, 0x0a, 0x16, 0x47, - 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5e, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x31, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, - 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, 0x7c, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x61, 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x61, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x92, 0x01, 0x02, + 0x08, 0x01, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x3a, 0x6b, 0xba, + 0x48, 0x68, 0x1a, 0x66, 0x0a, 0x2f, 0x67, 0x65, 0x74, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x72, 0x65, 0x71, + 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x1c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, + 0x6d, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x64, 0x1a, 0x15, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x22, 0xb6, 0x01, 0x0a, 0x20, 0x47, + 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x3f, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, + 0x12, 0x51, 0x0a, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, - 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x73, 0x22, 0xd6, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, - 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x54, - 0x0a, 0x10, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x42, 0x06, 0xba, 0x48, 0x03, - 0xc8, 0x01, 0x01, 0x52, 0x0f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x12, 0x45, 0x0a, 0x1c, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, - 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, - 0x72, 0x63, 0x68, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x1a, 0x77, 0x69, - 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x48, - 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x88, 0x01, 0x01, 0x42, 0x1f, 0x0a, 0x1d, 0x5f, - 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, - 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x22, 0x63, 0x0a, 0x17, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x52, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x22, 0x78, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5e, 0x0a, + 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x10, 0x64, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, 0x7c, 0x0a, + 0x17, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22, 0xd7, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x2a, 0x4c, 0x0a, 0x08, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, - 0x14, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, - 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x45, 0x43, 0x49, 0x53, - 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4e, 0x59, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x45, - 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x32, - 0xce, 0x03, 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5c, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x44, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x83, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x44, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x12, 0x31, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x55, 0x0a, 0x10, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x0f, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x45, 0x0a, + 0x1c, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, + 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x1a, 0x77, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x72, + 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, + 0x79, 0x88, 0x01, 0x01, 0x42, 0x1f, 0x0a, 0x1d, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, + 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, + 0x61, 0x72, 0x63, 0x68, 0x79, 0x22, 0x63, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, + 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x48, 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x0c, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2a, 0x4c, 0x0a, 0x08, 0x44, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x14, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, + 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, + 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4e, + 0x59, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, + 0x50, 0x45, 0x52, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x32, 0xce, 0x03, 0x0a, 0x14, 0x41, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x12, 0x5c, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x12, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x0f, - 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x12, - 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, - 0x6c, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, - 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, - 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x42, 0xd5, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x42, 0x12, 0x41, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, - 0x48, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, - 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, 0x6f, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x3b, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x32, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, - 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x56, 0x32, 0xca, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x1c, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x83, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, + 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x31, 0x2e, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x32, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, + 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x12, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, + 0x68, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x12, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xd5, 0x01, 0x0a, 0x14, 0x63, 0x6f, + 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x42, 0x12, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x48, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, + 0x6f, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, + 0x76, 0x32, 0x3b, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x76, 0x32, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x10, 0x41, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0xe2, 0x02, + 0x1c, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, + 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, + 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, + 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1172,7 +1173,7 @@ var file_authorization_v2_authorization_proto_enumTypes = make([]protoimpl.EnumI var file_authorization_v2_authorization_proto_msgTypes = make([]protoimpl.MessageInfo, 15) var file_authorization_v2_authorization_proto_goTypes = []interface{}{ (Decision)(0), // 0: authorization.v2.Decision - (*EntityReference)(nil), // 1: authorization.v2.EntityReference + (*EntityIdentifier)(nil), // 1: authorization.v2.EntityIdentifier (*EntityEntitlements)(nil), // 2: authorization.v2.EntityEntitlements (*Resource)(nil), // 3: authorization.v2.Resource (*ResourceDecision)(nil), // 4: authorization.v2.ResourceDecision @@ -1193,23 +1194,23 @@ var file_authorization_v2_authorization_proto_goTypes = []interface{}{ (*wrapperspb.BoolValue)(nil), // 19: google.protobuf.BoolValue } var file_authorization_v2_authorization_proto_depIdxs = []int32{ - 16, // 0: authorization.v2.EntityReference.entity_chain:type_name -> entity.EntityChain - 17, // 1: authorization.v2.EntityReference.token:type_name -> entity.Token + 16, // 0: authorization.v2.EntityIdentifier.entity_chain:type_name -> entity.EntityChain + 17, // 1: authorization.v2.EntityIdentifier.token:type_name -> entity.Token 14, // 2: authorization.v2.EntityEntitlements.actions_per_attribute_value_fqn:type_name -> authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry 15, // 3: authorization.v2.Resource.attribute_values:type_name -> authorization.v2.Resource.AttributeValues 0, // 4: authorization.v2.ResourceDecision.decision:type_name -> authorization.v2.Decision - 1, // 5: authorization.v2.GetDecisionRequest.entity_reference:type_name -> authorization.v2.EntityReference + 1, // 5: authorization.v2.GetDecisionRequest.entity_reference:type_name -> authorization.v2.EntityIdentifier 18, // 6: authorization.v2.GetDecisionRequest.action:type_name -> policy.Action 3, // 7: authorization.v2.GetDecisionRequest.resource:type_name -> authorization.v2.Resource 4, // 8: authorization.v2.GetDecisionResponse.decision:type_name -> authorization.v2.ResourceDecision - 1, // 9: authorization.v2.GetDecisionMultiResourceRequest.entity_reference:type_name -> authorization.v2.EntityReference + 1, // 9: authorization.v2.GetDecisionMultiResourceRequest.entity_reference:type_name -> authorization.v2.EntityIdentifier 18, // 10: authorization.v2.GetDecisionMultiResourceRequest.action:type_name -> policy.Action 3, // 11: authorization.v2.GetDecisionMultiResourceRequest.resources:type_name -> authorization.v2.Resource 19, // 12: authorization.v2.GetDecisionMultiResourceResponse.all_permitted:type_name -> google.protobuf.BoolValue 4, // 13: authorization.v2.GetDecisionMultiResourceResponse.resource_decisions:type_name -> authorization.v2.ResourceDecision 7, // 14: authorization.v2.GetDecisionBulkRequest.decision_requests:type_name -> authorization.v2.GetDecisionMultiResourceRequest 8, // 15: authorization.v2.GetDecisionBulkResponse.decision_responses:type_name -> authorization.v2.GetDecisionMultiResourceResponse - 1, // 16: authorization.v2.GetEntitlementsRequest.entity_reference:type_name -> authorization.v2.EntityReference + 1, // 16: authorization.v2.GetEntitlementsRequest.entity_reference:type_name -> authorization.v2.EntityIdentifier 2, // 17: authorization.v2.GetEntitlementsResponse.entitlements:type_name -> authorization.v2.EntityEntitlements 18, // 18: authorization.v2.EntityEntitlements.ActionsList.actions:type_name -> policy.Action 13, // 19: authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry.value:type_name -> authorization.v2.EntityEntitlements.ActionsList @@ -1235,7 +1236,7 @@ func file_authorization_v2_authorization_proto_init() { } if !protoimpl.UnsafeEnabled { file_authorization_v2_authorization_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*EntityReference); i { + switch v := v.(*EntityIdentifier); i { case 0: return &v.state case 1: @@ -1404,9 +1405,9 @@ func file_authorization_v2_authorization_proto_init() { } } file_authorization_v2_authorization_proto_msgTypes[0].OneofWrappers = []interface{}{ - (*EntityReference_EntityChain)(nil), - (*EntityReference_RegisteredResourceValueFqn)(nil), - (*EntityReference_Token)(nil), + (*EntityIdentifier_EntityChain)(nil), + (*EntityIdentifier_RegisteredResourceValueFqn)(nil), + (*EntityIdentifier_Token)(nil), } file_authorization_v2_authorization_proto_msgTypes[2].OneofWrappers = []interface{}{ (*Resource_AttributeValues_)(nil), diff --git a/service/authorization/v2/authorization.proto b/service/authorization/v2/authorization.proto index 98733447be..8881572f77 100644 --- a/service/authorization/v2/authorization.proto +++ b/service/authorization/v2/authorization.proto @@ -14,11 +14,11 @@ enum Decision { // DECISION_OBLIGATED = 3; } -// The EntityReference is the actor in an entitlement or decision request - the PE, NPE, or PE+NPE being authorized. -// The abstraction houses the distinct entity types, PE and/or NPE combinations, or a registered -// resource value being treated as an entity in entitlement/authorization decisioning. -message EntityReference { - oneof value { +// The EntityIdentifier specifies the actor in an entitlement or decision request - the PE, NPE, or PE+NPE being authorized. +// The abstraction houses the distinct entity types, PE and/or NPE combinations, or a registered resource value +// being treated as an entity in entitlement/authorization decisioning. +message EntityIdentifier { + oneof identifier { option (buf.validate.oneof).required = true; // chain of one or more entities @@ -80,7 +80,7 @@ message ResourceDecision { // 3. one resource message GetDecisionRequest { // entity must be provided - EntityReference entity_reference = 1 [(buf.validate.field).required = true]; + EntityIdentifier entity_reference = 1 [(buf.validate.field).required = true]; // name on action is required policy.Action action = 2 [(buf.validate.field).required = true]; Resource resource = 3 [(buf.validate.field).required = true]; @@ -105,7 +105,7 @@ message GetDecisionResponse { // Note: this is a more performant bulk request for multiple resource decisions message GetDecisionMultiResourceRequest { // entity must be provided - EntityReference entity_reference = 1 [(buf.validate.field).required = true]; + EntityIdentifier entity_reference = 1 [(buf.validate.field).required = true]; // name on action is required policy.Action action = 2 [(buf.validate.field).required = true]; repeated Resource resources = 3 [ @@ -127,7 +127,7 @@ message GetDecisionMultiResourceResponse { } // Is access allowed? -// 1. Multiplexing of a Decision request +// 1. Multiplexing of a Decision request // This is a more performant bulk request for complex decisioning (multiple entity chains or actions on // multiple resource decisions) message GetDecisionBulkRequest { @@ -137,13 +137,13 @@ message GetDecisionBulkResponse { repeated GetDecisionMultiResourceResponse decision_responses = 1; } -// What is permitted to the EntityReference (actor), broken down as permitted actions on attribute value FQNs? +// What is permitted to the EntityIdentifier (actor), broken down as permitted actions on attribute value FQNs? // // Note: the v1 API parameter 'scope' has been dropped, and it is recommended to use // GetDecision if the resource is known message GetEntitlementsRequest { // entity must be provided - EntityReference entity_reference = 1 [(buf.validate.field).required = true]; + EntityIdentifier entity_reference = 1 [(buf.validate.field).required = true]; // optional parameter to return all entitled values for attribute definitions with hierarchy rules, propagating // down the hierarchical values instead of returning solely the value that is directly entitled optional bool with_comprehensive_hierarchy = 2; From 7f50caa6a4977047bc69e4bad6646e16669ae628 Mon Sep 17 00:00:00 2001 From: jakedoublev Date: Wed, 14 May 2025 14:58:16 -0700 Subject: [PATCH 35/49] proto comments --- docs/grpc/index.html | 20 +- .../v2/authorization.swagger.json | 6 +- .../go/authorization/v2/authorization.pb.go | 308 +++++++++--------- service/authorization/v2/authorization.proto | 22 +- 4 files changed, 178 insertions(+), 178 deletions(-) diff --git a/docs/grpc/index.html b/docs/grpc/index.html index a6508a3ad7..3d00958372 100644 --- a/docs/grpc/index.html +++ b/docs/grpc/index.html @@ -4524,7 +4524,7 @@

            EntityIdentifier

            GetDecisionBulkRequest

            -

            Is access allowed?

            1. Multiplexing of a Decision request

            This is a more performant bulk request for complex decisioning (multiple entity chains or actions on

            multiple resource decisions)

            +

            Is access allowed?

            1. Multiplexing of a Decision request

            This is a more performant bulk request for complex decisioning (i.e. multiple entity chains or actions on

            multiple resources)

            entity_referenceEntityReferenceEntityIdentifier

            entity must be provided

            @@ -4572,7 +4572,7 @@

            GetDecisionBulkResponse

            GetDecisionMultiResourceRequest

            -

            Can the entity (PE or NPE) access?

            1. one entity reference (actor)

            2. one action

            3. multiple resources

            Note: this is a more performant bulk request for multiple resource decisions

            +

            Can the identified entity/entities access?

            1. one entity reference (actor)

            2. one action

            3. multiple resources

            Note: this is a more performant bulk request for multiple resource decisions

            @@ -4582,10 +4582,10 @@

            GetDecisionMultiResour

            - + - + @@ -4641,7 +4641,7 @@

            GetDecisionMultiResou

            GetDecisionRequest

            -

            Can the entity (PE or NPE) access?

            1. one entity reference (actor)

            2. one action

            3. one resource

            +

            Can the identified entity/entities access?

            1. one entity reference (actor)

            2. one action

            3. one resource

            entity_referenceentity_identifier EntityIdentifier

            entity must be provided

            an entity must be identified for authorization decisioning

            @@ -4651,10 +4651,10 @@

            GetDecisionRequest

            - + - + @@ -4706,7 +4706,7 @@

            GetDecisionResponse

            GetEntitlementsRequest

            -

            What is permitted to the EntityIdentifier (actor), broken down as permitted actions on attribute value FQNs?

            Note: the v1 API parameter 'scope' has been dropped, and it is recommended to use

            GetDecision if the resource is known

            +

            What is permitted to the identified entity/entities (actor), broken down as permitted actions on attribute value FQNs?

            Note: the v1 API parameter 'scope' has been dropped, and it is recommended to use

            GetDecision if the resource is known

            entity_referenceentity_identifier EntityIdentifier

            entity must be provided

            an entity must be identified for authorization decisioning

            @@ -4716,10 +4716,10 @@

            GetEntitlementsRequest

            - + - + diff --git a/docs/openapi/authorization/v2/authorization.swagger.json b/docs/openapi/authorization/v2/authorization.swagger.json index f7efe4f7d6..a1e5daaac9 100644 --- a/docs/openapi/authorization/v2/authorization.swagger.json +++ b/docs/openapi/authorization/v2/authorization.swagger.json @@ -263,9 +263,9 @@ "v2GetDecisionMultiResourceRequest": { "type": "object", "properties": { - "entityReference": { + "entityIdentifier": { "$ref": "#/definitions/v2EntityIdentifier", - "title": "entity must be provided" + "title": "an entity must be identified for authorization decisioning" }, "action": { "$ref": "#/definitions/policyAction", @@ -279,7 +279,7 @@ } } }, - "title": "Can the entity (PE or NPE) access?\n1. one entity reference (actor)\n2. one action\n3. multiple resources\nNote: this is a more performant bulk request for multiple resource decisions" + "title": "Can the identified entity/entities access?\n1. one entity reference (actor)\n2. one action\n3. multiple resources\nNote: this is a more performant bulk request for multiple resource decisions" }, "v2GetDecisionMultiResourceResponse": { "type": "object", diff --git a/protocol/go/authorization/v2/authorization.pb.go b/protocol/go/authorization/v2/authorization.pb.go index bf2d4833df..073f677383 100644 --- a/protocol/go/authorization/v2/authorization.pb.go +++ b/protocol/go/authorization/v2/authorization.pb.go @@ -380,7 +380,7 @@ func (x *ResourceDecision) GetDecision() Decision { return Decision_DECISION_UNSPECIFIED } -// Can the entity (PE or NPE) access? +// Can the identified entity/entities access? // 1. one entity reference (actor) // 2. one action // 3. one resource @@ -389,8 +389,8 @@ type GetDecisionRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // entity must be provided - EntityReference *EntityIdentifier `protobuf:"bytes,1,opt,name=entity_reference,json=entityReference,proto3" json:"entity_reference,omitempty"` + // an entity must be identified for authorization decisioning + EntityIdentifier *EntityIdentifier `protobuf:"bytes,1,opt,name=entity_identifier,json=entityIdentifier,proto3" json:"entity_identifier,omitempty"` // name on action is required Action *policy.Action `protobuf:"bytes,2,opt,name=action,proto3" json:"action,omitempty"` Resource *Resource `protobuf:"bytes,3,opt,name=resource,proto3" json:"resource,omitempty"` @@ -428,9 +428,9 @@ func (*GetDecisionRequest) Descriptor() ([]byte, []int) { return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{4} } -func (x *GetDecisionRequest) GetEntityReference() *EntityIdentifier { +func (x *GetDecisionRequest) GetEntityIdentifier() *EntityIdentifier { if x != nil { - return x.EntityReference + return x.EntityIdentifier } return nil } @@ -497,7 +497,7 @@ func (x *GetDecisionResponse) GetDecision() *ResourceDecision { return nil } -// Can the entity (PE or NPE) access? +// Can the identified entity/entities access? // 1. one entity reference (actor) // 2. one action // 3. multiple resources @@ -507,8 +507,8 @@ type GetDecisionMultiResourceRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // entity must be provided - EntityReference *EntityIdentifier `protobuf:"bytes,1,opt,name=entity_reference,json=entityReference,proto3" json:"entity_reference,omitempty"` + // an entity must be identified for authorization decisioning + EntityIdentifier *EntityIdentifier `protobuf:"bytes,1,opt,name=entity_identifier,json=entityIdentifier,proto3" json:"entity_identifier,omitempty"` // name on action is required Action *policy.Action `protobuf:"bytes,2,opt,name=action,proto3" json:"action,omitempty"` Resources []*Resource `protobuf:"bytes,3,rep,name=resources,proto3" json:"resources,omitempty"` @@ -546,9 +546,9 @@ func (*GetDecisionMultiResourceRequest) Descriptor() ([]byte, []int) { return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{6} } -func (x *GetDecisionMultiResourceRequest) GetEntityReference() *EntityIdentifier { +func (x *GetDecisionMultiResourceRequest) GetEntityIdentifier() *EntityIdentifier { if x != nil { - return x.EntityReference + return x.EntityIdentifier } return nil } @@ -626,8 +626,8 @@ func (x *GetDecisionMultiResourceResponse) GetResourceDecisions() []*ResourceDec // Is access allowed? // 1. Multiplexing of a Decision request -// This is a more performant bulk request for complex decisioning (multiple entity chains or actions on -// multiple resource decisions) +// This is a more performant bulk request for complex decisioning (i.e. multiple entity chains or actions on +// multiple resources) type GetDecisionBulkRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -722,7 +722,7 @@ func (x *GetDecisionBulkResponse) GetDecisionResponses() []*GetDecisionMultiReso return nil } -// What is permitted to the EntityIdentifier (actor), broken down as permitted actions on attribute value FQNs? +// What is permitted to the identified entity/entities (actor), broken down as permitted actions on attribute value FQNs? // // Note: the v1 API parameter 'scope' has been dropped, and it is recommended to use // GetDecision if the resource is known @@ -731,8 +731,8 @@ type GetEntitlementsRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // entity must be provided - EntityReference *EntityIdentifier `protobuf:"bytes,1,opt,name=entity_reference,json=entityReference,proto3" json:"entity_reference,omitempty"` + // an entity must be identified for entitlement decisioning + EntityIdentifier *EntityIdentifier `protobuf:"bytes,1,opt,name=entity_identifier,json=entityIdentifier,proto3" json:"entity_identifier,omitempty"` // optional parameter to return all entitled values for attribute definitions with hierarchy rules, propagating // down the hierarchical values instead of returning solely the value that is directly entitled WithComprehensiveHierarchy *bool `protobuf:"varint,2,opt,name=with_comprehensive_hierarchy,json=withComprehensiveHierarchy,proto3,oneof" json:"with_comprehensive_hierarchy,omitempty"` @@ -770,9 +770,9 @@ func (*GetEntitlementsRequest) Descriptor() ([]byte, []int) { return file_authorization_v2_authorization_proto_rawDescGZIP(), []int{10} } -func (x *GetEntitlementsRequest) GetEntityReference() *EntityIdentifier { +func (x *GetEntitlementsRequest) GetEntityIdentifier() *EntityIdentifier { if x != nil { - return x.EntityReference + return x.EntityIdentifier } return nil } @@ -1012,149 +1012,149 @@ var file_authorization_v2_authorization_proto_rawDesc = []byte{ 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, - 0xc2, 0x02, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x55, 0x0a, 0x10, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x0f, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x2e, 0x0a, - 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, - 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x06, 0xba, - 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3e, 0x0a, - 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x06, 0xba, 0x48, 0x03, - 0xc8, 0x01, 0x01, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3a, 0x65, 0xba, - 0x48, 0x62, 0x1a, 0x60, 0x0a, 0x29, 0x67, 0x65, 0x74, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, - 0x1c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75, 0x73, - 0x74, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x15, 0x68, - 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, - 0x61, 0x6d, 0x65, 0x29, 0x22, 0x55, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x08, 0x64, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, + 0xc4, 0x02, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x57, 0x0a, 0x11, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x10, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, + 0x2e, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, + 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x3e, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x06, 0xba, + 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3a, + 0x65, 0xba, 0x48, 0x62, 0x1a, 0x60, 0x0a, 0x29, 0x67, 0x65, 0x74, 0x5f, 0x64, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, + 0x64, 0x12, 0x1c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, + 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, + 0x15, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x22, 0x55, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, + 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xde, 0x02, + 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, + 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x57, 0x0a, 0x11, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, + 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x10, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x06, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, + 0x01, 0x01, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x09, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xdc, 0x02, 0x0a, 0x1f, - 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x55, 0x0a, 0x10, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, - 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x0f, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, - 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x2e, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x92, 0x01, 0x02, - 0x08, 0x01, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x3a, 0x6b, 0xba, - 0x48, 0x68, 0x1a, 0x66, 0x0a, 0x2f, 0x67, 0x65, 0x74, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x72, 0x65, 0x71, - 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x1c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, - 0x6d, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x64, 0x1a, 0x15, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x22, 0xb6, 0x01, 0x0a, 0x20, 0x47, - 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, - 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x3f, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, - 0x12, 0x51, 0x0a, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, + 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, + 0x01, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x73, 0x3a, 0x6b, 0xba, 0x48, 0x68, 0x1a, 0x66, 0x0a, 0x2f, 0x67, 0x65, 0x74, 0x5f, 0x64, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x1c, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x70, + 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x15, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, + 0x73, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x22, 0xb6, + 0x01, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, + 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, + 0x74, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, + 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x50, 0x65, 0x72, 0x6d, 0x69, + 0x74, 0x74, 0x65, 0x64, 0x12, 0x51, 0x0a, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x78, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x44, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x5e, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x52, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x22, 0x78, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5e, 0x0a, - 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, + 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x73, 0x22, 0x7c, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, 0x12, + 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x10, 0x64, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, 0x7c, 0x0a, - 0x17, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22, 0xd7, 0x01, 0x0a, 0x16, - 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x55, 0x0a, 0x10, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x0f, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x45, 0x0a, - 0x1c, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, - 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x1a, 0x77, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x72, - 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, - 0x79, 0x88, 0x01, 0x01, 0x42, 0x1f, 0x0a, 0x1d, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, - 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, - 0x61, 0x72, 0x63, 0x68, 0x79, 0x22, 0x63, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, - 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x48, 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x0c, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2a, 0x4c, 0x0a, 0x08, 0x44, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x14, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, - 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, - 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4e, - 0x59, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, - 0x50, 0x45, 0x52, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x32, 0xce, 0x03, 0x0a, 0x14, 0x41, 0x75, 0x74, - 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x12, 0x5c, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x12, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x11, 0x64, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22, + 0xd9, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x57, 0x0a, 0x11, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, + 0x01, 0x52, 0x10, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, + 0x69, 0x65, 0x72, 0x12, 0x45, 0x0a, 0x1c, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, + 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, + 0x63, 0x68, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x1a, 0x77, 0x69, 0x74, + 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x48, 0x69, + 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x88, 0x01, 0x01, 0x42, 0x1f, 0x0a, 0x1d, 0x5f, 0x77, + 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, + 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x22, 0x63, 0x0a, 0x17, 0x47, + 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, + 0x74, 0x73, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x2a, 0x4c, 0x0a, 0x08, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x14, + 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, + 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4e, 0x59, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x45, 0x43, + 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x32, 0xce, + 0x03, 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5c, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x44, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x83, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, - 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x31, 0x2e, 0x61, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, - 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x32, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, - 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x12, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x83, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, + 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x12, 0x31, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, + 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, + 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x0f, 0x47, + 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x12, 0x28, + 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, + 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, + 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x45, + 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, - 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, - 0x68, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x12, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, - 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xd5, 0x01, 0x0a, 0x14, 0x63, 0x6f, - 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x42, 0x12, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x48, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, - 0x6f, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, - 0x76, 0x32, 0x3b, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x76, 0x32, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x10, 0x41, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0xe2, 0x02, - 0x1c, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, - 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, - 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, - 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, + 0xd5, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x42, 0x12, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x48, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, + 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, 0x6f, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x3b, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x32, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, + 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, + 0x32, 0xca, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x1c, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1199,18 +1199,18 @@ var file_authorization_v2_authorization_proto_depIdxs = []int32{ 14, // 2: authorization.v2.EntityEntitlements.actions_per_attribute_value_fqn:type_name -> authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry 15, // 3: authorization.v2.Resource.attribute_values:type_name -> authorization.v2.Resource.AttributeValues 0, // 4: authorization.v2.ResourceDecision.decision:type_name -> authorization.v2.Decision - 1, // 5: authorization.v2.GetDecisionRequest.entity_reference:type_name -> authorization.v2.EntityIdentifier + 1, // 5: authorization.v2.GetDecisionRequest.entity_identifier:type_name -> authorization.v2.EntityIdentifier 18, // 6: authorization.v2.GetDecisionRequest.action:type_name -> policy.Action 3, // 7: authorization.v2.GetDecisionRequest.resource:type_name -> authorization.v2.Resource 4, // 8: authorization.v2.GetDecisionResponse.decision:type_name -> authorization.v2.ResourceDecision - 1, // 9: authorization.v2.GetDecisionMultiResourceRequest.entity_reference:type_name -> authorization.v2.EntityIdentifier + 1, // 9: authorization.v2.GetDecisionMultiResourceRequest.entity_identifier:type_name -> authorization.v2.EntityIdentifier 18, // 10: authorization.v2.GetDecisionMultiResourceRequest.action:type_name -> policy.Action 3, // 11: authorization.v2.GetDecisionMultiResourceRequest.resources:type_name -> authorization.v2.Resource 19, // 12: authorization.v2.GetDecisionMultiResourceResponse.all_permitted:type_name -> google.protobuf.BoolValue 4, // 13: authorization.v2.GetDecisionMultiResourceResponse.resource_decisions:type_name -> authorization.v2.ResourceDecision 7, // 14: authorization.v2.GetDecisionBulkRequest.decision_requests:type_name -> authorization.v2.GetDecisionMultiResourceRequest 8, // 15: authorization.v2.GetDecisionBulkResponse.decision_responses:type_name -> authorization.v2.GetDecisionMultiResourceResponse - 1, // 16: authorization.v2.GetEntitlementsRequest.entity_reference:type_name -> authorization.v2.EntityIdentifier + 1, // 16: authorization.v2.GetEntitlementsRequest.entity_identifier:type_name -> authorization.v2.EntityIdentifier 2, // 17: authorization.v2.GetEntitlementsResponse.entitlements:type_name -> authorization.v2.EntityEntitlements 18, // 18: authorization.v2.EntityEntitlements.ActionsList.actions:type_name -> policy.Action 13, // 19: authorization.v2.EntityEntitlements.ActionsPerAttributeValueFqnEntry.value:type_name -> authorization.v2.EntityEntitlements.ActionsList diff --git a/service/authorization/v2/authorization.proto b/service/authorization/v2/authorization.proto index 8881572f77..542aa818f7 100644 --- a/service/authorization/v2/authorization.proto +++ b/service/authorization/v2/authorization.proto @@ -74,13 +74,13 @@ message ResourceDecision { Decision decision = 3; } -// Can the entity (PE or NPE) access? +// Can the identified entity/entities access? // 1. one entity reference (actor) // 2. one action // 3. one resource message GetDecisionRequest { - // entity must be provided - EntityIdentifier entity_reference = 1 [(buf.validate.field).required = true]; + // an entity must be identified for authorization decisioning + EntityIdentifier entity_identifier = 1 [(buf.validate.field).required = true]; // name on action is required policy.Action action = 2 [(buf.validate.field).required = true]; Resource resource = 3 [(buf.validate.field).required = true]; @@ -98,14 +98,14 @@ message GetDecisionResponse { // repeated string obligations = 2; } -// Can the entity (PE or NPE) access? +// Can the identified entity/entities access? // 1. one entity reference (actor) // 2. one action // 3. multiple resources // Note: this is a more performant bulk request for multiple resource decisions message GetDecisionMultiResourceRequest { - // entity must be provided - EntityIdentifier entity_reference = 1 [(buf.validate.field).required = true]; + // an entity must be identified for authorization decisioning + EntityIdentifier entity_identifier = 1 [(buf.validate.field).required = true]; // name on action is required policy.Action action = 2 [(buf.validate.field).required = true]; repeated Resource resources = 3 [ @@ -128,8 +128,8 @@ message GetDecisionMultiResourceResponse { // Is access allowed? // 1. Multiplexing of a Decision request -// This is a more performant bulk request for complex decisioning (multiple entity chains or actions on -// multiple resource decisions) +// This is a more performant bulk request for complex decisioning (i.e. multiple entity chains or actions on +// multiple resources) message GetDecisionBulkRequest { repeated GetDecisionMultiResourceRequest decision_requests = 1; } @@ -137,13 +137,13 @@ message GetDecisionBulkResponse { repeated GetDecisionMultiResourceResponse decision_responses = 1; } -// What is permitted to the EntityIdentifier (actor), broken down as permitted actions on attribute value FQNs? +// What is permitted to the identified entity/entities (actor), broken down as permitted actions on attribute value FQNs? // // Note: the v1 API parameter 'scope' has been dropped, and it is recommended to use // GetDecision if the resource is known message GetEntitlementsRequest { - // entity must be provided - EntityIdentifier entity_reference = 1 [(buf.validate.field).required = true]; + // an entity must be identified for entitlement decisioning + EntityIdentifier entity_identifier = 1 [(buf.validate.field).required = true]; // optional parameter to return all entitled values for attribute definitions with hierarchy rules, propagating // down the hierarchical values instead of returning solely the value that is directly entitled optional bool with_comprehensive_hierarchy = 2; From 96d86d7c9548202038e5810b465a61714428657d Mon Sep 17 00:00:00 2001 From: jakedoublev Date: Wed, 14 May 2025 15:01:15 -0700 Subject: [PATCH 36/49] fix misnumbered index called out by copilot --- protocol/go/authorization/v2/authorization.pb.go | 4 ++-- service/authorization/v2/authorization.proto | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/protocol/go/authorization/v2/authorization.pb.go b/protocol/go/authorization/v2/authorization.pb.go index 073f677383..0c797f1a72 100644 --- a/protocol/go/authorization/v2/authorization.pb.go +++ b/protocol/go/authorization/v2/authorization.pb.go @@ -331,7 +331,7 @@ type ResourceDecision struct { // ephemeral id for tracking between request and response EphemeralResourceId string `protobuf:"bytes,1,opt,name=ephemeral_resource_id,json=ephemeralResourceId,proto3" json:"ephemeral_resource_id,omitempty"` // decision result - Decision Decision `protobuf:"varint,3,opt,name=decision,proto3,enum=authorization.v2.Decision" json:"decision,omitempty"` + Decision Decision `protobuf:"varint,2,opt,name=decision,proto3,enum=authorization.v2.Decision" json:"decision,omitempty"` } func (x *ResourceDecision) Reset() { @@ -1009,7 +1009,7 @@ var file_authorization_v2_authorization_proto_rawDesc = []byte{ 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xc4, 0x02, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, diff --git a/service/authorization/v2/authorization.proto b/service/authorization/v2/authorization.proto index 542aa818f7..c2619a48ed 100644 --- a/service/authorization/v2/authorization.proto +++ b/service/authorization/v2/authorization.proto @@ -71,7 +71,7 @@ message ResourceDecision { // ephemeral id for tracking between request and response string ephemeral_resource_id = 1; // decision result - Decision decision = 3; + Decision decision = 2; } // Can the identified entity/entities access? From 33d98c7b3a1d697e1e955b8af1be2cda55ebc661 Mon Sep 17 00:00:00 2001 From: jakedoublev Date: Wed, 14 May 2025 15:21:47 -0700 Subject: [PATCH 37/49] rm empty commits to unchanged proto files --- service/authorization/authorization.proto | 2 +- service/entityresolution/entity_resolution.proto | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/service/authorization/authorization.proto b/service/authorization/authorization.proto index f2b4a7b1d8..058f1f18f3 100644 --- a/service/authorization/authorization.proto +++ b/service/authorization/authorization.proto @@ -302,4 +302,4 @@ service AuthorizationService { body: "*" }; } -} \ No newline at end of file +} diff --git a/service/entityresolution/entity_resolution.proto b/service/entityresolution/entity_resolution.proto index 90d83d9cda..bbccdef37a 100644 --- a/service/entityresolution/entity_resolution.proto +++ b/service/entityresolution/entity_resolution.proto @@ -119,4 +119,4 @@ service EntityResolutionService { body: "*"; }; } -} \ No newline at end of file +} From 33dc3941089e18c164545cae2a92269cee4d78fe Mon Sep 17 00:00:00 2001 From: jakedoublev Date: Wed, 14 May 2025 15:22:34 -0700 Subject: [PATCH 38/49] validation PR suggestion --- .../go/authorization/v2/authorization.pb.go | 399 +++++++++--------- service/authorization/v2/authorization.proto | 7 +- 2 files changed, 206 insertions(+), 200 deletions(-) diff --git a/protocol/go/authorization/v2/authorization.pb.go b/protocol/go/authorization/v2/authorization.pb.go index 0c797f1a72..cecabe0934 100644 --- a/protocol/go/authorization/v2/authorization.pb.go +++ b/protocol/go/authorization/v2/authorization.pb.go @@ -938,7 +938,7 @@ var file_authorization_v2_authorization_proto_rawDesc = []byte{ 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x22, 0x97, 0x03, 0x0a, 0x10, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x65, 0x6e, 0x74, + 0x22, 0x9a, 0x03, 0x0a, 0x10, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0xa2, 0x01, 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, @@ -949,212 +949,213 @@ var file_authorization_v2_authorization_proto_rawDesc = []byte{ 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x69, 0x65, 0x73, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x29, 0x20, 0x3e, 0x20, 0x30, 0x48, 0x00, 0x52, 0x0b, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x4c, 0x0a, 0x1d, 0x72, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x4f, 0x0a, 0x1d, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x48, 0x00, 0x52, 0x1a, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x12, 0x7b, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x54, 0xba, 0x48, 0x51, 0xba, 0x01, 0x4e, 0x0a, 0x0e, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x16, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x24, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, - 0x2e, 0x6a, 0x77, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6a, 0x77, - 0x74, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x29, 0x20, 0x3e, 0x20, 0x30, 0x48, 0x00, 0x52, 0x05, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x13, 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, - 0x69, 0x65, 0x72, 0x12, 0x05, 0xba, 0x48, 0x02, 0x08, 0x01, 0x22, 0x81, 0x03, 0x0a, 0x12, 0x45, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, - 0x61, 0x6c, 0x49, 0x64, 0x12, 0x8b, 0x01, 0x0a, 0x1f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, - 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, - 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x1b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, - 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, - 0x71, 0x6e, 0x1a, 0x37, 0x0a, 0x0b, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, 0x69, 0x73, - 0x74, 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x80, 0x01, 0x0a, 0x20, - 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x46, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x30, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x10, 0x01, 0x88, 0x01, 0x01, 0x48, 0x00, 0x52, + 0x1a, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x12, 0x7b, 0x0a, 0x05, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x54, 0xba, 0x48, 0x51, 0xba, 0x01, + 0x4e, 0x0a, 0x0e, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, + 0x64, 0x12, 0x16, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, + 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x24, 0x68, 0x61, 0x73, 0x28, 0x74, + 0x68, 0x69, 0x73, 0x2e, 0x6a, 0x77, 0x74, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, + 0x2e, 0x6a, 0x77, 0x74, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x29, 0x20, 0x3e, 0x20, 0x30, 0x48, + 0x00, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x42, 0x13, 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x05, 0xba, 0x48, 0x02, 0x08, 0x01, 0x22, 0x81, 0x03, + 0x0a, 0x12, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, + 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, + 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x8b, 0x01, 0x0a, 0x1f, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x45, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, - 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xfe, - 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x65, - 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x57, - 0x0a, 0x10, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x73, 0x48, 0x00, 0x52, 0x0f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x43, 0x0a, 0x1d, 0x72, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, - 0x52, 0x1a, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x1a, 0x25, 0x0a, 0x0f, - 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, - 0x12, 0x0a, 0x04, 0x66, 0x71, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x66, - 0x71, 0x6e, 0x73, 0x42, 0x0a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x22, - 0x7e, 0x0a, 0x10, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x0a, 0x15, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, - 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x13, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, - 0xc4, 0x02, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x57, 0x0a, 0x11, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x10, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, - 0x2e, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, - 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x3e, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x06, 0xba, - 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3a, - 0x65, 0xba, 0x48, 0x62, 0x1a, 0x60, 0x0a, 0x29, 0x67, 0x65, 0x74, 0x5f, 0x64, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, - 0x64, 0x12, 0x1c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, - 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, - 0x15, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x22, 0x55, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, - 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, - 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xde, 0x02, - 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, - 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x57, 0x0a, 0x11, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, - 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x10, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x06, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, - 0x01, 0x01, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x09, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, - 0x01, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x73, 0x3a, 0x6b, 0xba, 0x48, 0x68, 0x1a, 0x66, 0x0a, 0x2f, 0x67, 0x65, 0x74, 0x5f, 0x64, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x1c, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x70, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x15, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, - 0x73, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x22, 0xb6, - 0x01, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, - 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, - 0x74, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, - 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x50, 0x65, 0x72, 0x6d, 0x69, - 0x74, 0x74, 0x65, 0x64, 0x12, 0x51, 0x0a, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, 0x63, 0x69, - 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x78, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x44, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x5e, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, - 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, - 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x73, 0x22, 0x7c, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, - 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, 0x12, - 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x11, 0x64, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x22, - 0xd9, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x57, 0x0a, 0x11, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, - 0x01, 0x52, 0x10, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, - 0x69, 0x65, 0x72, 0x12, 0x45, 0x0a, 0x1c, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, - 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, - 0x63, 0x68, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x1a, 0x77, 0x69, 0x74, - 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x48, 0x69, - 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x88, 0x01, 0x01, 0x42, 0x1f, 0x0a, 0x1d, 0x5f, 0x77, - 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, - 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x22, 0x63, 0x0a, 0x17, 0x47, - 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, - 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x73, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x2a, 0x4c, 0x0a, 0x08, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x14, - 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, - 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, - 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4e, 0x59, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x44, 0x45, 0x43, - 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x54, 0x10, 0x02, 0x32, 0xce, - 0x03, 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5c, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x44, 0x65, - 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x61, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, + 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x46, 0x71, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x1b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, + 0x75, 0x65, 0x46, 0x71, 0x6e, 0x1a, 0x37, 0x0a, 0x0b, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x80, + 0x01, 0x0a, 0x20, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x65, 0x72, 0x41, 0x74, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x46, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, + 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x22, 0xfe, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x21, + 0x0a, 0x0c, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, 0x49, + 0x64, 0x12, 0x57, 0x0a, 0x10, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x48, 0x00, 0x52, 0x0f, 0x61, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x43, 0x0a, 0x1d, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x48, 0x00, 0x52, 0x1a, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x1a, + 0x25, 0x0a, 0x0f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x71, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x04, 0x66, 0x71, 0x6e, 0x73, 0x42, 0x0a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x22, 0x7e, 0x0a, 0x10, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x32, 0x0a, 0x15, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, + 0x72, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x65, 0x70, 0x68, 0x65, 0x6d, 0x65, 0x72, 0x61, 0x6c, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x08, 0x64, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, - 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x83, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, - 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x12, 0x31, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, + 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x22, 0xc4, 0x02, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x57, 0x0a, 0x11, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, + 0x52, 0x10, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, + 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x3e, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x3a, 0x65, 0xba, 0x48, 0x62, 0x1a, 0x60, 0x0a, 0x29, 0x67, 0x65, 0x74, 0x5f, 0x64, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, + 0x69, 0x72, 0x65, 0x64, 0x12, 0x1c, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, + 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x64, 0x1a, 0x15, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x29, 0x22, 0x55, 0x0a, 0x13, 0x47, 0x65, 0x74, + 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x3e, 0x0a, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, 0x65, + 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x22, 0xde, 0x02, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x57, 0x0a, 0x11, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x69, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, + 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x10, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x2e, 0x0a, + 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, + 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x06, 0xba, + 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, + 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x0b, 0xba, 0x48, + 0x08, 0xc8, 0x01, 0x01, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x73, 0x3a, 0x6b, 0xba, 0x48, 0x68, 0x1a, 0x66, 0x0a, 0x2f, 0x67, 0x65, 0x74, + 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x5f, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x1c, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, + 0x65, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x15, 0x68, 0x61, 0x73, 0x28, + 0x74, 0x68, 0x69, 0x73, 0x2e, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x6e, 0x61, 0x6d, 0x65, + 0x29, 0x22, 0xb6, 0x01, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x5f, 0x70, 0x65, + 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x50, 0x65, + 0x72, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x12, 0x51, 0x0a, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x44, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x78, 0x0a, 0x16, 0x47, 0x65, + 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x5e, 0x0a, 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x31, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, + 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x52, 0x10, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x73, 0x22, 0x7c, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, + 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x61, 0x0a, 0x12, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, + 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, + 0x11, 0x64, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x73, 0x22, 0xd9, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x57, 0x0a, + 0x11, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, + 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, + 0x03, 0xc8, 0x01, 0x01, 0x52, 0x10, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x49, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x45, 0x0a, 0x1c, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, + 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, + 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x1a, + 0x77, 0x69, 0x74, 0x68, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x76, + 0x65, 0x48, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x88, 0x01, 0x01, 0x42, 0x1f, 0x0a, + 0x1d, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, + 0x73, 0x69, 0x76, 0x65, 0x5f, 0x68, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68, 0x79, 0x22, 0x63, + 0x0a, 0x17, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0c, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x0c, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, + 0x6e, 0x74, 0x73, 0x2a, 0x4c, 0x0a, 0x08, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, + 0x18, 0x0a, 0x14, 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, + 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x45, 0x43, + 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x4e, 0x59, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, + 0x44, 0x45, 0x43, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x54, 0x10, + 0x02, 0x32, 0xce, 0x03, 0x0a, 0x14, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5c, 0x0a, 0x0b, 0x47, 0x65, + 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x24, 0x2e, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, + 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x83, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, + 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x31, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x0f, 0x47, - 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x12, 0x28, - 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, - 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, - 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, - 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x45, - 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, - 0xd5, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x42, 0x12, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x48, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, 0x65, 0x6e, 0x74, - 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, 0x6f, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x3b, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x32, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, - 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x56, - 0x32, 0xca, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x1c, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, + 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, + 0x6b, 0x12, 0x28, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, + 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, + 0x65, 0x74, 0x44, 0x65, 0x63, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x75, 0x6c, 0x6b, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x68, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x45, + 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x28, 0x2e, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, + 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x69, + 0x74, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x00, 0x42, 0xd5, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x42, 0x12, 0x41, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, + 0x01, 0x5a, 0x48, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, 0x70, + 0x65, 0x6e, 0x74, 0x64, 0x66, 0x2f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x2f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2f, 0x67, 0x6f, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x6f, + 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x3b, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x32, 0xa2, 0x02, 0x03, 0x41, 0x58, + 0x58, 0xaa, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x10, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x1c, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5c, 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x11, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( diff --git a/service/authorization/v2/authorization.proto b/service/authorization/v2/authorization.proto index c2619a48ed..4eba195ad5 100644 --- a/service/authorization/v2/authorization.proto +++ b/service/authorization/v2/authorization.proto @@ -30,7 +30,12 @@ message EntityIdentifier { // fully qualified name of the registered resource value stored in platform policy, where in // this case the resource acts as and represents a single entity for authorization/entitlement decisioning - string registered_resource_value_fqn = 2 [(buf.validate.field).string.min_len = 1]; + string registered_resource_value_fqn = 2 [ + (buf.validate.field).string = { + min_len: 1 + uri: true + } + ]; // access token (JWT), which is used to create an entity chain (comprising one or more entities) entity.Token token = 3 [(buf.validate.field).cel = { From f7c0e938ec2e0dc8ccb5e0ffdd78121140c6ec9a Mon Sep 17 00:00:00 2001 From: jakedoublev Date: Wed, 14 May 2025 15:49:25 -0700 Subject: [PATCH 39/49] claims v2 --- .../claims/v2/entity_resolution.go | 103 ++++++---------- .../claims/v2/entity_resolution_test.go | 116 ++++++++++++++++++ 2 files changed, 155 insertions(+), 64 deletions(-) create mode 100644 service/entityresolution/claims/v2/entity_resolution_test.go diff --git a/service/entityresolution/claims/v2/entity_resolution.go b/service/entityresolution/claims/v2/entity_resolution.go index 86657cae19..27a02dbf97 100644 --- a/service/entityresolution/claims/v2/entity_resolution.go +++ b/service/entityresolution/claims/v2/entity_resolution.go @@ -8,9 +8,8 @@ import ( "connectrpc.com/connect" "github.com/lestrrat-go/jwx/v2/jwt" - authz "github.com/opentdf/platform/protocol/go/authorization/v2" - "github.com/opentdf/platform/protocol/go/entityresolution" - ersV2 "github.com/opentdf/platform/protocol/go/entityresolution/v2" + "github.com/opentdf/platform/protocol/go/entity" + entityresolutionV2 "github.com/opentdf/platform/protocol/go/entityresolution/v2" auth "github.com/opentdf/platform/service/authorization" "github.com/opentdf/platform/service/logger" "github.com/opentdf/platform/service/pkg/config" @@ -22,7 +21,7 @@ import ( ) type ClaimsEntityResolutionServiceV2 struct { - ersV2.UnimplementedEntityResolutionServiceServer + entityresolutionV2.UnimplementedEntityResolutionServiceServer logger *logger.Logger trace.Tracer } @@ -32,110 +31,86 @@ func RegisterClaimsERS(_ config.ServiceConfig, logger *logger.Logger) (ClaimsEnt return claimsSVC, nil } -func (s ClaimsEntityResolutionServiceV2) ResolveEntities(ctx context.Context, req *connect.Request[ersV2.ResolveEntitiesRequest]) (*connect.Response[ersV2.ResolveEntitiesResponse], error) { - resp, err := resolveEntities(ctx, s.logger, req.Msg) +func (s ClaimsEntityResolutionServiceV2) ResolveEntities(ctx context.Context, req *connect.Request[entityresolutionV2.ResolveEntitiesRequest]) (*connect.Response[entityresolutionV2.ResolveEntitiesResponse], error) { + resp, err := EntityResolution(ctx, req.Msg, s.logger) return connect.NewResponse(&resp), err } -func (s ClaimsEntityResolutionServiceV2) CreateEntityChainFromJwt(ctx context.Context, req *connect.Request[ersV2.CreateEntityChainFromJwtRequest]) (*connect.Response[ersV2.CreateEntityChainFromJwtResponse], error) { - ctx, span := s.Tracer.Start(ctx, "CreateEntityChainFromJwt") +func (s ClaimsEntityResolutionServiceV2) CreateEntityChainsFromTokens(ctx context.Context, req *connect.Request[entityresolutionV2.CreateEntityChainsFromTokensRequest]) (*connect.Response[entityresolutionV2.CreateEntityChainsFromTokensResponse], error) { + ctx, span := s.Tracer.Start(ctx, "CreateEntityChainsFromTokens") defer span.End() - resp, err := createEntityChainFromSingleJwt(ctx, s.logger, req.Msg) + resp, err := CreateEntityChainsFromTokens(ctx, req.Msg, s.logger) return connect.NewResponse(&resp), err } -func (s ClaimsEntityResolutionServiceV2) CreateEntityChainFromJwtMulti(ctx context.Context, req *connect.Request[ersV2.CreateEntityChainFromJwtMultiRequest]) (*connect.Response[ersV2.CreateEntityChainFromJwtMultiResponse], error) { - ctx, span := s.Tracer.Start(ctx, "CreateEntityChainFromJwt") - defer span.End() - - resp, err := createEntityChainFromMultiJwt(ctx, s.logger, req.Msg) - return connect.NewResponse(&resp), err -} - -func createEntityChainFromSingleJwt( - _ context.Context, - _ *logger.Logger, - req *ersV2.CreateEntityChainFromJwtRequest, -) (ersV2.CreateEntityChainFromJwtResponse, error) { - tok := req.GetToken() - // for each token in the tokens form an entity chain - entities, err := getEntitiesFromToken(tok.GetJwt()) - if err != nil { - return ersV2.CreateEntityChainFromJwtResponse{}, err - } - chain := &authz.EntityChain{EphemeralChainId: tok.GetId(), Entities: entities} - return ersV2.CreateEntityChainFromJwtResponse{EntityChains: chain}, nil -} - -func createEntityChainFromMultiJwt( +func CreateEntityChainsFromTokens( _ context.Context, + req *entityresolutionV2.CreateEntityChainsFromTokensRequest, _ *logger.Logger, - req *ersV2.CreateEntityChainFromJwtMultiRequest, -) (ersV2.CreateEntityChainFromJwtMultiResponse, error) { - entityChains := []*authz.EntityChain{} +) (entityresolutionV2.CreateEntityChainsFromTokensResponse, error) { + entityChains := []*entity.EntityChain{} // for each token in the tokens form an entity chain - for _, tok := range req.GetToken() { + for _, tok := range req.GetTokens() { entities, err := getEntitiesFromToken(tok.GetJwt()) if err != nil { - return ersV2.CreateEntityChainFromJwtMultiResponse{}, err + return entityresolutionV2.CreateEntityChainsFromTokensResponse{}, err } - entityChains = append(entityChains, &authz.EntityChain{EphemeralChainId: tok.GetId(), Entities: entities}) + entityChains = append(entityChains, &entity.EntityChain{EphemeralId: tok.GetEphemeralId(), Entities: entities}) } - return ersV2.CreateEntityChainFromJwtMultiResponse{EntityChains: entityChains}, nil + + return entityresolutionV2.CreateEntityChainsFromTokensResponse{EntityChains: entityChains}, nil } -func resolveEntities( - _ context.Context, - logger *logger.Logger, - req *ersV2.ResolveEntitiesRequest, -) (ersV2.ResolveEntitiesResponse, error) { - entities := req.GetEntitiesV2() - var resolvedEntities []*entityresolution.EntityRepresentation +func EntityResolution(_ context.Context, + req *entityresolutionV2.ResolveEntitiesRequest, logger *logger.Logger, +) (entityresolutionV2.ResolveEntitiesResponse, error) { + payload := req.GetEntities() + var resolvedEntities []*entityresolutionV2.EntityRepresentation - for idx, entity := range entities { + for idx, ident := range payload { entityStruct := &structpb.Struct{} - switch entity.GetEntityType().(type) { - case *authz.Entity_Claims: - claims := entity.GetClaims() + switch ident.GetEntityType().(type) { + case *entity.Entity_Claims: + claims := ident.GetClaims() if claims != nil { err := claims.UnmarshalTo(entityStruct) if err != nil { - return ersV2.ResolveEntitiesResponse{}, connect.NewError(connect.CodeInvalidArgument, fmt.Errorf("error unpacking anypb.Any to structpb.Struct: %w", err)) + return entityresolutionV2.ResolveEntitiesResponse{}, connect.NewError(connect.CodeInvalidArgument, fmt.Errorf("error unpacking anypb.Any to structpb.Struct: %w", err)) } } default: - retrievedStruct, err := entityToStructPb(entity) + retrievedStruct, err := entityToStructPb(ident) if err != nil { logger.Error("unable to make entity struct", slog.String("error", err.Error())) - return ersV2.ResolveEntitiesResponse{}, connect.NewError(connect.CodeInternal, fmt.Errorf("unable to make entity struct: %w", err)) + return entityresolutionV2.ResolveEntitiesResponse{}, connect.NewError(connect.CodeInternal, fmt.Errorf("unable to make entity struct: %w", err)) } entityStruct = retrievedStruct } // make sure the id field is populated - originialID := entity.GetEphemeralId() + originialID := ident.GetEphemeralId() if originialID == "" { originialID = auth.EntityIDPrefix + strconv.Itoa(idx) } resolvedEntities = append( resolvedEntities, - &entityresolution.EntityRepresentation{ + &entityresolutionV2.EntityRepresentation{ OriginalId: originialID, AdditionalProps: []*structpb.Struct{entityStruct}, }, ) } - return ersV2.ResolveEntitiesResponse{EntityRepresentations: resolvedEntities}, nil + return entityresolutionV2.ResolveEntitiesResponse{EntityRepresentations: resolvedEntities}, nil } -func getEntitiesFromToken(jwtString string) ([]*authz.Entity, error) { +func getEntitiesFromToken(jwtString string) ([]*entity.Entity, error) { token, err := jwt.ParseString(jwtString, jwt.WithVerify(false), jwt.WithValidate(false)) if err != nil { return nil, fmt.Errorf("error parsing jwt: %w", err) } claims := token.PrivateClaims() - entities := []*authz.Entity{} + entities := []*entity.Entity{} // Convert map[string]interface{} to *structpb.Struct structClaims, err := structpb.NewStruct(claims) @@ -149,16 +124,16 @@ func getEntitiesFromToken(jwtString string) ([]*authz.Entity, error) { return nil, fmt.Errorf("error wrapping in anypb.Any: %w", err) } - entities = append(entities, &authz.Entity{ - EntityType: &authz.Entity_Claims{Claims: anyClaims}, + entities = append(entities, &entity.Entity{ + EntityType: &entity.Entity_Claims{Claims: anyClaims}, EphemeralId: "jwtentity-claims", - Category: authz.Entity_CATEGORY_SUBJECT, + Category: entity.Entity_CATEGORY_SUBJECT, }) return entities, nil } -func entityToStructPb(entity *authz.Entity) (*structpb.Struct, error) { - entityBytes, err := protojson.Marshal(entity) +func entityToStructPb(ident *entity.Entity) (*structpb.Struct, error) { + entityBytes, err := protojson.Marshal(ident) if err != nil { return nil, err } diff --git a/service/entityresolution/claims/v2/entity_resolution_test.go b/service/entityresolution/claims/v2/entity_resolution_test.go new file mode 100644 index 0000000000..d8560ed207 --- /dev/null +++ b/service/entityresolution/claims/v2/entity_resolution_test.go @@ -0,0 +1,116 @@ +package claims_test + +import ( + "testing" + + "github.com/opentdf/platform/protocol/go/entity" + entityresolutionV2 "github.com/opentdf/platform/protocol/go/entityresolution/v2" + claims "github.com/opentdf/platform/service/entityresolution/claims/v2" + "github.com/opentdf/platform/service/logger" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "google.golang.org/protobuf/types/known/anypb" + "google.golang.org/protobuf/types/known/structpb" +) + +const samplejwt = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6ImhlbGxvd29ybGQiLCJpYXQiOjE1MTYyMzkwMjJ9.EAOittOMzKENEAs44eaMuZe-xas7VNVsgBxhwmxYiIw" + +func Test_ClientResolveEntity(t *testing.T) { + var validBody []*entity.Entity + validBody = append(validBody, &entity.Entity{EphemeralId: "1234", EntityType: &entity.Entity_ClientId{ClientId: "random"}}) + + req := entityresolutionV2.ResolveEntitiesRequest{} + req.Entities = validBody + + resp, reserr := claims.EntityResolution(t.Context(), &req, logger.CreateTestLogger()) + + require.NoError(t, reserr) + + entityRepresentations := resp.GetEntityRepresentations() + assert.NotNil(t, entityRepresentations) + assert.Len(t, entityRepresentations, 1) + + assert.Equal(t, "1234", entityRepresentations[0].GetOriginalId()) + assert.Len(t, entityRepresentations[0].GetAdditionalProps(), 1) + propMap := entityRepresentations[0].GetAdditionalProps()[0].AsMap() + assert.Equal(t, "random", propMap["clientId"]) + assert.Equal(t, "1234", propMap["id"]) +} + +func Test_EmailResolveEntity(t *testing.T) { + var validBody []*entity.Entity + validBody = append(validBody, &entity.Entity{EphemeralId: "1234", EntityType: &entity.Entity_EmailAddress{EmailAddress: "random"}}) + + req := entityresolutionV2.ResolveEntitiesRequest{} + req.Entities = validBody + + resp, reserr := claims.EntityResolution(t.Context(), &req, logger.CreateTestLogger()) + + require.NoError(t, reserr) + + entityRepresentations := resp.GetEntityRepresentations() + assert.NotNil(t, entityRepresentations) + assert.Len(t, entityRepresentations, 1) + + assert.Equal(t, "1234", entityRepresentations[0].GetOriginalId()) + assert.Len(t, entityRepresentations[0].GetAdditionalProps(), 1) + propMap := entityRepresentations[0].GetAdditionalProps()[0].AsMap() + assert.Equal(t, "random", propMap["emailAddress"]) + assert.Equal(t, "1234", propMap["id"]) +} + +func Test_ClaimsResolveEntity(t *testing.T) { + customclaims := map[string]interface{}{ + "foo": "bar", + "baz": 42, + } + // Convert map[string]interface{} to *structpb.Struct + structClaims, err := structpb.NewStruct(customclaims) + require.NoError(t, err) + + // Wrap the struct in an *anypb.Any + anyClaims, err := anypb.New(structClaims) + require.NoError(t, err) + + var validBody []*entity.Entity + validBody = append(validBody, &entity.Entity{EphemeralId: "1234", EntityType: &entity.Entity_Claims{Claims: anyClaims}}) + + req := entityresolutionV2.ResolveEntitiesRequest{} + req.Entities = validBody + + resp, reserr := claims.EntityResolution(t.Context(), &req, logger.CreateTestLogger()) + + require.NoError(t, reserr) + + entityRepresentations := resp.GetEntityRepresentations() + assert.NotNil(t, entityRepresentations) + assert.Len(t, entityRepresentations, 1) + + assert.Equal(t, "1234", entityRepresentations[0].GetOriginalId()) + assert.Len(t, entityRepresentations[0].GetAdditionalProps(), 1) + propMap := entityRepresentations[0].GetAdditionalProps()[0].AsMap() + assert.Equal(t, "bar", propMap["foo"]) + assert.EqualValues(t, 42, propMap["baz"]) +} + +func Test_JWTToEntityChainClaims(t *testing.T) { + validBody := []*entity.Token{{Jwt: samplejwt}} + + resp, reserr := claims.CreateEntityChainsFromTokens(t.Context(), &entityresolutionV2.CreateEntityChainsFromTokensRequest{Tokens: validBody}, logger.CreateTestLogger()) + + require.NoError(t, reserr) + + assert.Len(t, resp.GetEntityChains(), 1) + assert.Len(t, resp.GetEntityChains()[0].GetEntities(), 1) + assert.IsType(t, &entity.Entity_Claims{}, resp.GetEntityChains()[0].GetEntities()[0].GetEntityType()) + assert.Equal(t, entity.Entity_CATEGORY_SUBJECT, resp.GetEntityChains()[0].GetEntities()[0].GetCategory()) + + var unpackedStruct structpb.Struct + err := resp.GetEntityChains()[0].GetEntities()[0].GetClaims().UnmarshalTo(&unpackedStruct) + require.NoError(t, err) + + // Convert structpb.Struct to map[string]interface{} + claimsMap := unpackedStruct.AsMap() + + assert.Equal(t, "helloworld", claimsMap["name"]) +} From a48f091324dfa00391b3512a3fe2cfe04392a736 Mon Sep 17 00:00:00 2001 From: jakedoublev Date: Wed, 14 May 2025 15:56:18 -0700 Subject: [PATCH 40/49] keycloak v2 --- .../keycloak/v2/entity_resolution.go | 479 +++++++------- .../keycloak/v2/entity_resolution_test.go | 587 ++++++++++++++++++ 2 files changed, 802 insertions(+), 264 deletions(-) create mode 100644 service/entityresolution/keycloak/v2/entity_resolution_test.go diff --git a/service/entityresolution/keycloak/v2/entity_resolution.go b/service/entityresolution/keycloak/v2/entity_resolution.go index 822a6554c2..c1cb049e66 100644 --- a/service/entityresolution/keycloak/v2/entity_resolution.go +++ b/service/entityresolution/keycloak/v2/entity_resolution.go @@ -13,11 +13,9 @@ import ( "github.com/Nerzal/gocloak/v13" "github.com/go-viper/mapstructure/v2" "github.com/lestrrat-go/jwx/v2/jwt" - authz "github.com/opentdf/platform/protocol/go/authorization/v2" - "github.com/opentdf/platform/protocol/go/entityresolution" - ersV2 "github.com/opentdf/platform/protocol/go/entityresolution/v2" + "github.com/opentdf/platform/protocol/go/entity" + entityresolutionV2 "github.com/opentdf/platform/protocol/go/entityresolution/v2" auth "github.com/opentdf/platform/service/authorization" - keycloakV1 "github.com/opentdf/platform/service/entityresolution/keycloak" "github.com/opentdf/platform/service/logger" "github.com/opentdf/platform/service/pkg/config" "github.com/opentdf/platform/service/pkg/serviceregistry" @@ -40,22 +38,25 @@ const ( const serviceAccountUsernamePrefix = "service-account-" -// EntityType constants for clearer type checking -const ( - EntityTypeEmail = "email" - EntityTypeUsername = "username" - EntityTypeClientID = "clientid" -) - type KeycloakEntityResolutionService struct { - ersV2.UnimplementedEntityResolutionServiceServer - idpConfig keycloakV1.KeycloakConfig + entityresolutionV2.UnimplementedEntityResolutionServiceServer + idpConfig KeycloakConfig logger *logger.Logger trace.Tracer } +type KeycloakConfig struct { + URL string `mapstructure:"url" json:"url"` + Realm string `mapstructure:"realm" json:"realm"` + ClientID string `mapstructure:"clientid" json:"clientid"` + ClientSecret string `mapstructure:"clientsecret" json:"clientsecret"` + LegacyKeycloak bool `mapstructure:"legacykeycloak" json:"legacykeycloak" default:"false"` + SubGroups bool `mapstructure:"subgroups" json:"subgroups" default:"false"` + InferID InferredIdentityConfig `mapstructure:"inferid,omitempty" json:"inferid,omitempty"` +} + func RegisterKeycloakERS(config config.ServiceConfig, logger *logger.Logger) (*KeycloakEntityResolutionService, serviceregistry.HandlerServer) { - var inputIdpConfig keycloakV1.KeycloakConfig + var inputIdpConfig KeycloakConfig if err := mapstructure.Decode(config, &inputIdpConfig); err != nil { panic(err) } @@ -64,28 +65,32 @@ func RegisterKeycloakERS(config config.ServiceConfig, logger *logger.Logger) (*K return keycloakSVC, nil } -func (s KeycloakEntityResolutionService) ResolveEntities(ctx context.Context, req *connect.Request[ersV2.ResolveEntitiesRequest]) (*connect.Response[ersV2.ResolveEntitiesResponse], error) { +func (s KeycloakEntityResolutionService) ResolveEntities(ctx context.Context, req *connect.Request[entityresolutionV2.ResolveEntitiesRequest]) (*connect.Response[entityresolutionV2.ResolveEntitiesResponse], error) { ctx, span := s.Tracer.Start(ctx, "ResolveEntities") defer span.End() resp, err := EntityResolution(ctx, req.Msg, s.idpConfig, s.logger) - return connect.NewResponse(resp), err + return connect.NewResponse(&resp), err } -func (s KeycloakEntityResolutionService) CreateEntityChainFromJwt(ctx context.Context, req *connect.Request[ersV2.CreateEntityChainFromJwtRequest]) (*connect.Response[ersV2.CreateEntityChainFromJwtResponse], error) { - ctx, span := s.Tracer.Start(ctx, "CreateEntityChainFromJwt") +func (s KeycloakEntityResolutionService) CreateEntityChainsFromTokens(ctx context.Context, req *connect.Request[entityresolutionV2.CreateEntityChainsFromTokensRequest]) (*connect.Response[entityresolutionV2.CreateEntityChainsFromTokensResponse], error) { + ctx, span := s.Tracer.Start(ctx, "CreateEntityChainsFromTokens") defer span.End() - resp, err := CreateEntityChainFromJwt(ctx, req.Msg, s.idpConfig, s.logger) - return connect.NewResponse(resp), err + resp, err := CreateEntityChainsFromTokens(ctx, req.Msg, s.idpConfig, s.logger) + return connect.NewResponse(&resp), err } -func (s KeycloakEntityResolutionService) CreateEntityChainFromJwtMulti(ctx context.Context, req *connect.Request[ersV2.CreateEntityChainFromJwtMultiRequest]) (*connect.Response[ersV2.CreateEntityChainFromJwtMultiResponse], error) { - ctx, span := s.Tracer.Start(ctx, "CreateEntityChainFromJwt") - defer span.End() - - resp, err := CreateEntityChainFromJwtMulti(ctx, req.Msg, s.idpConfig, s.logger) - return connect.NewResponse(resp), err +func (c KeycloakConfig) LogValue() slog.Value { + return slog.GroupValue( + slog.String("url", c.URL), + slog.String("realm", c.Realm), + slog.String("clientid", c.ClientID), + slog.String("clientsecret", "[REDACTED]"), + slog.Bool("legacykeycloak", c.LegacyKeycloak), + slog.Bool("subgroups", c.SubGroups), + slog.Any("inferid", c.InferID), + ) } type InferredIdentityConfig struct { @@ -103,266 +108,212 @@ type KeyCloakConnector struct { client *gocloak.GoCloak } -// errorHandler provides a centralized way to handle service errors with logging -func errorHandler(ctx context.Context, logger *logger.Logger, code connect.Code, err error, msg string) error { - logger.ErrorContext(ctx, msg, slog.String("error", err.Error())) - return connect.NewError(code, err) -} - -func CreateEntityChainFromJwt( - ctx context.Context, - req *ersV2.CreateEntityChainFromJwtRequest, - kcConfig keycloakV1.KeycloakConfig, - logger *logger.Logger, -) (*ersV2.CreateEntityChainFromJwtResponse, error) { - tok := req.GetToken() - // for each token in the tokens form an entity chain - entities, err := getEntitiesFromToken(ctx, kcConfig, tok.GetJwt(), logger) - if err != nil { - return nil, err - } - entityChain := &authz.EntityChain{EphemeralChainId: tok.GetId(), Entities: entities} - - return &ersV2.CreateEntityChainFromJwtResponse{EntityChains: entityChain}, nil -} -func CreateEntityChainFromJwtMulti( +func CreateEntityChainsFromTokens( ctx context.Context, - req *ersV2.CreateEntityChainFromJwtMultiRequest, - kcConfig keycloakV1.KeycloakConfig, + req *entityresolutionV2.CreateEntityChainsFromTokensRequest, + kcConfig KeycloakConfig, logger *logger.Logger, -) (*ersV2.CreateEntityChainFromJwtMultiResponse, error) { - tokens := req.GetToken() - entityChains := make([]*authz.EntityChain, 0, len(tokens)) +) (entityresolutionV2.CreateEntityChainsFromTokensResponse, error) { + entityChains := []*entity.EntityChain{} // for each token in the tokens form an entity chain - for idx, tok := range tokens { + for _, tok := range req.GetTokens() { entities, err := getEntitiesFromToken(ctx, kcConfig, tok.GetJwt(), logger) if err != nil { - return nil, err + return entityresolutionV2.CreateEntityChainsFromTokensResponse{}, err } - entityChains[idx] = &authz.EntityChain{EphemeralChainId: tok.GetId(), Entities: entities} + entityChains = append(entityChains, &entity.EntityChain{EphemeralId: tok.GetEphemeralId(), Entities: entities}) } - return &ersV2.CreateEntityChainFromJwtMultiResponse{EntityChains: entityChains}, nil + return entityresolutionV2.CreateEntityChainsFromTokensResponse{EntityChains: entityChains}, nil } func EntityResolution(ctx context.Context, - req *ersV2.ResolveEntitiesRequest, kcConfig keycloakV1.KeycloakConfig, logger *logger.Logger, -) (*ersV2.ResolveEntitiesResponse, error) { + req *entityresolutionV2.ResolveEntitiesRequest, kcConfig KeycloakConfig, logger *logger.Logger, +) (entityresolutionV2.ResolveEntitiesResponse, error) { connector, err := getKCClient(ctx, kcConfig, logger) if err != nil { - return nil, + return entityresolutionV2.ResolveEntitiesResponse{}, connect.NewError(connect.CodeInternal, ErrCreationFailed) } - payload := req.GetEntitiesV2() + payload := req.GetEntities() - var resolvedEntities []*entityresolution.EntityRepresentation + var resolvedEntities []*entityresolutionV2.EntityRepresentation for idx, ident := range payload { logger.Debug("lookup", "entity", ident.GetEntityType()) + var keycloakEntities []*gocloak.User + var getUserParams gocloak.GetUsersParams + exactMatch := true switch ident.GetEntityType().(type) { - case *authz.Entity_ClientId: - entityRep, err := handleClientIDResolution(ctx, ident, idx, connector, kcConfig, logger) - if err != nil { - return nil, err - } - resolvedEntities = append(resolvedEntities, entityRep) - case *authz.Entity_EmailAddress, *authz.Entity_UserName: - entityRep, err := handleUserResolution(ctx, ident, idx, connector, kcConfig, logger) + case *entity.Entity_ClientId: + logger.Debug("looking up", slog.Any("type", ident.GetEntityType()), slog.String("client_id", ident.GetClientId())) + clientID := ident.GetClientId() + clients, err := connector.client.GetClients(ctx, connector.token.AccessToken, kcConfig.Realm, gocloak.GetClientsParams{ + ClientID: &clientID, + }) if err != nil { - return nil, err + logger.Error("error getting client info", slog.String("error", err.Error())) + return entityresolutionV2.ResolveEntitiesResponse{}, + connect.NewError(connect.CodeInternal, ErrGetRetrievalFailed) } - resolvedEntities = append(resolvedEntities, entityRep) - } - logger.Debug("entities", slog.Any("resolved", resolvedEntities)) - } - - return &ersV2.ResolveEntitiesResponse{ - EntityRepresentations: resolvedEntities, - }, nil -} - -// handleClientIDResolution specifically handles ClientID resolution -func handleClientIDResolution(ctx context.Context, ident *authz.Entity, idx int, connector *KeyCloakConnector, kcConfig keycloakV1.KeycloakConfig, logger *logger.Logger) (*entityresolution.EntityRepresentation, error) { - logger.Debug("looking up", slog.Any("type", ident.GetEntityType()), slog.String("client_id", ident.GetClientId())) - clientID := ident.GetClientId() - clients, err := connector.client.GetClients(ctx, connector.token.AccessToken, kcConfig.Realm, gocloak.GetClientsParams{ - ClientID: &clientID, - }) - if err != nil { - logger.Error("error getting client info", slog.String("error", err.Error())) - return nil, connect.NewError(connect.CodeInternal, ErrGetRetrievalFailed) - } - - var jsonEntities []*structpb.Struct - for _, client := range clients { - json, err := typeToGenericJSONMap(client, logger) - if err != nil { - return nil, errorHandler(ctx, logger, connect.CodeInternal, err, "error serializing entity representation") - } - mystruct, structErr := structpb.NewStruct(json) - if structErr != nil { - return nil, errorHandler(ctx, logger, connect.CodeInternal, structErr, "error making struct") - } - jsonEntities = append(jsonEntities, mystruct) - } - - if len(clients) == 0 && kcConfig.InferID.From.ClientID { - // convert entity to json - entityStruct, err := entityToStructPb(ident) - if err != nil { - return nil, errorHandler(ctx, logger, connect.CodeInternal, err, "unable to make entity struct") - } - jsonEntities = append(jsonEntities, entityStruct) - } - - // make sure the id field is populated - originalID := ident.GetEphemeralId() - if originalID == "" { - originalID = auth.EntityIDPrefix + strconv.Itoa(idx) - } - - return &entityresolution.EntityRepresentation{ - OriginalId: originalID, - AdditionalProps: jsonEntities, - }, nil -} - -// handleUserResolution handles resolution for username and email -func handleUserResolution(ctx context.Context, ident *authz.Entity, idx int, connector *KeyCloakConnector, kcConfig keycloakV1.KeycloakConfig, logger *logger.Logger) (*entityresolution.EntityRepresentation, error) { - var getUserParams gocloak.GetUsersParams - exactMatch := true - - switch ident.GetEntityType().(type) { - case *authz.Entity_EmailAddress: - getUserParams = gocloak.GetUsersParams{Email: func() *string { t := ident.GetEmailAddress(); return &t }(), Exact: &exactMatch} - case *authz.Entity_UserName: - getUserParams = gocloak.GetUsersParams{Username: func() *string { t := ident.GetUserName(); return &t }(), Exact: &exactMatch} - } - - var jsonEntities []*structpb.Struct - users, err := connector.client.GetUsers(ctx, connector.token.AccessToken, kcConfig.Realm, getUserParams) - - if err != nil { - return nil, errorHandler(ctx, logger, connect.CodeInternal, err, "error getting users") - } - - if len(users) == 1 { - user := users[0] - logger.Debug("user found", slog.String("user", *user.ID), slog.String("entity", ident.String())) - logger.Debug("user", slog.Any("details", user)) - logger.Debug("user", slog.Any("attributes", user.Attributes)) - - json, err := typeToGenericJSONMap(user, logger) - if err != nil { - return nil, errorHandler(ctx, logger, connect.CodeInternal, err, "error serializing entity representation") - } - - mystruct, structErr := structpb.NewStruct(json) - if structErr != nil { - return nil, errorHandler(ctx, logger, connect.CodeInternal, structErr, "error making struct") - } - - jsonEntities = append(jsonEntities, mystruct) - } else { - // No user found, try alternatives - entityRep, err := handleEntityNotFound(ctx, ident, connector, kcConfig, logger) - if err != nil { - return nil, err - } - if entityRep != nil { - jsonEntities = entityRep - } - } - - // Make sure the id field is populated - originalID := ident.GetEphemeralId() - if originalID == "" { - originalID = auth.EntityIDPrefix + strconv.Itoa(idx) - } - - return &entityresolution.EntityRepresentation{ - OriginalId: originalID, - AdditionalProps: jsonEntities, - }, nil -} - -// handleEntityNotFound handles the case when no user is found directly -func handleEntityNotFound(ctx context.Context, ident *authz.Entity, connector *KeyCloakConnector, kcConfig keycloakV1.KeycloakConfig, logger *logger.Logger) ([]*structpb.Struct, error) { - var jsonEntities []*structpb.Struct - - if ident.GetEmailAddress() != "" { - // Try by group - groups, groupErr := connector.client.GetGroups( - ctx, - connector.token.AccessToken, - kcConfig.Realm, - gocloak.GetGroupsParams{Search: func() *string { t := ident.GetEmailAddress(); return &t }()}, - ) - - if groupErr != nil { - return nil, errorHandler(ctx, logger, connect.CodeInternal, groupErr, "error getting group") - } - - if len(groups) == 1 { - logger.Info("group found for", slog.String("entity", ident.String())) - group := groups[0] - expandedUsers, exErr := expandGroup(ctx, *group.ID, connector, &kcConfig, logger) - if exErr != nil { - return nil, connect.NewError(connect.CodeNotFound, ErrNotFound) - } - - for _, user := range expandedUsers { - json, err := typeToGenericJSONMap(user, logger) + var jsonEntities []*structpb.Struct + for _, client := range clients { + json, err := typeToGenericJSONMap(client, logger) if err != nil { - return nil, errorHandler(ctx, logger, connect.CodeInternal, err, "error serializing entity representation") + logger.Error("error serializing entity representation!", slog.String("error", err.Error())) + return entityresolutionV2.ResolveEntitiesResponse{}, + connect.NewError(connect.CodeInternal, ErrCreationFailed) } - mystruct, structErr := structpb.NewStruct(json) if structErr != nil { - return nil, errorHandler(ctx, logger, connect.CodeInternal, structErr, "error making struct") + logger.Error("error making struct!", slog.String("error", structErr.Error())) + return entityresolutionV2.ResolveEntitiesResponse{}, + connect.NewError(connect.CodeInternal, ErrCreationFailed) } - jsonEntities = append(jsonEntities, mystruct) } - return jsonEntities, nil + if len(clients) == 0 && kcConfig.InferID.From.ClientID { + // convert entity to json + entityStruct, err := entityToStructPb(ident) + if err != nil { + logger.Error("unable to make entity struct", slog.String("error", err.Error())) + return entityresolutionV2.ResolveEntitiesResponse{}, connect.NewError(connect.CodeInternal, ErrCreationFailed) + } + jsonEntities = append(jsonEntities, entityStruct) + } + // make sure the id field is populated + originialID := ident.GetEphemeralId() + if originialID == "" { + originialID = auth.EntityIDPrefix + strconv.Itoa(idx) + } + resolvedEntities = append( + resolvedEntities, + &entityresolutionV2.EntityRepresentation{ + OriginalId: originialID, + AdditionalProps: jsonEntities, + }, + ) + continue + case *entity.Entity_EmailAddress: + getUserParams = gocloak.GetUsersParams{Email: func() *string { t := ident.GetEmailAddress(); return &t }(), Exact: &exactMatch} + case *entity.Entity_UserName: + getUserParams = gocloak.GetUsersParams{Username: func() *string { t := ident.GetUserName(); return &t }(), Exact: &exactMatch} } - // No group found, check if we should infer identity - if kcConfig.InferID.From.Email { - entityStruct, err := entityToStructPb(ident) - if err != nil { - return nil, errorHandler(ctx, logger, connect.CodeInternal, err, "unable to make entity struct from email") + var jsonEntities []*structpb.Struct + users, err := connector.client.GetUsers(ctx, connector.token.AccessToken, kcConfig.Realm, getUserParams) + switch { + case err != nil: + logger.Error(err.Error()) + return entityresolutionV2.ResolveEntitiesResponse{}, + connect.NewError(connect.CodeInternal, ErrGetRetrievalFailed) + case len(users) == 1: + user := users[0] + logger.Debug("user found", slog.String("user", *user.ID), slog.String("entity", ident.String())) + logger.Debug("user", slog.Any("details", user)) + logger.Debug("user", slog.Any("attributes", user.Attributes)) + keycloakEntities = append(keycloakEntities, user) + default: + logger.Error("no user found for", slog.Any("entity", ident)) + if ident.GetEmailAddress() != "" { //nolint:nestif // this case has many possible outcomes to handle + // try by group + groups, groupErr := connector.client.GetGroups( + ctx, + connector.token.AccessToken, + kcConfig.Realm, + gocloak.GetGroupsParams{Search: func() *string { t := ident.GetEmailAddress(); return &t }()}, + ) + switch { + case groupErr != nil: + logger.Error("error getting group", slog.String("group", groupErr.Error())) + return entityresolutionV2.ResolveEntitiesResponse{}, + connect.NewError(connect.CodeInternal, ErrGetRetrievalFailed) + case len(groups) == 1: + logger.Info("group found for", slog.String("entity", ident.String())) + group := groups[0] + expandedRepresentations, exErr := expandGroup(ctx, *group.ID, connector, &kcConfig, logger) + if exErr != nil { + return entityresolutionV2.ResolveEntitiesResponse{}, + connect.NewError(connect.CodeNotFound, ErrNotFound) + } + keycloakEntities = expandedRepresentations + default: + logger.Error("no group found for", slog.String("entity", ident.String())) + var entityNotFoundErr entityresolutionV2.EntityNotFoundError + switch ident.GetEntityType().(type) { + case *entity.Entity_EmailAddress: + entityNotFoundErr = entityresolutionV2.EntityNotFoundError{Code: int32(connect.CodeNotFound), Message: ErrGetRetrievalFailed.Error(), Entity: ident.GetEmailAddress()} + case *entity.Entity_UserName: + entityNotFoundErr = entityresolutionV2.EntityNotFoundError{Code: int32(connect.CodeNotFound), Message: ErrGetRetrievalFailed.Error(), Entity: ident.GetUserName()} + // case "": + // return &entityresolutionV2.IdpPluginResponse{}, + // status.Error(codes.InvalidArgument, db.ErrTextNotFound) + default: + logger.Error("unsupported/unknown type for", slog.String("entity", ident.String())) + entityNotFoundErr = entityresolutionV2.EntityNotFoundError{Code: int32(codes.NotFound), Message: ErrGetRetrievalFailed.Error(), Entity: ident.String()} + } + logger.Error(entityNotFoundErr.String()) + if kcConfig.InferID.From.Email || kcConfig.InferID.From.Username { + // user not found -- add json entity to resp instead + entityStruct, err := entityToStructPb(ident) + if err != nil { + logger.Error("unable to make entity struct from email or username", slog.String("error", err.Error())) + return entityresolutionV2.ResolveEntitiesResponse{}, connect.NewError(connect.CodeInternal, ErrCreationFailed) + } + jsonEntities = append(jsonEntities, entityStruct) + } else { + return entityresolutionV2.ResolveEntitiesResponse{}, connect.NewError(connect.Code(entityNotFoundErr.GetCode()), ErrGetRetrievalFailed) + } + } + } else if ident.GetUserName() != "" { + if kcConfig.InferID.From.Username { + // user not found -- add json entity to resp instead + entityStruct, err := entityToStructPb(ident) + if err != nil { + logger.Error("unable to make entity struct from username", slog.String("error", err.Error())) + return entityresolutionV2.ResolveEntitiesResponse{}, connect.NewError(connect.CodeInternal, ErrCreationFailed) + } + jsonEntities = append(jsonEntities, entityStruct) + } else { + entityNotFoundErr := entityresolutionV2.EntityNotFoundError{Code: int32(codes.NotFound), Message: ErrGetRetrievalFailed.Error(), Entity: ident.GetUserName()} + return entityresolutionV2.ResolveEntitiesResponse{}, connect.NewError(connect.Code(entityNotFoundErr.GetCode()), ErrGetRetrievalFailed) + } } - return []*structpb.Struct{entityStruct}, nil } - // Neither user nor group found and inference not enabled - entityNotFoundErr := entityresolution.EntityNotFoundError{ - Code: int32(connect.CodeNotFound), - Message: ErrGetRetrievalFailed.Error(), - Entity: ident.GetEmailAddress(), - } - return nil, connect.NewError(connect.Code(entityNotFoundErr.GetCode()), ErrGetRetrievalFailed) - } else if ident.GetUserName() != "" { - if kcConfig.InferID.From.Username { - // User not found but inference enabled - entityStruct, err := entityToStructPb(ident) + for _, er := range keycloakEntities { + json, err := typeToGenericJSONMap(er, logger) if err != nil { - return nil, errorHandler(ctx, logger, connect.CodeInternal, err, "unable to make entity struct from username") + logger.Error("error serializing entity representation!", slog.String("error", err.Error())) + return entityresolutionV2.ResolveEntitiesResponse{}, + connect.NewError(connect.CodeInternal, ErrCreationFailed) + } + mystruct, structErr := structpb.NewStruct(json) + if structErr != nil { + logger.Error("error making struct!", slog.String("error", structErr.Error())) + return entityresolutionV2.ResolveEntitiesResponse{}, + connect.NewError(connect.CodeInternal, ErrCreationFailed) } - return []*structpb.Struct{entityStruct}, nil + jsonEntities = append(jsonEntities, mystruct) } - - // User not found and inference not enabled - entityNotFoundErr := entityresolution.EntityNotFoundError{ - Code: int32(codes.NotFound), - Message: ErrGetRetrievalFailed.Error(), - Entity: ident.GetUserName(), + // make sure the id field is populated + originialID := ident.GetEphemeralId() + if originialID == "" { + originialID = auth.EntityIDPrefix + strconv.Itoa(idx) } - return nil, connect.NewError(connect.Code(entityNotFoundErr.GetCode()), ErrGetRetrievalFailed) + resolvedEntities = append( + resolvedEntities, + &entityresolutionV2.EntityRepresentation{ + OriginalId: originialID, + AdditionalProps: jsonEntities, + }, + ) + logger.Debug("entities", slog.Any("resolved", resolvedEntities)) } - return nil, nil + return entityresolutionV2.ResolveEntitiesResponse{ + EntityRepresentations: resolvedEntities, + }, nil } func typeToGenericJSONMap[Marshalable any](inputStruct Marshalable, logger *logger.Logger) (map[string]interface{}, error) { @@ -383,7 +334,7 @@ func typeToGenericJSONMap[Marshalable any](inputStruct Marshalable, logger *logg return genericMap, nil } -func getKCClient(ctx context.Context, kcConfig keycloakV1.KeycloakConfig, logger *logger.Logger) (*KeyCloakConnector, error) { +func getKCClient(ctx context.Context, kcConfig KeycloakConfig, logger *logger.Logger) (*KeyCloakConnector, error) { var client *gocloak.GoCloak if kcConfig.LegacyKeycloak { logger.Warn("using legacy connection mode for Keycloak < 17.x.x") @@ -412,7 +363,7 @@ func getKCClient(ctx context.Context, kcConfig keycloakV1.KeycloakConfig, logger return &keycloakConnector, nil } -func expandGroup(ctx context.Context, groupID string, kcConnector *KeyCloakConnector, kcConfig *keycloakV1.KeycloakConfig, logger *logger.Logger) ([]*gocloak.User, error) { +func expandGroup(ctx context.Context, groupID string, kcConnector *KeyCloakConnector, kcConfig *KeycloakConfig, logger *logger.Logger) ([]*gocloak.User, error) { logger.Info("expanding group", slog.String("groupID", groupID)) var entityRepresentations []*gocloak.User @@ -436,7 +387,7 @@ func expandGroup(ctx context.Context, groupID string, kcConnector *KeyCloakConne return entityRepresentations, nil } -func getEntitiesFromToken(ctx context.Context, kcConfig keycloakV1.KeycloakConfig, jwtString string, logger *logger.Logger) ([]*authz.Entity, error) { +func getEntitiesFromToken(ctx context.Context, kcConfig KeycloakConfig, jwtString string, logger *logger.Logger) ([]*entity.Entity, error) { token, err := jwt.ParseString(jwtString, jwt.WithVerify(false), jwt.WithValidate(false)) if err != nil { return nil, errors.New("error parsing jwt " + err.Error()) @@ -445,7 +396,7 @@ func getEntitiesFromToken(ctx context.Context, kcConfig keycloakV1.KeycloakConfi if err != nil { return nil, errors.New("error getting claims from jwt") } - entities := []*authz.Entity{} + entities := []*entity.Entity{} entityID := 0 // extract azp @@ -457,10 +408,10 @@ func getEntitiesFromToken(ctx context.Context, kcConfig keycloakV1.KeycloakConfi if !okCast { return nil, errors.New("error casting extracted value to string") } - entities = append(entities, &authz.Entity{ - EntityType: &authz.Entity_ClientId{ClientId: extractedValueCasted}, + entities = append(entities, &entity.Entity{ + EntityType: &entity.Entity_ClientId{ClientId: extractedValueCasted}, EphemeralId: fmt.Sprintf("jwtentity-%d-clientid-%s", entityID, extractedValueCasted), - Category: authz.Entity_CATEGORY_ENVIRONMENT, + Category: entity.Entity_CATEGORY_ENVIRONMENT, }) entityID++ @@ -480,31 +431,31 @@ func getEntitiesFromToken(ctx context.Context, kcConfig keycloakV1.KeycloakConfi return nil, err } if clientid != "" { - entities = append(entities, &authz.Entity{ - EntityType: &authz.Entity_ClientId{ClientId: clientid}, + entities = append(entities, &entity.Entity{ + EntityType: &entity.Entity_ClientId{ClientId: clientid}, EphemeralId: fmt.Sprintf("jwtentity-%d-clientid-%s", entityID, clientid), - Category: authz.Entity_CATEGORY_SUBJECT, + Category: entity.Entity_CATEGORY_SUBJECT, }) } else { // if the returned clientId is empty, no client found, its not a serive account proceed with username - entities = append(entities, &authz.Entity{ - EntityType: &authz.Entity_UserName{UserName: extractedValueUsernameCasted}, + entities = append(entities, &entity.Entity{ + EntityType: &entity.Entity_UserName{UserName: extractedValueUsernameCasted}, EphemeralId: fmt.Sprintf("jwtentity-%d-username-%s", entityID, extractedValueUsernameCasted), - Category: authz.Entity_CATEGORY_SUBJECT, + Category: entity.Entity_CATEGORY_SUBJECT, }) } } else { - entities = append(entities, &authz.Entity{ - EntityType: &authz.Entity_UserName{UserName: extractedValueUsernameCasted}, + entities = append(entities, &entity.Entity{ + EntityType: &entity.Entity_UserName{UserName: extractedValueUsernameCasted}, EphemeralId: fmt.Sprintf("jwtentity-%d-username-%s", entityID, extractedValueUsernameCasted), - Category: authz.Entity_CATEGORY_SUBJECT, + Category: entity.Entity_CATEGORY_SUBJECT, }) } return entities, nil } -func getServiceAccountClient(ctx context.Context, username string, kcConfig keycloakV1.KeycloakConfig, logger *logger.Logger) (string, error) { +func getServiceAccountClient(ctx context.Context, username string, kcConfig KeycloakConfig, logger *logger.Logger) (string, error) { connector, err := getKCClient(ctx, kcConfig, logger) if err != nil { return "", err @@ -531,7 +482,7 @@ func getServiceAccountClient(ctx context.Context, username string, kcConfig keyc return "", nil } -func entityToStructPb(ident *authz.Entity) (*structpb.Struct, error) { +func entityToStructPb(ident *entity.Entity) (*structpb.Struct, error) { entityBytes, err := protojson.Marshal(ident) if err != nil { return nil, err diff --git a/service/entityresolution/keycloak/v2/entity_resolution_test.go b/service/entityresolution/keycloak/v2/entity_resolution_test.go new file mode 100644 index 0000000000..3225b204d9 --- /dev/null +++ b/service/entityresolution/keycloak/v2/entity_resolution_test.go @@ -0,0 +1,587 @@ +package keycloak_test + +import ( + "encoding/json" + "io" + "net/http" + "net/http/httptest" + "os" + "strings" + "testing" + + "connectrpc.com/connect" + "github.com/opentdf/platform/protocol/go/entity" + entityresolutionV2 "github.com/opentdf/platform/protocol/go/entityresolution/v2" + keycloak "github.com/opentdf/platform/service/entityresolution/keycloak/v2" + "github.com/opentdf/platform/service/logger" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "google.golang.org/grpc/codes" +) + +const tokenResp string = ` +{ + "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c", + "token_type": "Bearer", + "expires_in": 3600, +}` + +const byEmailBobResp = `[ +{"id": "bobid", "username":"bob.smith"} +] +` + +const byEmailAliceResp = `[ +{"id": "aliceid", "username":"alice.smith"} +] +` + +const byUsernameBobResp = `[ +{"id": "bobid", "username":"bob.smith"} +]` + +const byUsernameAliceResp = `[ +{"id": "aliceid", "username":"alice.smith"} +]` + +const groupSubmemberResp = `[ + {"id": "bobid", "username":"bob.smith"}, + {"id": "aliceid", "username":"alice.smith"} +]` + +const groupResp = `{ + "id": "group1-uuid", + "name": "group1" +}` + +const byClientIDOpentdfSdkResp = `[ +{"id": "opentdfsdkclient", "clientId":"opentdf-sdk"} +] +` + +const byClientIDTDFEntityResResp = `[ +{"id": "tdf-entity-resolution", "clientId":"tdf-entity-resolution"} +] +` + +const ( + clientCredentialsJwt = "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI0OXRmSjByRUo4c0YzUjJ3Yi05eENHVXhYUEQ4RTZldmNsRG1hZ05EM3lBIn0.eyJleHAiOjE3MTUwOTE2MDQsImlhdCI6MTcxNTA5MTMwNCwianRpIjoiMTE3MTYzMjYtNWQyNS00MjlmLWFjMDItNmU0MjE2OWFjMGJhIiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4ODg4L2F1dGgvcmVhbG1zL29wZW50ZGYiLCJhdWQiOlsiaHR0cDovL2xvY2FsaG9zdDo4ODg4IiwicmVhbG0tbWFuYWdlbWVudCIsImFjY291bnQiXSwic3ViIjoiOTljOWVlZDItOTM1Ni00ZjE2LWIwODQtZTgyZDczZjViN2QyIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoidGRmLWVudGl0eS1yZXNvbHV0aW9uIiwiYWNyIjoiMSIsInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJkZWZhdWx0LXJvbGVzLW9wZW50ZGYiLCJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIl19LCJyZXNvdXJjZV9hY2Nlc3MiOnsicmVhbG0tbWFuYWdlbWVudCI6eyJyb2xlcyI6WyJ2aWV3LXVzZXJzIiwidmlldy1jbGllbnRzIiwicXVlcnktY2xpZW50cyIsInF1ZXJ5LWdyb3VwcyIsInF1ZXJ5LXVzZXJzIl19LCJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImNsaWVudEhvc3QiOiIxOTIuMTY4LjI0MC4xIiwicHJlZmVycmVkX3VzZXJuYW1lIjoic2VydmljZS1hY2NvdW50LXRkZi1lbnRpdHktcmVzb2x1dGlvbiIsImNsaWVudEFkZHJlc3MiOiIxOTIuMTY4LjI0MC4xIiwiY2xpZW50X2lkIjoidGRmLWVudGl0eS1yZXNvbHV0aW9uIn0.h29QLo-QvIc67KKqU_e1-x6G_o5YQccOyW9AthMdB7xhn9C1dBrcScytaWq1RfETPmnM8MXGezqN4OpXrYr-zbkHhq9ha0Ib-M1VJXNgA5sbgKW9JxGQyudmYPgn4fimDCJtAsXo7C-e3mYNm6DJS0zhGQ3msmjLTcHmIPzWlj7VjtPgKhYV75b7yr_yZNBdHjf3EZqfynU2sL8bKa1w7DYDNQve7ThtD4MeKLiuOQHa3_23dECs_ptvPVks7pLGgRKfgGHBC-KQuopjtxIhwkz2vOWRzugDl0aBJMHfwBajYhgZ2YRlV9dqSxmy8BOj4OEXuHbiyfIpY0rCRpSrGg" + passwordPubClientJwt = "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI0OXRmSjByRUo4c0YzUjJ3Yi05eENHVXhYUEQ4RTZldmNsRG1hZ05EM3lBIn0.eyJleHAiOjE3MTUwOTE0ODAsImlhdCI6MTcxNTA5MTE4MCwianRpIjoiZmI5MmM2MTAtYmI0OC00ZDgyLTljZGQtOWFhZjllNzEyNzc3IiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4ODg4L2F1dGgvcmVhbG1zL29wZW50ZGYiLCJhdWQiOlsiaHR0cDovL2xvY2FsaG9zdDo4ODg4IiwidGRmLWVudGl0eS1yZXNvbHV0aW9uIiwicmVhbG0tbWFuYWdlbWVudCIsImFjY291bnQiXSwic3ViIjoiMmU2YzE1ODAtY2ZkMy00M2FiLWIxNzMtZjZjM2JmOGZmNGUyIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoidGRmLWVudGl0eS1yZXNvbHV0aW9uLXB1YmxpYyIsInNlc3Npb25fc3RhdGUiOiIzN2E3YjdiOS0xZmNlLTQxMmYtOTI1OS1lYzUxMTY3MGVhMGYiLCJhY3IiOiIxIiwiYWxsb3dlZC1vcmlnaW5zIjpbIi8qIl0sInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJvcGVudGRmLW9yZy1hZG1pbiIsImRlZmF1bHQtcm9sZXMtb3BlbnRkZiIsIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJ0ZGYtZW50aXR5LXJlc29sdXRpb24iOnsicm9sZXMiOlsiZW50aXR5LXJlc29sdXRpb24tdGVzdC1yb2xlIl19LCJyZWFsbS1tYW5hZ2VtZW50Ijp7InJvbGVzIjpbInZpZXctdXNlcnMiLCJ2aWV3LWNsaWVudHMiLCJxdWVyeS1jbGllbnRzIiwicXVlcnktZ3JvdXBzIiwicXVlcnktdXNlcnMiXX0sImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoicHJvZmlsZSBlbWFpbCIsInNpZCI6IjM3YTdiN2I5LTFmY2UtNDEyZi05MjU5LWVjNTExNjcwZWEwZiIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwibmFtZSI6InNhbXBsZSB1c2VyIiwicHJlZmVycmVkX3VzZXJuYW1lIjoic2FtcGxlLXVzZXIiLCJnaXZlbl9uYW1lIjoic2FtcGxlIiwiZmFtaWx5X25hbWUiOiJ1c2VyIiwiZW1haWwiOiJzYW1wbGV1c2VyQHNhbXBsZS5jb20ifQ.Gd_OvPNY7UfY7sBKh55TcvWQHmAkYZ2Jb2VyK1lYgse9EBEa_y3uoepZYrGMGkmYdwApg4eauQjxzT_BZYVBc7u9ch3HY_IUuSh3A6FkDDXZIziByP63FYiI4vKTp0w7e2-oYAdaUTDJ1Y50-l_VvRWjdc4fqi-OKH4t8D1rlq0GJ-P7uOl44Ta43YdBMuXI146-eLqx_zLIC49Pg5Y7MD_Lv23QfGTHTP47ckUQueXoGegNLQNE9nPTuD6lNzHD5_MOqse4IKzoWVs_hs4S8SqVxVlN_ZWXkcGhPllfQtf1qxLyFm51eYH3LGxqyNbGr4nQc8djPV0yWqOTrg8IYQ" + passwordPrivClientJwt = "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI0OXRmSjByRUo4c0YzUjJ3Yi05eENHVXhYUEQ4RTZldmNsRG1hZ05EM3lBIn0.eyJleHAiOjE3MTUwOTE0MjMsImlhdCI6MTcxNTA5MTEyMywianRpIjoiMTNhNDljZmQtOGRiZC00NTA2LTk1NGMtZWFmZGRkNGE4ZTdjIiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4ODg4L2F1dGgvcmVhbG1zL29wZW50ZGYiLCJhdWQiOlsiaHR0cDovL2xvY2FsaG9zdDo4ODg4IiwicmVhbG0tbWFuYWdlbWVudCIsImFjY291bnQiXSwic3ViIjoiMmU2YzE1ODAtY2ZkMy00M2FiLWIxNzMtZjZjM2JmOGZmNGUyIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoidGRmLWVudGl0eS1yZXNvbHV0aW9uIiwic2Vzc2lvbl9zdGF0ZSI6ImNmZjYwZDZmLWI2M2MtNDBhYy1hYjI3LWFjZmU4MjY5OWQyYSIsImFjciI6IjEiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib3BlbnRkZi1vcmctYWRtaW4iLCJkZWZhdWx0LXJvbGVzLW9wZW50ZGYiLCJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIl19LCJyZXNvdXJjZV9hY2Nlc3MiOnsidGRmLWVudGl0eS1yZXNvbHV0aW9uIjp7InJvbGVzIjpbImVudGl0eS1yZXNvbHV0aW9uLXRlc3Qtcm9sZSJdfSwicmVhbG0tbWFuYWdlbWVudCI6eyJyb2xlcyI6WyJ2aWV3LXVzZXJzIiwidmlldy1jbGllbnRzIiwicXVlcnktY2xpZW50cyIsInF1ZXJ5LWdyb3VwcyIsInF1ZXJ5LXVzZXJzIl19LCJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJzaWQiOiJjZmY2MGQ2Zi1iNjNjLTQwYWMtYWIyNy1hY2ZlODI2OTlkMmEiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsIm5hbWUiOiJzYW1wbGUgdXNlciIsInByZWZlcnJlZF91c2VybmFtZSI6InNhbXBsZS11c2VyIiwiZ2l2ZW5fbmFtZSI6InNhbXBsZSIsImZhbWlseV9uYW1lIjoidXNlciIsImVtYWlsIjoic2FtcGxldXNlckBzYW1wbGUuY29tIn0.JFWKf7GZq1f8raP3Jm6rszpwPCh0JnaeZcHyC_AwcsNS6sJ9_qSY9wrbyHmvV9KIGMIPv23fymADZXb0ng7maeAv9NR34KiJqnKbmPeeWwL0cPoGOGOUICL6H5x1iTw7XaMDN2WQRrBRFuUkudybEF8n6fEGsAvcsXViaHjYwJyIEYCnHKPzuTvM1RjyGFsERpFXKls4UB_KhMBEonr4JOskupmX1pADBuicTNx_4whnd6ZDfiF5SSBohFV1ikwFOXK-qZ7znQfE-RJ-jV1CXBgEK8O66TMbMw9MbasS25xKoO0mH1_Ohf9niSXsY02o2qjGFZA9sWRk7K7pNgsxUw" + authPubClientJwt = "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI0OXRmSjByRUo4c0YzUjJ3Yi05eENHVXhYUEQ4RTZldmNsRG1hZ05EM3lBIn0.eyJleHAiOjE3MTUwOTI2NDcsImlhdCI6MTcxNTA5MjM0NywiYXV0aF90aW1lIjoxNzE1MDkyMzQ3LCJqdGkiOiI3NzkwZmVhNC1hNzcyLTRhZTMtOTcyMi0yMTU2MmQyZGM5YmYiLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojg4ODgvYXV0aC9yZWFsbXMvb3BlbnRkZiIsImF1ZCI6WyJodHRwOi8vbG9jYWxob3N0Ojg4ODgiLCJ0ZGYtZW50aXR5LXJlc29sdXRpb24iLCJyZWFsbS1tYW5hZ2VtZW50IiwiYWNjb3VudCJdLCJzdWIiOiIyZTZjMTU4MC1jZmQzLTQzYWItYjE3My1mNmMzYmY4ZmY0ZTIiLCJ0eXAiOiJCZWFyZXIiLCJhenAiOiJ0ZGYtZW50aXR5LXJlc29sdXRpb24tcHVibGljIiwic2Vzc2lvbl9zdGF0ZSI6ImFmNmViOTRiLWU4ZDQtNDNlYi1hYzYwLTI3YmZiYjNiOTQxZSIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOltdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib3BlbnRkZi1vcmctYWRtaW4iLCJkZWZhdWx0LXJvbGVzLW9wZW50ZGYiLCJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIl19LCJyZXNvdXJjZV9hY2Nlc3MiOnsidGRmLWVudGl0eS1yZXNvbHV0aW9uIjp7InJvbGVzIjpbImVudGl0eS1yZXNvbHV0aW9uLXRlc3Qtcm9sZSJdfSwicmVhbG0tbWFuYWdlbWVudCI6eyJyb2xlcyI6WyJ2aWV3LXVzZXJzIiwidmlldy1jbGllbnRzIiwicXVlcnktY2xpZW50cyIsInF1ZXJ5LWdyb3VwcyIsInF1ZXJ5LXVzZXJzIl19LCJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6Im9wZW5pZCBwcm9maWxlIGVtYWlsIiwic2lkIjoiYWY2ZWI5NGItZThkNC00M2ViLWFjNjAtMjdiZmJiM2I5NDFlIiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJuYW1lIjoic2FtcGxlIHVzZXIiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJzYW1wbGUtdXNlciIsImdpdmVuX25hbWUiOiJzYW1wbGUiLCJmYW1pbHlfbmFtZSI6InVzZXIiLCJlbWFpbCI6InNhbXBsZXVzZXJAc2FtcGxlLmNvbSJ9.BfCX_fq2Q6cv5qb6TWzyCNiJf1vFw_iA4UTKr21ahUiNItNSW5ozET2jSLwKNAuMdBNrooU--OV1NniDcviIAMReaAEgjmAyBz6OSwAh3SmxzIU9Zy7f4V032FLDcVVoJ7CefItfBNu7WnWFGS7CYahNX_M2a6LXKhk7WRO4gQ2Ig11gtODlAP8jwLLAMU4_H9mVHD3LXd-IeOsnA8ZuBCq1DeFcn5T9tNZEGe0_21lp8spxoub0MRl-vYbgxEIoaeqxoSipb2hOjF7h0h1uaNhZT4m5ynHdd5yfspD8XjjjwlbXQn9Z8vrZUQQS6HLAi2pJIFNEoYxQk9lHal6VUA" + authPrivClientJwt = "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI0OXRmSjByRUo4c0YzUjJ3Yi05eENHVXhYUEQ4RTZldmNsRG1hZ05EM3lBIn0.eyJleHAiOjE3MTUwOTI3NDAsImlhdCI6MTcxNTA5MjQ0MCwiYXV0aF90aW1lIjoxNzE1MDkyNDQwLCJqdGkiOiIzZjk2ZDhjNC0yMjRkLTQyNjAtYmVkMy1lOGY2N2IwYTJjM2EiLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojg4ODgvYXV0aC9yZWFsbXMvb3BlbnRkZiIsImF1ZCI6WyJodHRwOi8vbG9jYWxob3N0Ojg4ODgiLCJyZWFsbS1tYW5hZ2VtZW50IiwiYWNjb3VudCJdLCJzdWIiOiIyZTZjMTU4MC1jZmQzLTQzYWItYjE3My1mNmMzYmY4ZmY0ZTIiLCJ0eXAiOiJCZWFyZXIiLCJhenAiOiJ0ZGYtZW50aXR5LXJlc29sdXRpb24iLCJzZXNzaW9uX3N0YXRlIjoiZDI1ZjhhZTMtYzE0Yy00ZWFmLTkzOWMtZjhlNGIyYmE1NDY3IiwiYWNyIjoiMSIsImFsbG93ZWQtb3JpZ2lucyI6W10sInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJvcGVudGRmLW9yZy1hZG1pbiIsImRlZmF1bHQtcm9sZXMtb3BlbnRkZiIsIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJ0ZGYtZW50aXR5LXJlc29sdXRpb24iOnsicm9sZXMiOlsiZW50aXR5LXJlc29sdXRpb24tdGVzdC1yb2xlIl19LCJyZWFsbS1tYW5hZ2VtZW50Ijp7InJvbGVzIjpbInZpZXctdXNlcnMiLCJ2aWV3LWNsaWVudHMiLCJxdWVyeS1jbGllbnRzIiwicXVlcnktZ3JvdXBzIiwicXVlcnktdXNlcnMiXX0sImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwiLCJzaWQiOiJkMjVmOGFlMy1jMTRjLTRlYWYtOTM5Yy1mOGU0YjJiYTU0NjciLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsIm5hbWUiOiJzYW1wbGUgdXNlciIsInByZWZlcnJlZF91c2VybmFtZSI6InNhbXBsZS11c2VyIiwiZ2l2ZW5fbmFtZSI6InNhbXBsZSIsImZhbWlseV9uYW1lIjoidXNlciIsImVtYWlsIjoic2FtcGxldXNlckBzYW1wbGUuY29tIn0.JphgIUbUeEEd25-Ji0o6_pcWvLzcQasCfr1z8WRt3xb1QrkN_d0_rmIpOJ9drhp8LjJPQRhFVxEU2TnAlYJ225IjPYolCrnEtKWsBbPJH9dP0cIJlilYplN4RZbmI9VbF578zAgVAs40n8aalNyxqYbPq_JViHDl_ufl4VEQ4Entzlp980I8whx3kfTygu0Yfl4eHLghPGt4LNPUmfeOIy8NKHbhmjHwKufrTmd0NV07cAOMUWl1NAF_4QWqmSqAY0SIcamwE7YlpuImzhj5PQH9tlyJMLr5m-k8CgKRfhpQ0H9cfVGUzWGG2A-lcNvxNmsk1kobmfHczjw13ajLKg" + implicitPrivClientJwt = "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI0OXRmSjByRUo4c0YzUjJ3Yi05eENHVXhYUEQ4RTZldmNsRG1hZ05EM3lBIn0.eyJleHAiOjE3MTUwOTM4MzgsImlhdCI6MTcxNTA5MjkzOCwiYXV0aF90aW1lIjoxNzE1MDkyOTM4LCJqdGkiOiI0ZWIzY2I1OS05ZDRhLTQwNjctYmI0YS1iMjNjNDVhMDIyYTIiLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojg4ODgvYXV0aC9yZWFsbXMvb3BlbnRkZiIsImF1ZCI6WyJodHRwOi8vbG9jYWxob3N0Ojg4ODgiLCJyZWFsbS1tYW5hZ2VtZW50IiwiYWNjb3VudCJdLCJzdWIiOiIyZTZjMTU4MC1jZmQzLTQzYWItYjE3My1mNmMzYmY4ZmY0ZTIiLCJ0eXAiOiJCZWFyZXIiLCJhenAiOiJ0ZGYtZW50aXR5LXJlc29sdXRpb24iLCJzZXNzaW9uX3N0YXRlIjoiYmE1OWFmOTgtNmE3YS00YjRhLTliOTItODU1M2ZkM2EwMTNjIiwiYWNyIjoiMSIsImFsbG93ZWQtb3JpZ2lucyI6W10sInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJvcGVudGRmLW9yZy1hZG1pbiIsImRlZmF1bHQtcm9sZXMtb3BlbnRkZiIsIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJ0ZGYtZW50aXR5LXJlc29sdXRpb24iOnsicm9sZXMiOlsiZW50aXR5LXJlc29sdXRpb24tdGVzdC1yb2xlIl19LCJyZWFsbS1tYW5hZ2VtZW50Ijp7InJvbGVzIjpbInZpZXctdXNlcnMiLCJ2aWV3LWNsaWVudHMiLCJxdWVyeS1jbGllbnRzIiwicXVlcnktZ3JvdXBzIiwicXVlcnktdXNlcnMiXX0sImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwiLCJzaWQiOiJiYTU5YWY5OC02YTdhLTRiNGEtOWI5Mi04NTUzZmQzYTAxM2MiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsIm5hbWUiOiJzYW1wbGUgdXNlciIsInByZWZlcnJlZF91c2VybmFtZSI6InNhbXBsZS11c2VyIiwiZ2l2ZW5fbmFtZSI6InNhbXBsZSIsImZhbWlseV9uYW1lIjoidXNlciIsImVtYWlsIjoic2FtcGxldXNlckBzYW1wbGUuY29tIn0.KQasyQ-f9KBRWRDXg4NikiHlragVil1nlYTQ8czPKku_uncpHZb7PMJhyPrwy72mwC10EJMpBIWGDVRfRjBRHxdzIbjozcGg3vusX748NMiDSlF4KoB5Fz-qExszcszEP5Qm_fvMRFcW7m9RPW9St1aaHcjAOW5Vee9ACJI56YffgqrTn1xp7ha2Z2X8d_NJfJOFdP3cqgxjR7DV5RezkDLRPfxHwJLk3anavSuDScXIO1w1C6AlTUQFVQUEX0DKZIt-RbzKcd6HWBfyDvHUSlfodEI_diWQIL1hEfrBXV6ThuhTqhrghHyIbb2e-zoC20arjMAK0Tr7hMAY4acxgQ" + implicitPubClientJwt = "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI0OXRmSjByRUo4c0YzUjJ3Yi05eENHVXhYUEQ4RTZldmNsRG1hZ05EM3lBIn0.eyJleHAiOjE3MTUxNTE0MTMsImlhdCI6MTcxNTE1MDUxMywiYXV0aF90aW1lIjoxNzE1MTUwNTEzLCJqdGkiOiJlYTRmOGZiYS01ZjljLTRiMzQtYmU1ZC1jNTk2ZGI4YzNlYzkiLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0Ojg4ODgvYXV0aC9yZWFsbXMvb3BlbnRkZiIsImF1ZCI6WyJodHRwOi8vbG9jYWxob3N0Ojg4ODgiLCJ0ZGYtZW50aXR5LXJlc29sdXRpb24iLCJyZWFsbS1tYW5hZ2VtZW50IiwiYWNjb3VudCJdLCJzdWIiOiIyZTZjMTU4MC1jZmQzLTQzYWItYjE3My1mNmMzYmY4ZmY0ZTIiLCJ0eXAiOiJCZWFyZXIiLCJhenAiOiJ0ZGYtZW50aXR5LXJlc29sdXRpb24tcHVibGljIiwic2Vzc2lvbl9zdGF0ZSI6ImRlM2U2ZDc1LTI3ODItNDg4NS1iYzU4LTU0MmJmYzEzNWNkNSIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOltdLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib3BlbnRkZi1vcmctYWRtaW4iLCJkZWZhdWx0LXJvbGVzLW9wZW50ZGYiLCJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIl19LCJyZXNvdXJjZV9hY2Nlc3MiOnsidGRmLWVudGl0eS1yZXNvbHV0aW9uIjp7InJvbGVzIjpbImVudGl0eS1yZXNvbHV0aW9uLXRlc3Qtcm9sZSJdfSwicmVhbG0tbWFuYWdlbWVudCI6eyJyb2xlcyI6WyJ2aWV3LXVzZXJzIiwidmlldy1jbGllbnRzIiwicXVlcnktY2xpZW50cyIsInF1ZXJ5LWdyb3VwcyIsInF1ZXJ5LXVzZXJzIl19LCJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6Im9wZW5pZCBwcm9maWxlIGVtYWlsIiwic2lkIjoiZGUzZTZkNzUtMjc4Mi00ODg1LWJjNTgtNTQyYmZjMTM1Y2Q1IiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJuYW1lIjoic2FtcGxlIHVzZXIiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJzYW1wbGUtdXNlciIsImdpdmVuX25hbWUiOiJzYW1wbGUiLCJmYW1pbHlfbmFtZSI6InVzZXIiLCJlbWFpbCI6InNhbXBsZXVzZXJAc2FtcGxlLmNvbSJ9.jH60V3ZkuiN6cuEmbRTspnxyOvQs_wNkgoBw9IEZ8E8yGzXDayouduxEd_O-DG6vjT4KPDxGC2lA0V4i-ke7KChkZhRYLkaSuqt2hTlKoLXotepJPq8GBlXhWjCmFMqaXEB8lMAlAEoCT7CWmg03eTBGzwynj0S4rjMuOj6TLf3HIIN0DP7bgtG9uIc0Ah_mTVJ4L6Y5yjv6LC9bMZ7YNpUIkFn-CZTudquxHkLYgxHgaRAfELBvmS5xn0pTrpIfZSdYQK7hGhjhm9fUg4J06Pg6QW-xZe1U7awyNl7pOeeGQ2lVTo1CWrAlOz9lAmzKzAwQakEOMXFxAjJeHsXTWg" + tokenExchangeJwt = "eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiIsImtpZCI6ImE1NThkYzg0NzYzNDVjY2QyZWFhNjEzNjg4YmI2YTNkIn0.eyJleHAiOjE3MTU3OTA5MTAsImlhdCI6MTcxNTc5MDYxMCwianRpIjoiNjEyOTI2NzQtMDhmOS00ZmQ1LTk3Y2MtZDg3M2RhODRkZjllIiwiaXNzIjoiaHR0cHM6Ly9sb2NhbC1kc3AudmlydHJ1LmNvbTo4NDQzL2F1dGgvcmVhbG1zL29wZW50ZGYiLCJhdWQiOlsiaHR0cDovL2xvY2FsaG9zdDo4MDgwIiwiYWNjb3VudCIsIm9wZW50ZGYtc2RrIl0sInN1YiI6ImU2ZWI0YWU1LThjMDUtNDI3NC04ZmExLTFmMGY1ZmJjY2JkZiIsInR5cCI6IkJlYXJlciIsImF6cCI6Im9wZW50ZGYiLCJzZXNzaW9uX3N0YXRlIjoiZTQ0YzMxNWMtNjk5Yy00NGFkLTk2NDUtNmRkMmIyMjgzN2JlIiwiYWNyIjoiMSIsInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJvcGVudGRmLXJlYWRvbmx5IiwiZGVmYXVsdC1yb2xlcy1vcGVudGRmIiwib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwiLCJzaWQiOiJlNDRjMzE1Yy02OTljLTQ0YWQtOTY0NS02ZGQyYjIyODM3YmUiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsInByZWZlcnJlZF91c2VybmFtZSI6InNlcnZpY2UtYWNjb3VudC1vcGVudGRmLXNkayJ9.dmAulsUNfdPXVyWmVPsbGqaztshyHTD-m2hh1l2hmhwuNISJZjON0e1kXNxYXRLABr_PJzIpGYQCXz98yxOyiw" +) + +func testKeycloakConfig(server *httptest.Server) keycloak.KeycloakConfig { + return keycloak.KeycloakConfig{ + URL: server.URL, + ClientID: "c1", + ClientSecret: "cs", + Realm: "tdf", + LegacyKeycloak: false, + } +} + +func testKeycloakConfigInferID(server *httptest.Server) keycloak.KeycloakConfig { + return keycloak.KeycloakConfig{ + URL: server.URL, + ClientID: "c1", + ClientSecret: "cs", + Realm: "tdf", + LegacyKeycloak: false, + InferID: keycloak.InferredIdentityConfig{ + From: keycloak.EntityImpliedFrom{ + Email: true, + ClientID: true, + }, + }, + } +} + +func testServerResp(t *testing.T, w http.ResponseWriter, r *http.Request, k string, reqRespMap map[string]string) { + i, ok := reqRespMap[k] + if ok == true { + w.Header().Set("Content-Type", "application/json") + _, err := io.WriteString(w, i) + if err != nil { + t.Error(err) + } + } else { + t.Errorf("UnExpected Request, got: %s", r.URL.Path) + } +} + +func testServer(t *testing.T, userSearchQueryAndResp map[string]string, groupSearchQueryAndResp map[string]string, + groupByIDAndResponse map[string]string, groupMemberQueryAndResponse map[string]string, clientsSearchQueryAndResp map[string]string, +) *httptest.Server { + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + switch { + case r.URL.Path == "/realms/tdf/protocol/openid-connect/token": + _, err := io.WriteString(w, tokenResp) + if err != nil { + t.Error(err) + } + case r.URL.Path == "/admin/realms/tdf/clients": + testServerResp(t, w, r, r.URL.RawQuery, clientsSearchQueryAndResp) + case r.URL.Path == "/admin/realms/tdf/users": + testServerResp(t, w, r, r.URL.RawQuery, userSearchQueryAndResp) + case r.URL.Path == "/admin/realms/tdf/groups" && groupSearchQueryAndResp != nil: + testServerResp(t, w, r, r.URL.RawQuery, groupSearchQueryAndResp) + case strings.HasPrefix(r.URL.Path, "/admin/realms/tdf/groups") && + strings.HasSuffix(r.URL.Path, "members") && groupMemberQueryAndResponse != nil: + groupID := r.URL.Path[len("/admin/realms/tdf/groups/"):strings.LastIndex(r.URL.Path, "/")] + testServerResp(t, w, r, groupID, groupMemberQueryAndResponse) + case strings.HasPrefix(r.URL.Path, "/admin/realms/tdf/groups") && groupByIDAndResponse != nil: + groupID := r.URL.Path[strings.LastIndex(r.URL.Path, "/")+1:] + testServerResp(t, w, r, groupID, groupByIDAndResponse) + default: + t.Errorf("UnExpected Request, got: %s", r.URL.Path) + } + })) + return server +} + +func Test_KCEntityResolutionByClientId(t *testing.T) { + var validBody []*entity.Entity + validBody = append(validBody, &entity.Entity{EphemeralId: "1234", EntityType: &entity.Entity_ClientId{ClientId: "opentdf"}}) + + req := entityresolutionV2.ResolveEntitiesRequest{} + req.Entities = validBody + csqr := map[string]string{ + "clientId=opentdf": byEmailBobResp, + } + server := testServer(t, nil, nil, nil, nil, csqr) + defer server.Close() + kcconfig := testKeycloakConfig(server) + + resp, reserr := keycloak.EntityResolution(t.Context(), &req, kcconfig, logger.CreateTestLogger()) + + require.NoError(t, reserr) + _ = json.NewEncoder(os.Stdout).Encode(&resp) + entityRepresentations := resp.GetEntityRepresentations() + assert.NotNil(t, entityRepresentations) + assert.Len(t, entityRepresentations, 1) +} + +func Test_KCEntityResolutionByEmail(t *testing.T) { + server := testServer(t, map[string]string{ + "email=bob%40sample.org&exact=true": byEmailBobResp, + "email=alice%40sample.org&exact=true": byEmailAliceResp, + }, nil, nil, nil, nil) + defer server.Close() + + var validBody []*entity.Entity + validBody = append(validBody, &entity.Entity{EphemeralId: "1234", EntityType: &entity.Entity_EmailAddress{EmailAddress: "bob@sample.org"}}) + validBody = append(validBody, &entity.Entity{EphemeralId: "1235", EntityType: &entity.Entity_EmailAddress{EmailAddress: "alice@sample.org"}}) + + kcconfig := testKeycloakConfig(server) + + req := entityresolutionV2.ResolveEntitiesRequest{} + req.Entities = validBody + + resp, reserr := keycloak.EntityResolution(t.Context(), &req, kcconfig, logger.CreateTestLogger()) + + require.NoError(t, reserr) + + entityRepresentations := resp.GetEntityRepresentations() + assert.NotNil(t, entityRepresentations) + assert.Len(t, entityRepresentations, 2) + + assert.Equal(t, "1234", entityRepresentations[0].GetOriginalId()) + assert.Len(t, entityRepresentations[0].GetAdditionalProps(), 1) + propMap := entityRepresentations[0].GetAdditionalProps()[0].AsMap() + assert.Equal(t, "bobid", propMap["id"]) + + assert.Equal(t, "1235", entityRepresentations[1].GetOriginalId()) + assert.Len(t, entityRepresentations[1].GetAdditionalProps(), 1) + propMap = entityRepresentations[1].GetAdditionalProps()[0].AsMap() + assert.Equal(t, "aliceid", propMap["id"]) +} + +func Test_KCEntityResolutionByUsername(t *testing.T) { + server := testServer(t, map[string]string{ + "exact=true&username=bob.smith": byUsernameBobResp, + "exact=true&username=alice.smith": byUsernameAliceResp, + }, nil, nil, nil, nil) + defer server.Close() + + // validBody := `{"entity_identifiers": [{"type": "username","identifier": "bob.smith"}]}` + var validBody []*entity.Entity + validBody = append(validBody, &entity.Entity{EphemeralId: "1234", EntityType: &entity.Entity_UserName{UserName: "bob.smith"}}) + validBody = append(validBody, &entity.Entity{EphemeralId: "1235", EntityType: &entity.Entity_UserName{UserName: "alice.smith"}}) + + kcconfig := testKeycloakConfig(server) + + req := entityresolutionV2.ResolveEntitiesRequest{} + req.Entities = validBody + + resp, reserr := keycloak.EntityResolution(t.Context(), &req, kcconfig, logger.CreateTestLogger()) + + require.NoError(t, reserr) + + entityRepresentations := resp.GetEntityRepresentations() + assert.NotNil(t, entityRepresentations) + assert.Len(t, entityRepresentations, 2) + + assert.Equal(t, "1234", entityRepresentations[0].GetOriginalId()) + assert.Len(t, entityRepresentations[0].GetAdditionalProps(), 1) + propMap := entityRepresentations[0].GetAdditionalProps()[0].AsMap() + assert.Equal(t, "bobid", propMap["id"]) + + assert.Equal(t, "1235", entityRepresentations[1].GetOriginalId()) + assert.Len(t, entityRepresentations[1].GetAdditionalProps(), 1) + propMap = entityRepresentations[1].GetAdditionalProps()[0].AsMap() + assert.Equal(t, "aliceid", propMap["id"]) +} + +func Test_KCEntityResolutionByGroupEmail(t *testing.T) { + server := testServer(t, map[string]string{ + "email=group1%40sample.org&exact=true": "[]", + }, map[string]string{ + "search=group1%40sample.org": `[{"id":"group1-uuid"}]`, + }, map[string]string{ + "group1-uuid": groupResp, + }, map[string]string{ + "group1-uuid": groupSubmemberResp, + }, + nil) + defer server.Close() + + var validBody []*entity.Entity + validBody = append(validBody, &entity.Entity{EphemeralId: "123456", EntityType: &entity.Entity_EmailAddress{EmailAddress: "group1@sample.org"}}) + + kcconfig := testKeycloakConfig(server) + + req := entityresolutionV2.ResolveEntitiesRequest{} + req.Entities = validBody + + resp, reserr := keycloak.EntityResolution(t.Context(), &req, kcconfig, logger.CreateTestLogger()) + + require.NoError(t, reserr) + + entityRepresentations := resp.GetEntityRepresentations() + assert.NotNil(t, entityRepresentations) + assert.Len(t, entityRepresentations, 1) + + assert.Equal(t, "123456", entityRepresentations[0].GetOriginalId()) + assert.Len(t, entityRepresentations[0].GetAdditionalProps(), 2) + propMap := entityRepresentations[0].GetAdditionalProps()[0].AsMap() + assert.Equal(t, "bobid", propMap["id"]) + propMap = entityRepresentations[0].GetAdditionalProps()[1].AsMap() + assert.Equal(t, "aliceid", propMap["id"]) +} + +func Test_KCEntityResolutionNotFoundError(t *testing.T) { + server := testServer(t, map[string]string{ + "email=random%40sample.org&exact=true": "[]", + }, map[string]string{ + "search=random%40sample.org": "[]", + }, map[string]string{ + "group1-uuid": groupResp, + }, map[string]string{ + "group1-uuid": groupSubmemberResp, + }, nil) + defer server.Close() + + var validBody []*entity.Entity + validBody = append(validBody, &entity.Entity{EphemeralId: "1234", EntityType: &entity.Entity_EmailAddress{EmailAddress: "random@sample.org"}}) + + kcconfig := testKeycloakConfig(server) + + req := entityresolutionV2.ResolveEntitiesRequest{} + req.Entities = validBody + + resp, reserr := keycloak.EntityResolution(t.Context(), &req, kcconfig, logger.CreateTestLogger()) + + require.Error(t, reserr) + assert.Equal(t, &entityresolutionV2.ResolveEntitiesResponse{}, &resp) + entityNotFound := entityresolutionV2.EntityNotFoundError{Code: int32(codes.NotFound), Message: keycloak.ErrGetRetrievalFailed.Error(), Entity: "random@sample.org"} + expectedError := connect.NewError(connect.Code(entityNotFound.GetCode()), keycloak.ErrGetRetrievalFailed) + assert.Equal(t, expectedError, reserr) +} + +func Test_JwtClientAndUsernameClientCredentials(t *testing.T) { + csqr := map[string]string{ + "clientId=tdf-entity-resolution": byClientIDTDFEntityResResp, + } + server := testServer(t, nil, nil, nil, nil, csqr) + defer server.Close() + + kcconfig := testKeycloakConfig(server) + + validBody := []*entity.Token{{Jwt: clientCredentialsJwt}} + + resp, reserr := keycloak.CreateEntityChainsFromTokens(t.Context(), &entityresolutionV2.CreateEntityChainsFromTokensRequest{Tokens: validBody}, kcconfig, logger.CreateTestLogger()) + + require.NoError(t, reserr) + + assert.Len(t, resp.GetEntityChains(), 1) + assert.Len(t, resp.GetEntityChains()[0].GetEntities(), 2) + assert.Equal(t, "tdf-entity-resolution", resp.GetEntityChains()[0].GetEntities()[0].GetClientId()) + assert.Equal(t, entity.Entity_CATEGORY_ENVIRONMENT, resp.GetEntityChains()[0].GetEntities()[0].GetCategory()) + assert.Equal(t, "tdf-entity-resolution", resp.GetEntityChains()[0].GetEntities()[1].GetClientId()) + assert.Equal(t, entity.Entity_CATEGORY_SUBJECT, resp.GetEntityChains()[0].GetEntities()[1].GetCategory()) +} + +func Test_JwtClientAndUsernamePasswordPub(t *testing.T) { + server := testServer(t, nil, nil, nil, nil, nil) + defer server.Close() + + kcconfig := testKeycloakConfig(server) + + validBody := []*entity.Token{{Jwt: passwordPubClientJwt}} + + resp, reserr := keycloak.CreateEntityChainsFromTokens(t.Context(), &entityresolutionV2.CreateEntityChainsFromTokensRequest{Tokens: validBody}, kcconfig, logger.CreateTestLogger()) + + require.NoError(t, reserr) + + assert.Len(t, resp.GetEntityChains(), 1) + assert.Len(t, resp.GetEntityChains()[0].GetEntities(), 2) + assert.Equal(t, "tdf-entity-resolution-public", resp.GetEntityChains()[0].GetEntities()[0].GetClientId()) + assert.Equal(t, entity.Entity_CATEGORY_ENVIRONMENT, resp.GetEntityChains()[0].GetEntities()[0].GetCategory()) + assert.Equal(t, "sample-user", resp.GetEntityChains()[0].GetEntities()[1].GetUserName()) + assert.Equal(t, entity.Entity_CATEGORY_SUBJECT, resp.GetEntityChains()[0].GetEntities()[1].GetCategory()) +} + +func Test_JwtClientAndUsernamePasswordPriv(t *testing.T) { + server := testServer(t, nil, nil, nil, nil, nil) + defer server.Close() + + kcconfig := testKeycloakConfig(server) + + validBody := []*entity.Token{{Jwt: passwordPrivClientJwt}} + + resp, reserr := keycloak.CreateEntityChainsFromTokens(t.Context(), &entityresolutionV2.CreateEntityChainsFromTokensRequest{Tokens: validBody}, kcconfig, logger.CreateTestLogger()) + + require.NoError(t, reserr) + + assert.Len(t, resp.GetEntityChains(), 1) + assert.Len(t, resp.GetEntityChains()[0].GetEntities(), 2) + assert.Equal(t, "tdf-entity-resolution", resp.GetEntityChains()[0].GetEntities()[0].GetClientId()) + assert.Equal(t, entity.Entity_CATEGORY_ENVIRONMENT, resp.GetEntityChains()[0].GetEntities()[0].GetCategory()) + assert.Equal(t, "sample-user", resp.GetEntityChains()[0].GetEntities()[1].GetUserName()) + assert.Equal(t, entity.Entity_CATEGORY_SUBJECT, resp.GetEntityChains()[0].GetEntities()[1].GetCategory()) +} + +func Test_JwtClientAndUsernameAuthPub(t *testing.T) { + server := testServer(t, nil, nil, nil, nil, nil) + defer server.Close() + + kcconfig := testKeycloakConfig(server) + + validBody := []*entity.Token{{Jwt: authPubClientJwt}} + + resp, reserr := keycloak.CreateEntityChainsFromTokens(t.Context(), &entityresolutionV2.CreateEntityChainsFromTokensRequest{Tokens: validBody}, kcconfig, logger.CreateTestLogger()) + + require.NoError(t, reserr) + + assert.Len(t, resp.GetEntityChains(), 1) + assert.Len(t, resp.GetEntityChains()[0].GetEntities(), 2) + assert.Equal(t, "tdf-entity-resolution-public", resp.GetEntityChains()[0].GetEntities()[0].GetClientId()) + assert.Equal(t, entity.Entity_CATEGORY_ENVIRONMENT, resp.GetEntityChains()[0].GetEntities()[0].GetCategory()) + assert.Equal(t, "sample-user", resp.GetEntityChains()[0].GetEntities()[1].GetUserName()) + assert.Equal(t, entity.Entity_CATEGORY_SUBJECT, resp.GetEntityChains()[0].GetEntities()[1].GetCategory()) +} + +func Test_JwtClientAndUsernameAuthPriv(t *testing.T) { + server := testServer(t, nil, nil, nil, nil, nil) + defer server.Close() + + kcconfig := testKeycloakConfig(server) + + validBody := []*entity.Token{{Jwt: authPrivClientJwt}} + + resp, reserr := keycloak.CreateEntityChainsFromTokens(t.Context(), &entityresolutionV2.CreateEntityChainsFromTokensRequest{Tokens: validBody}, kcconfig, logger.CreateTestLogger()) + + require.NoError(t, reserr) + + assert.Len(t, resp.GetEntityChains(), 1) + assert.Len(t, resp.GetEntityChains()[0].GetEntities(), 2) + assert.Equal(t, "tdf-entity-resolution", resp.GetEntityChains()[0].GetEntities()[0].GetClientId()) + assert.Equal(t, entity.Entity_CATEGORY_ENVIRONMENT, resp.GetEntityChains()[0].GetEntities()[0].GetCategory()) + assert.Equal(t, "sample-user", resp.GetEntityChains()[0].GetEntities()[1].GetUserName()) + assert.Equal(t, entity.Entity_CATEGORY_SUBJECT, resp.GetEntityChains()[0].GetEntities()[1].GetCategory()) +} + +func Test_JwtClientAndUsernameImplicitPub(t *testing.T) { + server := testServer(t, nil, nil, nil, nil, nil) + defer server.Close() + + kcconfig := testKeycloakConfig(server) + + validBody := []*entity.Token{{Jwt: implicitPubClientJwt}} + + resp, reserr := keycloak.CreateEntityChainsFromTokens(t.Context(), &entityresolutionV2.CreateEntityChainsFromTokensRequest{Tokens: validBody}, kcconfig, logger.CreateTestLogger()) + + require.NoError(t, reserr) + + assert.Len(t, resp.GetEntityChains(), 1) + assert.Len(t, resp.GetEntityChains()[0].GetEntities(), 2) + assert.Equal(t, "tdf-entity-resolution-public", resp.GetEntityChains()[0].GetEntities()[0].GetClientId()) + assert.Equal(t, entity.Entity_CATEGORY_ENVIRONMENT, resp.GetEntityChains()[0].GetEntities()[0].GetCategory()) + assert.Equal(t, "sample-user", resp.GetEntityChains()[0].GetEntities()[1].GetUserName()) + assert.Equal(t, entity.Entity_CATEGORY_SUBJECT, resp.GetEntityChains()[0].GetEntities()[1].GetCategory()) +} + +func Test_JwtClientAndUsernameImplicitPriv(t *testing.T) { + server := testServer(t, nil, nil, nil, nil, nil) + defer server.Close() + + kcconfig := testKeycloakConfig(server) + + validBody := []*entity.Token{{Jwt: implicitPrivClientJwt}} + + resp, reserr := keycloak.CreateEntityChainsFromTokens(t.Context(), &entityresolutionV2.CreateEntityChainsFromTokensRequest{Tokens: validBody}, kcconfig, logger.CreateTestLogger()) + + require.NoError(t, reserr) + + assert.Len(t, resp.GetEntityChains(), 1) + assert.Len(t, resp.GetEntityChains()[0].GetEntities(), 2) + assert.Equal(t, "tdf-entity-resolution", resp.GetEntityChains()[0].GetEntities()[0].GetClientId()) + assert.Equal(t, entity.Entity_CATEGORY_ENVIRONMENT, resp.GetEntityChains()[0].GetEntities()[0].GetCategory()) + assert.Equal(t, "sample-user", resp.GetEntityChains()[0].GetEntities()[1].GetUserName()) + assert.Equal(t, entity.Entity_CATEGORY_SUBJECT, resp.GetEntityChains()[0].GetEntities()[1].GetCategory()) +} + +func Test_JwtClientAndClientTokenExchange(t *testing.T) { + csqr := map[string]string{ + "clientId=opentdf-sdk": byClientIDOpentdfSdkResp, + } + server := testServer(t, nil, nil, nil, nil, csqr) + defer server.Close() + + kcconfig := testKeycloakConfig(server) + + validBody := []*entity.Token{{Jwt: tokenExchangeJwt}} + + resp, reserr := keycloak.CreateEntityChainsFromTokens(t.Context(), &entityresolutionV2.CreateEntityChainsFromTokensRequest{Tokens: validBody}, kcconfig, logger.CreateTestLogger()) + + require.NoError(t, reserr) + + assert.Len(t, resp.GetEntityChains(), 1) + assert.Len(t, resp.GetEntityChains()[0].GetEntities(), 2) + assert.Equal(t, "opentdf", resp.GetEntityChains()[0].GetEntities()[0].GetClientId()) + assert.Equal(t, entity.Entity_CATEGORY_ENVIRONMENT, resp.GetEntityChains()[0].GetEntities()[0].GetCategory()) + assert.Equal(t, "opentdf-sdk", resp.GetEntityChains()[0].GetEntities()[1].GetClientId()) + assert.Equal(t, entity.Entity_CATEGORY_SUBJECT, resp.GetEntityChains()[0].GetEntities()[1].GetCategory()) +} + +func Test_JwtMultiple(t *testing.T) { + csqr := map[string]string{ + "clientId=opentdf-sdk": byClientIDOpentdfSdkResp, + } + server := testServer(t, nil, nil, nil, nil, csqr) + defer server.Close() + + kcconfig := testKeycloakConfig(server) + + validBody := []*entity.Token{{Jwt: tokenExchangeJwt, EphemeralId: "tok1"}, {Jwt: authPrivClientJwt, EphemeralId: "tok2"}} + + resp, reserr := keycloak.CreateEntityChainsFromTokens(t.Context(), &entityresolutionV2.CreateEntityChainsFromTokensRequest{Tokens: validBody}, kcconfig, logger.CreateTestLogger()) + + require.NoError(t, reserr) + + assert.Len(t, resp.GetEntityChains(), 2) + assert.Len(t, resp.GetEntityChains()[0].GetEntities(), 2) + assert.Equal(t, "opentdf", resp.GetEntityChains()[0].GetEntities()[0].GetClientId()) + assert.Equal(t, entity.Entity_CATEGORY_ENVIRONMENT, resp.GetEntityChains()[0].GetEntities()[0].GetCategory()) + assert.Equal(t, "opentdf-sdk", resp.GetEntityChains()[0].GetEntities()[1].GetClientId()) + assert.Equal(t, entity.Entity_CATEGORY_SUBJECT, resp.GetEntityChains()[0].GetEntities()[1].GetCategory()) + + assert.Len(t, resp.GetEntityChains()[1].GetEntities(), 2) + assert.Equal(t, "tdf-entity-resolution", resp.GetEntityChains()[1].GetEntities()[0].GetClientId()) + assert.Equal(t, entity.Entity_CATEGORY_ENVIRONMENT, resp.GetEntityChains()[1].GetEntities()[0].GetCategory()) + assert.Equal(t, "sample-user", resp.GetEntityChains()[1].GetEntities()[1].GetUserName()) + assert.Equal(t, entity.Entity_CATEGORY_SUBJECT, resp.GetEntityChains()[1].GetEntities()[1].GetCategory()) +} + +func Test_KCEntityResolutionNotFoundInferEmail(t *testing.T) { + server := testServer(t, map[string]string{ + "email=random%40sample.org&exact=true": "[]", + }, map[string]string{ + "search=random%40sample.org": "[]", + }, map[string]string{ + "group1-uuid": groupResp, + }, map[string]string{ + "group1-uuid": groupSubmemberResp, + }, nil) + defer server.Close() + + var validBody []*entity.Entity + validBody = append(validBody, &entity.Entity{EphemeralId: "1234", EntityType: &entity.Entity_EmailAddress{EmailAddress: "random@sample.org"}}) + + kcconfig := testKeycloakConfigInferID(server) + + req := entityresolutionV2.ResolveEntitiesRequest{} + req.Entities = validBody + + resp, reserr := keycloak.EntityResolution(t.Context(), &req, kcconfig, logger.CreateTestLogger()) + + require.NoError(t, reserr) + + entityRepresentations := resp.GetEntityRepresentations() + assert.NotNil(t, entityRepresentations) + assert.Len(t, entityRepresentations, 1) + + assert.Equal(t, "1234", entityRepresentations[0].GetOriginalId()) + assert.Len(t, entityRepresentations[0].GetAdditionalProps(), 1) + propMap := entityRepresentations[0].GetAdditionalProps()[0].AsMap() + assert.Equal(t, "random@sample.org", propMap["emailAddress"]) + assert.Equal(t, "1234", propMap["id"]) +} + +func Test_KCEntityResolutionNotFoundInferClientId(t *testing.T) { + csqr := map[string]string{ + "clientId=random": "[]", + } + server := testServer(t, nil, nil, nil, nil, csqr) + defer server.Close() + + var validBody []*entity.Entity + validBody = append(validBody, &entity.Entity{EphemeralId: "1234", EntityType: &entity.Entity_ClientId{ClientId: "random"}}) + + kcconfig := testKeycloakConfigInferID(server) + + req := entityresolutionV2.ResolveEntitiesRequest{} + req.Entities = validBody + + resp, reserr := keycloak.EntityResolution(t.Context(), &req, kcconfig, logger.CreateTestLogger()) + + require.NoError(t, reserr) + + entityRepresentations := resp.GetEntityRepresentations() + assert.NotNil(t, entityRepresentations) + assert.Len(t, entityRepresentations, 1) + + assert.Equal(t, "1234", entityRepresentations[0].GetOriginalId()) + assert.Len(t, entityRepresentations[0].GetAdditionalProps(), 1) + propMap := entityRepresentations[0].GetAdditionalProps()[0].AsMap() + assert.Equal(t, "random", propMap["clientId"]) + assert.Equal(t, "1234", propMap["id"]) +} + +func Test_KCEntityResolutionNotFoundNotInferUsername(t *testing.T) { + server := testServer(t, map[string]string{ + "exact=true&username=randomuser": "[]", + }, nil, nil, nil, nil) + defer server.Close() + + var validBody []*entity.Entity + validBody = append(validBody, &entity.Entity{EphemeralId: "1234", EntityType: &entity.Entity_UserName{UserName: "randomuser"}}) + + kcconfig := testKeycloakConfigInferID(server) + + req := entityresolutionV2.ResolveEntitiesRequest{} + req.Entities = validBody + + resp, reserr := keycloak.EntityResolution(t.Context(), &req, kcconfig, logger.CreateTestLogger()) + + require.Error(t, reserr) + assert.Equal(t, &entityresolutionV2.ResolveEntitiesResponse{}, &resp) + entityNotFound := entityresolutionV2.EntityNotFoundError{Code: int32(codes.NotFound), Message: keycloak.ErrGetRetrievalFailed.Error(), Entity: "randomuser"} + expectedError := connect.NewError(connect.Code(entityNotFound.GetCode()), keycloak.ErrGetRetrievalFailed) + assert.Equal(t, expectedError, reserr) +} From 02fa5a24123b826d7663bf9a6e998630de38bcdc Mon Sep 17 00:00:00 2001 From: jakedoublev Date: Wed, 14 May 2025 16:01:36 -0700 Subject: [PATCH 41/49] lint fixes --- .../entityresolution/claims/v2/entity_resolution.go | 10 +++++----- .../entityresolution/keycloak/v2/entity_resolution.go | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/service/entityresolution/claims/v2/entity_resolution.go b/service/entityresolution/claims/v2/entity_resolution.go index 27a02dbf97..f9b1eee261 100644 --- a/service/entityresolution/claims/v2/entity_resolution.go +++ b/service/entityresolution/claims/v2/entity_resolution.go @@ -20,23 +20,23 @@ import ( "google.golang.org/protobuf/types/known/structpb" ) -type ClaimsEntityResolutionServiceV2 struct { +type EntityResolutionServiceV2 struct { entityresolutionV2.UnimplementedEntityResolutionServiceServer logger *logger.Logger trace.Tracer } -func RegisterClaimsERS(_ config.ServiceConfig, logger *logger.Logger) (ClaimsEntityResolutionServiceV2, serviceregistry.HandlerServer) { - claimsSVC := ClaimsEntityResolutionServiceV2{logger: logger} +func RegisterClaimsERS(_ config.ServiceConfig, logger *logger.Logger) (EntityResolutionServiceV2, serviceregistry.HandlerServer) { + claimsSVC := EntityResolutionServiceV2{logger: logger} return claimsSVC, nil } -func (s ClaimsEntityResolutionServiceV2) ResolveEntities(ctx context.Context, req *connect.Request[entityresolutionV2.ResolveEntitiesRequest]) (*connect.Response[entityresolutionV2.ResolveEntitiesResponse], error) { +func (s EntityResolutionServiceV2) ResolveEntities(ctx context.Context, req *connect.Request[entityresolutionV2.ResolveEntitiesRequest]) (*connect.Response[entityresolutionV2.ResolveEntitiesResponse], error) { resp, err := EntityResolution(ctx, req.Msg, s.logger) return connect.NewResponse(&resp), err } -func (s ClaimsEntityResolutionServiceV2) CreateEntityChainsFromTokens(ctx context.Context, req *connect.Request[entityresolutionV2.CreateEntityChainsFromTokensRequest]) (*connect.Response[entityresolutionV2.CreateEntityChainsFromTokensResponse], error) { +func (s EntityResolutionServiceV2) CreateEntityChainsFromTokens(ctx context.Context, req *connect.Request[entityresolutionV2.CreateEntityChainsFromTokensRequest]) (*connect.Response[entityresolutionV2.CreateEntityChainsFromTokensResponse], error) { ctx, span := s.Tracer.Start(ctx, "CreateEntityChainsFromTokens") defer span.End() diff --git a/service/entityresolution/keycloak/v2/entity_resolution.go b/service/entityresolution/keycloak/v2/entity_resolution.go index c1cb049e66..7eda5fd40b 100644 --- a/service/entityresolution/keycloak/v2/entity_resolution.go +++ b/service/entityresolution/keycloak/v2/entity_resolution.go @@ -38,7 +38,7 @@ const ( const serviceAccountUsernamePrefix = "service-account-" -type KeycloakEntityResolutionService struct { +type EntityResolutionServiceV2 struct { entityresolutionV2.UnimplementedEntityResolutionServiceServer idpConfig KeycloakConfig logger *logger.Logger @@ -55,17 +55,17 @@ type KeycloakConfig struct { InferID InferredIdentityConfig `mapstructure:"inferid,omitempty" json:"inferid,omitempty"` } -func RegisterKeycloakERS(config config.ServiceConfig, logger *logger.Logger) (*KeycloakEntityResolutionService, serviceregistry.HandlerServer) { +func RegisterKeycloakERS(config config.ServiceConfig, logger *logger.Logger) (*EntityResolutionServiceV2, serviceregistry.HandlerServer) { var inputIdpConfig KeycloakConfig if err := mapstructure.Decode(config, &inputIdpConfig); err != nil { panic(err) } logger.Debug("entity_resolution configuration", "config", inputIdpConfig) - keycloakSVC := &KeycloakEntityResolutionService{idpConfig: inputIdpConfig, logger: logger} + keycloakSVC := &EntityResolutionServiceV2{idpConfig: inputIdpConfig, logger: logger} return keycloakSVC, nil } -func (s KeycloakEntityResolutionService) ResolveEntities(ctx context.Context, req *connect.Request[entityresolutionV2.ResolveEntitiesRequest]) (*connect.Response[entityresolutionV2.ResolveEntitiesResponse], error) { +func (s EntityResolutionServiceV2) ResolveEntities(ctx context.Context, req *connect.Request[entityresolutionV2.ResolveEntitiesRequest]) (*connect.Response[entityresolutionV2.ResolveEntitiesResponse], error) { ctx, span := s.Tracer.Start(ctx, "ResolveEntities") defer span.End() @@ -73,7 +73,7 @@ func (s KeycloakEntityResolutionService) ResolveEntities(ctx context.Context, re return connect.NewResponse(&resp), err } -func (s KeycloakEntityResolutionService) CreateEntityChainsFromTokens(ctx context.Context, req *connect.Request[entityresolutionV2.CreateEntityChainsFromTokensRequest]) (*connect.Response[entityresolutionV2.CreateEntityChainsFromTokensResponse], error) { +func (s EntityResolutionServiceV2) CreateEntityChainsFromTokens(ctx context.Context, req *connect.Request[entityresolutionV2.CreateEntityChainsFromTokensRequest]) (*connect.Response[entityresolutionV2.CreateEntityChainsFromTokensResponse], error) { ctx, span := s.Tracer.Start(ctx, "CreateEntityChainsFromTokens") defer span.End() From b62da088e2d093c5085dda9eafe6edc9fe1e4505 Mon Sep 17 00:00:00 2001 From: jakedoublev Date: Wed, 14 May 2025 16:03:53 -0700 Subject: [PATCH 42/49] more lint fixes --- .../keycloak/v2/entity_resolution.go | 20 ++++----- .../keycloak/v2/entity_resolution_test.go | 42 +++++++++---------- 2 files changed, 31 insertions(+), 31 deletions(-) diff --git a/service/entityresolution/keycloak/v2/entity_resolution.go b/service/entityresolution/keycloak/v2/entity_resolution.go index 7eda5fd40b..eed214931c 100644 --- a/service/entityresolution/keycloak/v2/entity_resolution.go +++ b/service/entityresolution/keycloak/v2/entity_resolution.go @@ -40,12 +40,12 @@ const serviceAccountUsernamePrefix = "service-account-" type EntityResolutionServiceV2 struct { entityresolutionV2.UnimplementedEntityResolutionServiceServer - idpConfig KeycloakConfig + idpConfig Config logger *logger.Logger trace.Tracer } -type KeycloakConfig struct { +type Config struct { URL string `mapstructure:"url" json:"url"` Realm string `mapstructure:"realm" json:"realm"` ClientID string `mapstructure:"clientid" json:"clientid"` @@ -56,7 +56,7 @@ type KeycloakConfig struct { } func RegisterKeycloakERS(config config.ServiceConfig, logger *logger.Logger) (*EntityResolutionServiceV2, serviceregistry.HandlerServer) { - var inputIdpConfig KeycloakConfig + var inputIdpConfig Config if err := mapstructure.Decode(config, &inputIdpConfig); err != nil { panic(err) } @@ -81,7 +81,7 @@ func (s EntityResolutionServiceV2) CreateEntityChainsFromTokens(ctx context.Cont return connect.NewResponse(&resp), err } -func (c KeycloakConfig) LogValue() slog.Value { +func (c Config) LogValue() slog.Value { return slog.GroupValue( slog.String("url", c.URL), slog.String("realm", c.Realm), @@ -111,7 +111,7 @@ type KeyCloakConnector struct { func CreateEntityChainsFromTokens( ctx context.Context, req *entityresolutionV2.CreateEntityChainsFromTokensRequest, - kcConfig KeycloakConfig, + kcConfig Config, logger *logger.Logger, ) (entityresolutionV2.CreateEntityChainsFromTokensResponse, error) { entityChains := []*entity.EntityChain{} @@ -128,7 +128,7 @@ func CreateEntityChainsFromTokens( } func EntityResolution(ctx context.Context, - req *entityresolutionV2.ResolveEntitiesRequest, kcConfig KeycloakConfig, logger *logger.Logger, + req *entityresolutionV2.ResolveEntitiesRequest, kcConfig Config, logger *logger.Logger, ) (entityresolutionV2.ResolveEntitiesResponse, error) { connector, err := getKCClient(ctx, kcConfig, logger) if err != nil { @@ -334,7 +334,7 @@ func typeToGenericJSONMap[Marshalable any](inputStruct Marshalable, logger *logg return genericMap, nil } -func getKCClient(ctx context.Context, kcConfig KeycloakConfig, logger *logger.Logger) (*KeyCloakConnector, error) { +func getKCClient(ctx context.Context, kcConfig Config, logger *logger.Logger) (*KeyCloakConnector, error) { var client *gocloak.GoCloak if kcConfig.LegacyKeycloak { logger.Warn("using legacy connection mode for Keycloak < 17.x.x") @@ -363,7 +363,7 @@ func getKCClient(ctx context.Context, kcConfig KeycloakConfig, logger *logger.Lo return &keycloakConnector, nil } -func expandGroup(ctx context.Context, groupID string, kcConnector *KeyCloakConnector, kcConfig *KeycloakConfig, logger *logger.Logger) ([]*gocloak.User, error) { +func expandGroup(ctx context.Context, groupID string, kcConnector *KeyCloakConnector, kcConfig *Config, logger *logger.Logger) ([]*gocloak.User, error) { logger.Info("expanding group", slog.String("groupID", groupID)) var entityRepresentations []*gocloak.User @@ -387,7 +387,7 @@ func expandGroup(ctx context.Context, groupID string, kcConnector *KeyCloakConne return entityRepresentations, nil } -func getEntitiesFromToken(ctx context.Context, kcConfig KeycloakConfig, jwtString string, logger *logger.Logger) ([]*entity.Entity, error) { +func getEntitiesFromToken(ctx context.Context, kcConfig Config, jwtString string, logger *logger.Logger) ([]*entity.Entity, error) { token, err := jwt.ParseString(jwtString, jwt.WithVerify(false), jwt.WithValidate(false)) if err != nil { return nil, errors.New("error parsing jwt " + err.Error()) @@ -455,7 +455,7 @@ func getEntitiesFromToken(ctx context.Context, kcConfig KeycloakConfig, jwtStrin return entities, nil } -func getServiceAccountClient(ctx context.Context, username string, kcConfig KeycloakConfig, logger *logger.Logger) (string, error) { +func getServiceAccountClient(ctx context.Context, username string, kcConfig Config, logger *logger.Logger) (string, error) { connector, err := getKCClient(ctx, kcConfig, logger) if err != nil { return "", err diff --git a/service/entityresolution/keycloak/v2/entity_resolution_test.go b/service/entityresolution/keycloak/v2/entity_resolution_test.go index 3225b204d9..f0d89729fc 100644 --- a/service/entityresolution/keycloak/v2/entity_resolution_test.go +++ b/service/entityresolution/keycloak/v2/entity_resolution_test.go @@ -75,8 +75,8 @@ const ( tokenExchangeJwt = "eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiIsImtpZCI6ImE1NThkYzg0NzYzNDVjY2QyZWFhNjEzNjg4YmI2YTNkIn0.eyJleHAiOjE3MTU3OTA5MTAsImlhdCI6MTcxNTc5MDYxMCwianRpIjoiNjEyOTI2NzQtMDhmOS00ZmQ1LTk3Y2MtZDg3M2RhODRkZjllIiwiaXNzIjoiaHR0cHM6Ly9sb2NhbC1kc3AudmlydHJ1LmNvbTo4NDQzL2F1dGgvcmVhbG1zL29wZW50ZGYiLCJhdWQiOlsiaHR0cDovL2xvY2FsaG9zdDo4MDgwIiwiYWNjb3VudCIsIm9wZW50ZGYtc2RrIl0sInN1YiI6ImU2ZWI0YWU1LThjMDUtNDI3NC04ZmExLTFmMGY1ZmJjY2JkZiIsInR5cCI6IkJlYXJlciIsImF6cCI6Im9wZW50ZGYiLCJzZXNzaW9uX3N0YXRlIjoiZTQ0YzMxNWMtNjk5Yy00NGFkLTk2NDUtNmRkMmIyMjgzN2JlIiwiYWNyIjoiMSIsInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJvcGVudGRmLXJlYWRvbmx5IiwiZGVmYXVsdC1yb2xlcy1vcGVudGRmIiwib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwiLCJzaWQiOiJlNDRjMzE1Yy02OTljLTQ0YWQtOTY0NS02ZGQyYjIyODM3YmUiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsInByZWZlcnJlZF91c2VybmFtZSI6InNlcnZpY2UtYWNjb3VudC1vcGVudGRmLXNkayJ9.dmAulsUNfdPXVyWmVPsbGqaztshyHTD-m2hh1l2hmhwuNISJZjON0e1kXNxYXRLABr_PJzIpGYQCXz98yxOyiw" ) -func testKeycloakConfig(server *httptest.Server) keycloak.KeycloakConfig { - return keycloak.KeycloakConfig{ +func testConfig(server *httptest.Server) keycloak.Config { + return keycloak.Config{ URL: server.URL, ClientID: "c1", ClientSecret: "cs", @@ -85,8 +85,8 @@ func testKeycloakConfig(server *httptest.Server) keycloak.KeycloakConfig { } } -func testKeycloakConfigInferID(server *httptest.Server) keycloak.KeycloakConfig { - return keycloak.KeycloakConfig{ +func testConfigInferID(server *httptest.Server) keycloak.Config { + return keycloak.Config{ URL: server.URL, ClientID: "c1", ClientSecret: "cs", @@ -155,7 +155,7 @@ func Test_KCEntityResolutionByClientId(t *testing.T) { } server := testServer(t, nil, nil, nil, nil, csqr) defer server.Close() - kcconfig := testKeycloakConfig(server) + kcconfig := testConfig(server) resp, reserr := keycloak.EntityResolution(t.Context(), &req, kcconfig, logger.CreateTestLogger()) @@ -177,7 +177,7 @@ func Test_KCEntityResolutionByEmail(t *testing.T) { validBody = append(validBody, &entity.Entity{EphemeralId: "1234", EntityType: &entity.Entity_EmailAddress{EmailAddress: "bob@sample.org"}}) validBody = append(validBody, &entity.Entity{EphemeralId: "1235", EntityType: &entity.Entity_EmailAddress{EmailAddress: "alice@sample.org"}}) - kcconfig := testKeycloakConfig(server) + kcconfig := testConfig(server) req := entityresolutionV2.ResolveEntitiesRequest{} req.Entities = validBody @@ -213,7 +213,7 @@ func Test_KCEntityResolutionByUsername(t *testing.T) { validBody = append(validBody, &entity.Entity{EphemeralId: "1234", EntityType: &entity.Entity_UserName{UserName: "bob.smith"}}) validBody = append(validBody, &entity.Entity{EphemeralId: "1235", EntityType: &entity.Entity_UserName{UserName: "alice.smith"}}) - kcconfig := testKeycloakConfig(server) + kcconfig := testConfig(server) req := entityresolutionV2.ResolveEntitiesRequest{} req.Entities = validBody @@ -253,7 +253,7 @@ func Test_KCEntityResolutionByGroupEmail(t *testing.T) { var validBody []*entity.Entity validBody = append(validBody, &entity.Entity{EphemeralId: "123456", EntityType: &entity.Entity_EmailAddress{EmailAddress: "group1@sample.org"}}) - kcconfig := testKeycloakConfig(server) + kcconfig := testConfig(server) req := entityresolutionV2.ResolveEntitiesRequest{} req.Entities = validBody @@ -289,7 +289,7 @@ func Test_KCEntityResolutionNotFoundError(t *testing.T) { var validBody []*entity.Entity validBody = append(validBody, &entity.Entity{EphemeralId: "1234", EntityType: &entity.Entity_EmailAddress{EmailAddress: "random@sample.org"}}) - kcconfig := testKeycloakConfig(server) + kcconfig := testConfig(server) req := entityresolutionV2.ResolveEntitiesRequest{} req.Entities = validBody @@ -310,7 +310,7 @@ func Test_JwtClientAndUsernameClientCredentials(t *testing.T) { server := testServer(t, nil, nil, nil, nil, csqr) defer server.Close() - kcconfig := testKeycloakConfig(server) + kcconfig := testConfig(server) validBody := []*entity.Token{{Jwt: clientCredentialsJwt}} @@ -330,7 +330,7 @@ func Test_JwtClientAndUsernamePasswordPub(t *testing.T) { server := testServer(t, nil, nil, nil, nil, nil) defer server.Close() - kcconfig := testKeycloakConfig(server) + kcconfig := testConfig(server) validBody := []*entity.Token{{Jwt: passwordPubClientJwt}} @@ -350,7 +350,7 @@ func Test_JwtClientAndUsernamePasswordPriv(t *testing.T) { server := testServer(t, nil, nil, nil, nil, nil) defer server.Close() - kcconfig := testKeycloakConfig(server) + kcconfig := testConfig(server) validBody := []*entity.Token{{Jwt: passwordPrivClientJwt}} @@ -370,7 +370,7 @@ func Test_JwtClientAndUsernameAuthPub(t *testing.T) { server := testServer(t, nil, nil, nil, nil, nil) defer server.Close() - kcconfig := testKeycloakConfig(server) + kcconfig := testConfig(server) validBody := []*entity.Token{{Jwt: authPubClientJwt}} @@ -390,7 +390,7 @@ func Test_JwtClientAndUsernameAuthPriv(t *testing.T) { server := testServer(t, nil, nil, nil, nil, nil) defer server.Close() - kcconfig := testKeycloakConfig(server) + kcconfig := testConfig(server) validBody := []*entity.Token{{Jwt: authPrivClientJwt}} @@ -410,7 +410,7 @@ func Test_JwtClientAndUsernameImplicitPub(t *testing.T) { server := testServer(t, nil, nil, nil, nil, nil) defer server.Close() - kcconfig := testKeycloakConfig(server) + kcconfig := testConfig(server) validBody := []*entity.Token{{Jwt: implicitPubClientJwt}} @@ -430,7 +430,7 @@ func Test_JwtClientAndUsernameImplicitPriv(t *testing.T) { server := testServer(t, nil, nil, nil, nil, nil) defer server.Close() - kcconfig := testKeycloakConfig(server) + kcconfig := testConfig(server) validBody := []*entity.Token{{Jwt: implicitPrivClientJwt}} @@ -453,7 +453,7 @@ func Test_JwtClientAndClientTokenExchange(t *testing.T) { server := testServer(t, nil, nil, nil, nil, csqr) defer server.Close() - kcconfig := testKeycloakConfig(server) + kcconfig := testConfig(server) validBody := []*entity.Token{{Jwt: tokenExchangeJwt}} @@ -476,7 +476,7 @@ func Test_JwtMultiple(t *testing.T) { server := testServer(t, nil, nil, nil, nil, csqr) defer server.Close() - kcconfig := testKeycloakConfig(server) + kcconfig := testConfig(server) validBody := []*entity.Token{{Jwt: tokenExchangeJwt, EphemeralId: "tok1"}, {Jwt: authPrivClientJwt, EphemeralId: "tok2"}} @@ -513,7 +513,7 @@ func Test_KCEntityResolutionNotFoundInferEmail(t *testing.T) { var validBody []*entity.Entity validBody = append(validBody, &entity.Entity{EphemeralId: "1234", EntityType: &entity.Entity_EmailAddress{EmailAddress: "random@sample.org"}}) - kcconfig := testKeycloakConfigInferID(server) + kcconfig := testConfigInferID(server) req := entityresolutionV2.ResolveEntitiesRequest{} req.Entities = validBody @@ -543,7 +543,7 @@ func Test_KCEntityResolutionNotFoundInferClientId(t *testing.T) { var validBody []*entity.Entity validBody = append(validBody, &entity.Entity{EphemeralId: "1234", EntityType: &entity.Entity_ClientId{ClientId: "random"}}) - kcconfig := testKeycloakConfigInferID(server) + kcconfig := testConfigInferID(server) req := entityresolutionV2.ResolveEntitiesRequest{} req.Entities = validBody @@ -572,7 +572,7 @@ func Test_KCEntityResolutionNotFoundNotInferUsername(t *testing.T) { var validBody []*entity.Entity validBody = append(validBody, &entity.Entity{EphemeralId: "1234", EntityType: &entity.Entity_UserName{UserName: "randomuser"}}) - kcconfig := testKeycloakConfigInferID(server) + kcconfig := testConfigInferID(server) req := entityresolutionV2.ResolveEntitiesRequest{} req.Entities = validBody From 6cd80ce3c917c0f2d88416c58ca2c3f47856034c Mon Sep 17 00:00:00 2001 From: jakedoublev Date: Wed, 14 May 2025 16:05:08 -0700 Subject: [PATCH 43/49] more lint fixes --- service/entityresolution/keycloak/v2/entity_resolution.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/service/entityresolution/keycloak/v2/entity_resolution.go b/service/entityresolution/keycloak/v2/entity_resolution.go index eed214931c..2e45e4efb2 100644 --- a/service/entityresolution/keycloak/v2/entity_resolution.go +++ b/service/entityresolution/keycloak/v2/entity_resolution.go @@ -103,7 +103,7 @@ type EntityImpliedFrom struct { Username bool `mapstructure:"username,omitempty" json:"username,omitempty"` } -type KeyCloakConnector struct { +type Connector struct { token *gocloak.JWT client *gocloak.GoCloak } @@ -334,7 +334,7 @@ func typeToGenericJSONMap[Marshalable any](inputStruct Marshalable, logger *logg return genericMap, nil } -func getKCClient(ctx context.Context, kcConfig Config, logger *logger.Logger) (*KeyCloakConnector, error) { +func getKCClient(ctx context.Context, kcConfig Config, logger *logger.Logger) (*Connector, error) { var client *gocloak.GoCloak if kcConfig.LegacyKeycloak { logger.Warn("using legacy connection mode for Keycloak < 17.x.x") @@ -358,12 +358,12 @@ func getKCClient(ctx context.Context, kcConfig Config, logger *logger.Logger) (* logger.Error("error connecting to keycloak!", slog.String("error", err.Error())) return nil, err } - keycloakConnector := KeyCloakConnector{token: token, client: client} + keycloakConnector := Connector{token: token, client: client} return &keycloakConnector, nil } -func expandGroup(ctx context.Context, groupID string, kcConnector *KeyCloakConnector, kcConfig *Config, logger *logger.Logger) ([]*gocloak.User, error) { +func expandGroup(ctx context.Context, groupID string, kcConnector *Connector, kcConfig *Config, logger *logger.Logger) ([]*gocloak.User, error) { logger.Info("expanding group", slog.String("groupID", groupID)) var entityRepresentations []*gocloak.User From ee61d6f5e6e623786d872b3e0d56c4bf8a9e73c0 Mon Sep 17 00:00:00 2001 From: jakedoublev Date: Thu, 15 May 2025 07:20:51 -0700 Subject: [PATCH 44/49] add deprecation warning to v1 protos --- docs/grpc/index.html | 4 ++-- docs/openapi/entityresolution/entity_resolution.swagger.json | 2 ++ protocol/go/entityresolution/entity_resolution_grpc.pb.go | 4 ++++ .../entityresolutionconnect/entity_resolution.connect.go | 4 ++++ service/entityresolution/entity_resolution.proto | 2 ++ 5 files changed, 14 insertions(+), 2 deletions(-) diff --git a/docs/grpc/index.html b/docs/grpc/index.html index 3d00958372..46dfb11b1a 100644 --- a/docs/grpc/index.html +++ b/docs/grpc/index.html @@ -5127,14 +5127,14 @@

            EntityResolutionService

            - + - + diff --git a/docs/openapi/entityresolution/entity_resolution.swagger.json b/docs/openapi/entityresolution/entity_resolution.swagger.json index 8e179b635f..42616b53bf 100644 --- a/docs/openapi/entityresolution/entity_resolution.swagger.json +++ b/docs/openapi/entityresolution/entity_resolution.swagger.json @@ -18,6 +18,7 @@ "paths": { "/entityresolution/entitychain": { "post": { + "summary": "Deprecated: use v2 CreateEntityChainsFromTokens instead", "operationId": "EntityResolutionService_CreateEntityChainFromJwt", "responses": { "200": { @@ -50,6 +51,7 @@ }, "/entityresolution/resolve": { "post": { + "summary": "Deprecated: use v2 ResolveEntities instead", "operationId": "EntityResolutionService_ResolveEntities", "responses": { "200": { diff --git a/protocol/go/entityresolution/entity_resolution_grpc.pb.go b/protocol/go/entityresolution/entity_resolution_grpc.pb.go index dfcef1991d..e072f75ae9 100644 --- a/protocol/go/entityresolution/entity_resolution_grpc.pb.go +++ b/protocol/go/entityresolution/entity_resolution_grpc.pb.go @@ -27,7 +27,9 @@ const ( // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. type EntityResolutionServiceClient interface { + // Deprecated: use v2 ResolveEntities instead ResolveEntities(ctx context.Context, in *ResolveEntitiesRequest, opts ...grpc.CallOption) (*ResolveEntitiesResponse, error) + // Deprecated: use v2 CreateEntityChainsFromTokens instead CreateEntityChainFromJwt(ctx context.Context, in *CreateEntityChainFromJwtRequest, opts ...grpc.CallOption) (*CreateEntityChainFromJwtResponse, error) } @@ -61,7 +63,9 @@ func (c *entityResolutionServiceClient) CreateEntityChainFromJwt(ctx context.Con // All implementations must embed UnimplementedEntityResolutionServiceServer // for forward compatibility type EntityResolutionServiceServer interface { + // Deprecated: use v2 ResolveEntities instead ResolveEntities(context.Context, *ResolveEntitiesRequest) (*ResolveEntitiesResponse, error) + // Deprecated: use v2 CreateEntityChainsFromTokens instead CreateEntityChainFromJwt(context.Context, *CreateEntityChainFromJwtRequest) (*CreateEntityChainFromJwtResponse, error) mustEmbedUnimplementedEntityResolutionServiceServer() } diff --git a/protocol/go/entityresolution/entityresolutionconnect/entity_resolution.connect.go b/protocol/go/entityresolution/entityresolutionconnect/entity_resolution.connect.go index 05aeae6492..85e82134c5 100644 --- a/protocol/go/entityresolution/entityresolutionconnect/entity_resolution.connect.go +++ b/protocol/go/entityresolution/entityresolutionconnect/entity_resolution.connect.go @@ -51,7 +51,9 @@ var ( // EntityResolutionServiceClient is a client for the entityresolution.EntityResolutionService // service. type EntityResolutionServiceClient interface { + // Deprecated: use v2 ResolveEntities instead ResolveEntities(context.Context, *connect.Request[entityresolution.ResolveEntitiesRequest]) (*connect.Response[entityresolution.ResolveEntitiesResponse], error) + // Deprecated: use v2 CreateEntityChainsFromTokens instead CreateEntityChainFromJwt(context.Context, *connect.Request[entityresolution.CreateEntityChainFromJwtRequest]) (*connect.Response[entityresolution.CreateEntityChainFromJwtResponse], error) } @@ -99,7 +101,9 @@ func (c *entityResolutionServiceClient) CreateEntityChainFromJwt(ctx context.Con // EntityResolutionServiceHandler is an implementation of the // entityresolution.EntityResolutionService service. type EntityResolutionServiceHandler interface { + // Deprecated: use v2 ResolveEntities instead ResolveEntities(context.Context, *connect.Request[entityresolution.ResolveEntitiesRequest]) (*connect.Response[entityresolution.ResolveEntitiesResponse], error) + // Deprecated: use v2 CreateEntityChainsFromTokens instead CreateEntityChainFromJwt(context.Context, *connect.Request[entityresolution.CreateEntityChainFromJwtRequest]) (*connect.Response[entityresolution.CreateEntityChainFromJwtResponse], error) } diff --git a/service/entityresolution/entity_resolution.proto b/service/entityresolution/entity_resolution.proto index bbccdef37a..4b93ab2fad 100644 --- a/service/entityresolution/entity_resolution.proto +++ b/service/entityresolution/entity_resolution.proto @@ -107,12 +107,14 @@ message CreateEntityChainFromJwtResponse { service EntityResolutionService { + // Deprecated: use v2 ResolveEntities instead rpc ResolveEntities(ResolveEntitiesRequest) returns (ResolveEntitiesResponse) { option (google.api.http) = { post: "/entityresolution/resolve" body: "*"; }; } + // Deprecated: use v2 CreateEntityChainsFromTokens instead rpc CreateEntityChainFromJwt(CreateEntityChainFromJwtRequest) returns (CreateEntityChainFromJwtResponse) { option (google.api.http) = { post: "/entityresolution/entitychain" From 63c29a8d9b1333d682a4970fd9b8a475eb87fa5f Mon Sep 17 00:00:00 2001 From: jakedoublev Date: Thu, 15 May 2025 13:35:11 -0700 Subject: [PATCH 45/49] bump protocol/go in service module --- service/go.mod | 2 +- service/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/service/go.mod b/service/go.mod index 3a8c4a7fcd..0e54cc2fe5 100644 --- a/service/go.mod +++ b/service/go.mod @@ -30,7 +30,7 @@ require ( github.com/opentdf/platform/lib/flattening v0.1.3 github.com/opentdf/platform/lib/identifier v0.0.0-20250506204946-8822c4516627 github.com/opentdf/platform/lib/ocrypto v0.1.9 - github.com/opentdf/platform/protocol/go v0.3.2 + github.com/opentdf/platform/protocol/go v0.3.3 github.com/opentdf/platform/sdk v0.4.4 github.com/pressly/goose/v3 v3.19.1 github.com/spf13/cobra v1.9.1 diff --git a/service/go.sum b/service/go.sum index f1e9408281..4c00374105 100644 --- a/service/go.sum +++ b/service/go.sum @@ -272,8 +272,8 @@ github.com/opentdf/platform/lib/identifier v0.0.0-20250506204946-8822c4516627 h1 github.com/opentdf/platform/lib/identifier v0.0.0-20250506204946-8822c4516627/go.mod h1:/tHnLlSVOq3qmbIYSvKrtuZchQfagenv4wG5twl4oRs= github.com/opentdf/platform/lib/ocrypto v0.1.9 h1:GvgPB7CoK7JmWvsSvJ0hc+RC0wezgcuRpy3q2oYKjdA= github.com/opentdf/platform/lib/ocrypto v0.1.9/go.mod h1:UTtqh8mvhAYA+sEnaMxpr/406e84L5Q1sAxtKGIXfu4= -github.com/opentdf/platform/protocol/go v0.3.2 h1:WugeSl7RSRM7e7c5jJumZOIW2jr+sMqwDzpGUGyeC5k= -github.com/opentdf/platform/protocol/go v0.3.2/go.mod h1:nErYkgt32GW22CNqSyLO+JE49C3JndI1TsVdF+CUYd4= +github.com/opentdf/platform/protocol/go v0.3.3 h1:ySnnMniOFpxnc4G2EPGQEuEzaYAfLtNhqqIkGv1XXQM= +github.com/opentdf/platform/protocol/go v0.3.3/go.mod h1:nErYkgt32GW22CNqSyLO+JE49C3JndI1TsVdF+CUYd4= github.com/opentdf/platform/sdk v0.4.4 h1:jBJPXZBOodmanla9aS1aaPQgcg7zqOEbBTLF0c0BULM= github.com/opentdf/platform/sdk v0.4.4/go.mod h1:xPjymAKCbFzo+z+PvFVa10NOT+9i5ljxmJaGJ9tkPrw= github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= From 11010b67e24eb47df05c366b50a4420d60b502bb Mon Sep 17 00:00:00 2001 From: jakedoublev Date: Thu, 15 May 2025 13:35:35 -0700 Subject: [PATCH 46/49] bump protocol/go in sdk module --- sdk/go.mod | 2 +- sdk/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sdk/go.mod b/sdk/go.mod index c6a509b07a..2dbdec1282 100644 --- a/sdk/go.mod +++ b/sdk/go.mod @@ -12,7 +12,7 @@ require ( github.com/lestrrat-go/jwx/v2 v2.0.21 github.com/opentdf/platform/lib/fixtures v0.2.10 github.com/opentdf/platform/lib/ocrypto v0.1.9 - github.com/opentdf/platform/protocol/go v0.3.2 + github.com/opentdf/platform/protocol/go v0.3.3 github.com/stretchr/testify v1.10.0 github.com/testcontainers/testcontainers-go v0.34.0 github.com/xeipuuv/gojsonschema v1.2.0 diff --git a/sdk/go.sum b/sdk/go.sum index 1ee9aa961e..3bf6b34267 100644 --- a/sdk/go.sum +++ b/sdk/go.sum @@ -116,8 +116,8 @@ github.com/opentdf/platform/lib/fixtures v0.2.10 h1:R688b98ctsEiDRlQSvLxmAWT7bXv github.com/opentdf/platform/lib/fixtures v0.2.10/go.mod h1:wGhclxDeDXf8bp5VAWztT1nY2gWVNGQLd8rWs5wtXV0= github.com/opentdf/platform/lib/ocrypto v0.1.9 h1:GvgPB7CoK7JmWvsSvJ0hc+RC0wezgcuRpy3q2oYKjdA= github.com/opentdf/platform/lib/ocrypto v0.1.9/go.mod h1:UTtqh8mvhAYA+sEnaMxpr/406e84L5Q1sAxtKGIXfu4= -github.com/opentdf/platform/protocol/go v0.3.2 h1:WugeSl7RSRM7e7c5jJumZOIW2jr+sMqwDzpGUGyeC5k= -github.com/opentdf/platform/protocol/go v0.3.2/go.mod h1:nErYkgt32GW22CNqSyLO+JE49C3JndI1TsVdF+CUYd4= +github.com/opentdf/platform/protocol/go v0.3.3 h1:ySnnMniOFpxnc4G2EPGQEuEzaYAfLtNhqqIkGv1XXQM= +github.com/opentdf/platform/protocol/go v0.3.3/go.mod h1:nErYkgt32GW22CNqSyLO+JE49C3JndI1TsVdF+CUYd4= github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= From 91d68f842d5aa731ce2f674923bfe2f774de1f7e Mon Sep 17 00:00:00 2001 From: jakedoublev Date: Thu, 15 May 2025 13:46:07 -0700 Subject: [PATCH 47/49] fix tests referencing updated proto field name --- .../entityresolution/claims/v2/entity_resolution_test.go | 6 ++++-- .../entityresolution/keycloak/v2/entity_resolution_test.go | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/service/entityresolution/claims/v2/entity_resolution_test.go b/service/entityresolution/claims/v2/entity_resolution_test.go index d8560ed207..6dffc4048a 100644 --- a/service/entityresolution/claims/v2/entity_resolution_test.go +++ b/service/entityresolution/claims/v2/entity_resolution_test.go @@ -1,6 +1,7 @@ package claims_test import ( + "fmt" "testing" "github.com/opentdf/platform/protocol/go/entity" @@ -29,12 +30,13 @@ func Test_ClientResolveEntity(t *testing.T) { entityRepresentations := resp.GetEntityRepresentations() assert.NotNil(t, entityRepresentations) assert.Len(t, entityRepresentations, 1) + fmt.Printf("entityRepresentations: %+v\n", entityRepresentations) assert.Equal(t, "1234", entityRepresentations[0].GetOriginalId()) assert.Len(t, entityRepresentations[0].GetAdditionalProps(), 1) propMap := entityRepresentations[0].GetAdditionalProps()[0].AsMap() assert.Equal(t, "random", propMap["clientId"]) - assert.Equal(t, "1234", propMap["id"]) + assert.Equal(t, "1234", propMap["ephemeralId"]) } func Test_EmailResolveEntity(t *testing.T) { @@ -56,7 +58,7 @@ func Test_EmailResolveEntity(t *testing.T) { assert.Len(t, entityRepresentations[0].GetAdditionalProps(), 1) propMap := entityRepresentations[0].GetAdditionalProps()[0].AsMap() assert.Equal(t, "random", propMap["emailAddress"]) - assert.Equal(t, "1234", propMap["id"]) + assert.Equal(t, "1234", propMap["ephemeralId"]) } func Test_ClaimsResolveEntity(t *testing.T) { diff --git a/service/entityresolution/keycloak/v2/entity_resolution_test.go b/service/entityresolution/keycloak/v2/entity_resolution_test.go index f0d89729fc..d7bd502714 100644 --- a/service/entityresolution/keycloak/v2/entity_resolution_test.go +++ b/service/entityresolution/keycloak/v2/entity_resolution_test.go @@ -530,7 +530,7 @@ func Test_KCEntityResolutionNotFoundInferEmail(t *testing.T) { assert.Len(t, entityRepresentations[0].GetAdditionalProps(), 1) propMap := entityRepresentations[0].GetAdditionalProps()[0].AsMap() assert.Equal(t, "random@sample.org", propMap["emailAddress"]) - assert.Equal(t, "1234", propMap["id"]) + assert.Equal(t, "1234", propMap["ephemeralId"]) } func Test_KCEntityResolutionNotFoundInferClientId(t *testing.T) { @@ -560,7 +560,7 @@ func Test_KCEntityResolutionNotFoundInferClientId(t *testing.T) { assert.Len(t, entityRepresentations[0].GetAdditionalProps(), 1) propMap := entityRepresentations[0].GetAdditionalProps()[0].AsMap() assert.Equal(t, "random", propMap["clientId"]) - assert.Equal(t, "1234", propMap["id"]) + assert.Equal(t, "1234", propMap["ephemeralId"]) } func Test_KCEntityResolutionNotFoundNotInferUsername(t *testing.T) { From c6713b0200030d5b8429c4878468a6067622c4bd Mon Sep 17 00:00:00 2001 From: jakedoublev Date: Thu, 15 May 2025 13:48:34 -0700 Subject: [PATCH 48/49] fix service registry counts with two ERS service versions --- service/pkg/server/services_test.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/service/pkg/server/services_test.go b/service/pkg/server/services_test.go index bbe74a75b0..a2048f2305 100644 --- a/service/pkg/server/services_test.go +++ b/service/pkg/server/services_test.go @@ -124,7 +124,8 @@ func (suite *ServiceTestSuite) Test_RegisterCoreServices_In_Mode_ALL_Expect_All_ ers, err := registry.GetNamespace(serviceEntityResolution) suite.Require().NoError(err) - suite.Len(ers.Services, 1) + ersServiceVersionsCount := 2 + suite.Len(ers.Services, ersServiceVersionsCount) suite.Equal(modeCore, ers.Mode) } @@ -209,7 +210,8 @@ func (suite *ServiceTestSuite) Test_RegisterServices_In_Mode_Core_Plus_Kas_Expec ers, err := registry.GetNamespace(serviceEntityResolution) suite.Require().NoError(err) - suite.Len(ers.Services, 1) + ersServiceVersionsCount := 2 + suite.Len(ers.Services, ersServiceVersionsCount) suite.Equal(modeERS, ers.Mode) } From 264b969608004acd8217d14e4dc8e04916e2eafc Mon Sep 17 00:00:00 2001 From: jakedoublev Date: Thu, 15 May 2025 13:51:45 -0700 Subject: [PATCH 49/49] rm debug print statement in test --- service/entityresolution/claims/v2/entity_resolution_test.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/service/entityresolution/claims/v2/entity_resolution_test.go b/service/entityresolution/claims/v2/entity_resolution_test.go index 6dffc4048a..b5ac14b369 100644 --- a/service/entityresolution/claims/v2/entity_resolution_test.go +++ b/service/entityresolution/claims/v2/entity_resolution_test.go @@ -1,7 +1,6 @@ package claims_test import ( - "fmt" "testing" "github.com/opentdf/platform/protocol/go/entity" @@ -30,7 +29,6 @@ func Test_ClientResolveEntity(t *testing.T) { entityRepresentations := resp.GetEntityRepresentations() assert.NotNil(t, entityRepresentations) assert.Len(t, entityRepresentations, 1) - fmt.Printf("entityRepresentations: %+v\n", entityRepresentations) assert.Equal(t, "1234", entityRepresentations[0].GetOriginalId()) assert.Len(t, entityRepresentations[0].GetAdditionalProps(), 1)
            entity_referenceentity_identifier EntityIdentifier

            entity must be provided

            an entity must be identified for entitlement decisioning

            ResolveEntities ResolveEntitiesRequest ResolveEntitiesResponse

            Deprecated: use v2 ResolveEntities instead

            CreateEntityChainFromJwt CreateEntityChainFromJwtRequest CreateEntityChainFromJwtResponse

            Deprecated: use v2 CreateEntityChainsFromTokens instead