From 7efe88649dec35fa186fe0a0d4795a5e5523788b Mon Sep 17 00:00:00 2001
From: Chris Reed
Date: Fri, 29 May 2026 10:10:06 -0500
Subject: [PATCH 01/10] feat(core): Add search query information to protos.
---
docs/grpc/index.html | 98 ++
.../authorization/authorization.openapi.yaml | 446 +++---
.../v2/authorization.openapi.yaml | 538 +++----
docs/openapi/common/common.openapi.yaml | 38 +-
docs/openapi/entity/entity.openapi.yaml | 88 +-
.../entity_resolution.openapi.yaml | 284 ++--
.../v2/entity_resolution.openapi.yaml | 294 ++--
docs/openapi/kas/kas.openapi.yaml | 265 ++--
.../policy/actions/actions.openapi.yaml | 497 +++----
.../policy/attributes/attributes.openapi.yaml | 815 +++++-----
.../key_access_server_registry.openapi.yaml | 1112 +++++++-------
.../keymanagement/key_management.openapi.yaml | 223 ++-
.../policy/namespaces/namespaces.openapi.yaml | 449 +++---
docs/openapi/policy/objects.openapi.yaml | 261 ++--
.../obligations/obligations.openapi.yaml | 667 ++++-----
.../registered_resources.openapi.yaml | 646 ++++----
.../resource_mapping.openapi.yaml | 524 +++----
docs/openapi/policy/selectors.openapi.yaml | 32 +-
.../subject_mapping.openapi.yaml | 587 ++++----
.../openapi/policy/unsafe/unsafe.openapi.yaml | 526 +++----
.../wellknown_configuration.openapi.yaml | 144 +-
.../go/policy/attributes/attributes.pb.go | 1320 +++++++++--------
.../key_access_server_registry.pb.go | 1300 ++++++++--------
.../go/policy/namespaces/namespaces.pb.go | 567 +++----
.../go/policy/obligations/obligations.pb.go | 532 +++----
.../registered_resources.pb.go | 498 ++++---
protocol/go/policy/selectors.pb.go | 206 ++-
.../subjectmapping/subject_mapping.pb.go | 492 +++---
service/policy/attributes/attributes.proto | 3 +
.../key_access_server_registry.proto | 6 +
service/policy/namespaces/namespaces.proto | 3 +
service/policy/obligations/obligations.proto | 6 +
.../registered_resources.proto | 6 +
service/policy/selectors.proto | 4 +
.../subjectmapping/subject_mapping.proto | 6 +
35 files changed, 6933 insertions(+), 6550 deletions(-)
diff --git a/docs/grpc/index.html b/docs/grpc/index.html
index a59d73dd56..c20f7bd427 100644
--- a/docs/grpc/index.html
+++ b/docs/grpc/index.html
@@ -798,6 +798,10 @@ Table of Contents
MPageResponse
+
+ MSearch
+
+
ESortDirection
@@ -7427,6 +7431,30 @@
+ Search
+
+
+
+
+
+ | Field | Type | Label | Description |
+
+
+
+
+ | term |
+ string |
+ |
+ |
+
+
+
+
+
+
+
+
+
SortDirection
@@ -8852,6 +8880,13 @@ ListAttributesRequest
- both UNSPECIFIED or sort omitted defaults to created_at DESC
+
+ | search |
+ policy.Search |
+ |
+ Optional |
+
+
@@ -10578,6 +10613,13 @@ ListKeyAccessServersRequ
- both UNSPECIFIED or sort omitted defaults to created_at DESC
+
+ | search |
+ policy.Search |
+ |
+ Optional |
+
+
@@ -10752,6 +10794,13 @@ ListKeysRequest
- both UNSPECIFIED or sort omitted defaults to created_at DESC
+
+ | search |
+ policy.Search |
+ |
+ Optional |
+
+
@@ -12508,6 +12557,13 @@ ListNamespacesRequest
- both UNSPECIFIED or sort omitted defaults to created_at DESC
+
+ | search |
+ policy.Search |
+ |
+ Optional |
+
+
@@ -13671,6 +13727,13 @@ ListObligationTriggers
Optional |
+
+ | search |
+ policy.Search |
+ |
+ Optional |
+
+
@@ -13751,6 +13814,13 @@ ListObligationsRequest
- both UNSPECIFIED or sort omitted defaults to created_at DESC
+
+ | search |
+ policy.Search |
+ |
+ Optional |
+
+
@@ -14795,6 +14865,13 @@ ListRegi
Optional |
+
+ | search |
+ policy.Search |
+ |
+ Optional |
+
+
@@ -14875,6 +14952,13 @@ ListRegistere
- both UNSPECIFIED or sort omitted defaults to created_at DESC
+
+ | search |
+ policy.Search |
+ |
+ Optional |
+
+
@@ -16520,6 +16604,13 @@ ListSubjectCondit
- both UNSPECIFIED or sort omitted defaults to created_at DESC
+
+ | search |
+ policy.Search |
+ |
+ Optional |
+
+
@@ -16600,6 +16691,13 @@ ListSubjectMappingsReq
- both UNSPECIFIED or sort omitted defaults to created_at DESC
+
+ | search |
+ policy.Search |
+ |
+ Optional |
+
+
diff --git a/docs/openapi/authorization/authorization.openapi.yaml b/docs/openapi/authorization/authorization.openapi.yaml
index 1f3648bae8..5a112b61b6 100644
--- a/docs/openapi/authorization/authorization.openapi.yaml
+++ b/docs/openapi/authorization/authorization.openapi.yaml
@@ -109,6 +109,65 @@ paths:
$ref: '#/components/schemas/authorization.GetEntitlementsResponse'
components:
schemas:
+ authorization.DecisionResponse.Decision:
+ type: string
+ title: Decision
+ enum:
+ - DECISION_UNSPECIFIED
+ - DECISION_DENY
+ - DECISION_PERMIT
+ authorization.Entity.Category:
+ type: string
+ title: Category
+ enum:
+ - CATEGORY_UNSPECIFIED
+ - CATEGORY_SUBJECT
+ - CATEGORY_ENVIRONMENT
+ policy.Action.StandardAction:
+ type: string
+ title: StandardAction
+ enum:
+ - STANDARD_ACTION_UNSPECIFIED
+ - STANDARD_ACTION_DECRYPT
+ - STANDARD_ACTION_TRANSMIT
+ policy.Algorithm:
+ type: string
+ title: Algorithm
+ enum:
+ - ALGORITHM_UNSPECIFIED
+ - ALGORITHM_RSA_2048
+ - ALGORITHM_RSA_4096
+ - ALGORITHM_EC_P256
+ - ALGORITHM_EC_P384
+ - ALGORITHM_EC_P521
+ - ALGORITHM_HPQT_XWING
+ - ALGORITHM_HPQT_SECP256R1_MLKEM768
+ - ALGORITHM_HPQT_SECP384R1_MLKEM1024
+ description: Supported key algorithms.
+ policy.KasPublicKeyAlgEnum:
+ type: string
+ title: KasPublicKeyAlgEnum
+ enum:
+ - KAS_PUBLIC_KEY_ALG_ENUM_UNSPECIFIED
+ - KAS_PUBLIC_KEY_ALG_ENUM_RSA_2048
+ - KAS_PUBLIC_KEY_ALG_ENUM_RSA_4096
+ - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP256R1
+ - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP384R1
+ - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP521R1
+ - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_XWING
+ - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP256R1_MLKEM768
+ - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP384R1_MLKEM1024
+ policy.SourceType:
+ type: string
+ title: SourceType
+ enum:
+ - SOURCE_TYPE_UNSPECIFIED
+ - SOURCE_TYPE_INTERNAL
+ - SOURCE_TYPE_EXTERNAL
+ description: |-
+ Describes whether this kas is managed by the organization or if they imported
+ the kas information from an external party. These two modes are necessary in order
+ to encrypt a tdf dek with an external parties kas public key.
authorization.DecisionRequest:
type: object
properties:
@@ -133,6 +192,7 @@ components:
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": [
{
@@ -204,11 +264,13 @@ components:
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",
@@ -232,92 +294,70 @@ components:
"resourceAttributesId": "attr-set-2",
"decision": "DECISION_DENY"
}
- authorization.DecisionResponse.Decision:
- type: string
- title: Decision
- enum:
- - DECISION_UNSPECIFIED
- - DECISION_DENY
- - DECISION_PERMIT
authorization.Entity:
type: object
- allOf:
+ oneOf:
- properties:
- id:
- type: string
- title: id
- description: ephemeral id for tracking between request and response
- category:
- title: category
- $ref: '#/components/schemas/authorization.Entity.Category'
- - oneOf:
- - type: object
- properties:
- claims:
- title: claims
- $ref: '#/components/schemas/google.protobuf.Any'
+ claims:
title: claims
- required:
- - claims
- - type: object
- properties:
- clientId:
- type: string
- title: client_id
+ $ref: '#/components/schemas/google.protobuf.Any'
+ title: claims
+ required:
+ - claims
+ - properties:
+ clientId:
+ type: string
title: client_id
- required:
- - clientId
- - type: object
- properties:
- custom:
- title: custom
- $ref: '#/components/schemas/authorization.EntityCustom'
+ title: client_id
+ required:
+ - clientId
+ - properties:
+ custom:
title: custom
- required:
- - custom
- - type: object
- properties:
- emailAddress:
- type: string
- title: email_address
- description: one of the entity options must be set
+ $ref: '#/components/schemas/authorization.EntityCustom'
+ title: custom
+ required:
+ - custom
+ - properties:
+ emailAddress:
+ type: string
title: email_address
- required:
- - emailAddress
- - type: object
- properties:
- remoteClaimsUrl:
- type: string
- title: remote_claims_url
+ description: one of the entity options must be set
+ title: email_address
+ required:
+ - emailAddress
+ - properties:
+ remoteClaimsUrl:
+ type: string
title: remote_claims_url
- required:
- - remoteClaimsUrl
- - type: object
- properties:
- userName:
- type: string
- title: user_name
+ title: remote_claims_url
+ required:
+ - remoteClaimsUrl
+ - properties:
+ userName:
+ type: string
title: user_name
- required:
- - userName
- - type: object
- properties:
- uuid:
- type: string
- title: uuid
+ title: user_name
+ required:
+ - userName
+ - properties:
+ uuid:
+ type: string
title: uuid
- required:
- - uuid
+ title: uuid
+ required:
+ - uuid
+ properties:
+ id:
+ type: string
+ title: id
+ description: ephemeral id for tracking between request and response
+ category:
+ title: category
+ $ref: '#/components/schemas/authorization.Entity.Category'
title: Entity
additionalProperties: false
description: PE (Person Entity) or NPE (Non-Person Entity)
- authorization.Entity.Category:
- type: string
- title: Category
- enum:
- - CATEGORY_UNSPECIFIED
- - CATEGORY_SUBJECT
- - CATEGORY_ENVIRONMENT
authorization.EntityChain:
type: object
properties:
@@ -405,22 +445,22 @@ components:
title: entities
description: list of requested entities
scope:
- oneOf:
- - $ref: '#/components/schemas/authorization.ResourceAttribute'
- - type: "null"
title: scope
description: optional attribute fqn as a scope
+ nullable: true
+ $ref: '#/components/schemas/authorization.ResourceAttribute'
withComprehensiveHierarchy:
- type:
- - boolean
- - "null"
+ type: boolean
title: with_comprehensive_hierarchy
description: optional parameter to return a full list of entitlements - returns lower hierarchy attributes
+ nullable: true
title: GetEntitlementsRequest
additionalProperties: false
description: |-
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": [
{
@@ -451,6 +491,7 @@ components:
additionalProperties: false
description: |-
Example Response for a request of : Get entitlements for bob and alice (both represented using an email address
+
{
"entitlements": [
{
@@ -522,6 +563,7 @@ components:
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": [
{
@@ -584,75 +626,6 @@ components:
title: value
title: LabelsEntry
additionalProperties: false
- connect-protocol-version:
- type: number
- title: Connect-Protocol-Version
- enum:
- - 1
- description: Define the version of the Connect protocol
- const: 1
- connect-timeout-header:
- type: number
- title: Connect-Timeout-Ms
- description: Define the timeout, in ms
- connect.error:
- type: object
- properties:
- code:
- type: string
- examples:
- - not_found
- enum:
- - canceled
- - unknown
- - invalid_argument
- - deadline_exceeded
- - not_found
- - already_exists
- - permission_denied
- - resource_exhausted
- - failed_precondition
- - aborted
- - out_of_range
- - unimplemented
- - internal
- - unavailable
- - data_loss
- - unauthenticated
- description: The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
- message:
- type: string
- description: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
- details:
- type: array
- items:
- $ref: '#/components/schemas/connect.error_details.Any'
- description: A list of messages that carry the error details. There is no limit on the number of messages.
- title: Connect Error
- additionalProperties: true
- description: 'Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation'
- connect.error_details.Any:
- type: object
- properties:
- type:
- type: string
- description: 'A URL that acts as a globally unique identifier for the type of the serialized message. For example: `type.googleapis.com/google.rpc.ErrorInfo`. This is used to determine the schema of the data in the `value` field and is the discriminator for the `debug` field.'
- value:
- type: string
- format: binary
- description: The Protobuf message, serialized as bytes and base64-encoded. The specific message type is identified by the `type` field.
- debug:
- oneOf:
- - type: object
- title: Any
- additionalProperties: true
- description: Detailed error information.
- discriminator:
- propertyName: type
- title: Debug
- description: Deserialized error detail payload. The 'type' field indicates the schema. This field is for easier debugging and should not be relied upon for application logic.
- additionalProperties: true
- description: Contains an arbitrary serialized message along with a @type that describes the type of the serialized message, with an additional debug field for ConnectRPC error details.
google.protobuf.Any:
type: object
properties:
@@ -661,6 +634,9 @@ components:
value:
type: string
format: binary
+ debug:
+ type: object
+ additionalProperties: true
additionalProperties: true
description: Contains an arbitrary serialized message along with a @type that describes the type of the serialized message.
google.protobuf.BoolValue:
@@ -675,8 +651,8 @@ components:
google.protobuf.Timestamp:
type: string
examples:
- - "2023-01-15T01:30:15.01Z"
- - "2024-12-25T12:00:00Z"
+ - 1s
+ - 1.000340012s
format: date-time
description: |-
A Timestamp represents a point in time independent of any time zone or local
@@ -770,65 +746,41 @@ components:
) to obtain a formatter capable of generating timestamps in this format.
policy.Action:
type: object
- allOf:
+ oneOf:
- properties:
- id:
- type: string
- title: id
- description: Generated uuid in database
- name:
+ custom:
type: string
- title: name
- namespace:
- title: namespace
- description: Namespace context for this action
- $ref: '#/components/schemas/policy.Namespace'
- metadata:
- title: metadata
- $ref: '#/components/schemas/common.Metadata'
- - oneOf:
- - type: object
- properties:
- custom:
- type: string
- title: custom
- description: Deprecated
title: custom
- required:
- - custom
- - type: object
- properties:
- standard:
- title: standard
- description: Deprecated
- $ref: '#/components/schemas/policy.Action.StandardAction'
+ description: Deprecated
+ title: custom
+ required:
+ - custom
+ - properties:
+ standard:
title: standard
- required:
- - standard
+ description: Deprecated
+ $ref: '#/components/schemas/policy.Action.StandardAction'
+ title: standard
+ required:
+ - standard
+ properties:
+ id:
+ type: string
+ title: id
+ description: Generated uuid in database
+ name:
+ type: string
+ title: name
+ namespace:
+ title: namespace
+ description: Namespace context for this action
+ $ref: '#/components/schemas/policy.Namespace'
+ metadata:
+ title: metadata
+ $ref: '#/components/schemas/common.Metadata'
title: Action
additionalProperties: false
description: An action an entity can take
- policy.Action.StandardAction:
- type: string
- title: StandardAction
- enum:
- - STANDARD_ACTION_UNSPECIFIED
- - STANDARD_ACTION_DECRYPT
- - STANDARD_ACTION_TRANSMIT
- policy.Algorithm:
- type: string
- title: Algorithm
- enum:
- - ALGORITHM_UNSPECIFIED
- - ALGORITHM_RSA_2048
- - ALGORITHM_RSA_4096
- - ALGORITHM_EC_P256
- - ALGORITHM_EC_P384
- - ALGORITHM_EC_P521
- - ALGORITHM_HPQT_XWING
- - ALGORITHM_HPQT_SECP256R1_MLKEM768
- - ALGORITHM_HPQT_SECP384R1_MLKEM1024
- description: Supported key algorithms.
policy.KasPublicKey:
type: object
properties:
@@ -847,7 +799,7 @@ components:
alg:
not:
enum:
- - KAS_PUBLIC_KEY_ALG_ENUM_UNSPECIFIED
+ - 0
title: alg
description: |-
A known algorithm type with any additional parameters encoded.
@@ -859,19 +811,6 @@ components:
description: |-
Deprecated
A KAS public key and some associated metadata for further identifcation
- policy.KasPublicKeyAlgEnum:
- type: string
- title: KasPublicKeyAlgEnum
- enum:
- - KAS_PUBLIC_KEY_ALG_ENUM_UNSPECIFIED
- - KAS_PUBLIC_KEY_ALG_ENUM_RSA_2048
- - KAS_PUBLIC_KEY_ALG_ENUM_RSA_4096
- - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP256R1
- - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP384R1
- - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP521R1
- - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_XWING
- - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP256R1_MLKEM768
- - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP384R1_MLKEM1024
policy.KasPublicKeySet:
type: object
properties:
@@ -894,9 +833,13 @@ components:
uri:
type: string
title: uri
- description: |
+ description: |+
Address of a KAS instance
- uri_format // URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.
+ URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.:
+ ```
+ this.matches('^https?://[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?)*(:[0-9]+)?(/.*)?$')
+ ```
+
publicKey:
title: public_key
description: 'Deprecated: KAS can have multiple key pairs'
@@ -964,8 +907,7 @@ components:
policy.PublicKey:
type: object
oneOf:
- - type: object
- properties:
+ - properties:
cached:
title: cached
description: public key with additional information. Current preferred version
@@ -973,14 +915,17 @@ components:
title: cached
required:
- cached
- - type: object
- properties:
+ - properties:
remote:
type: string
title: remote
- description: |
+ description: |+
kas public key url - optional since can also be retrieved via public key
- uri_format // URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.
+ URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.:
+ ```
+ this.matches('^https://[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?)*(/.*)?$')
+ ```
+
title: remote
required:
- remote
@@ -1018,17 +963,50 @@ components:
title: pem
title: SimpleKasPublicKey
additionalProperties: false
- policy.SourceType:
- type: string
- title: SourceType
+ connect-protocol-version:
+ type: number
+ title: Connect-Protocol-Version
enum:
- - SOURCE_TYPE_UNSPECIFIED
- - SOURCE_TYPE_INTERNAL
- - SOURCE_TYPE_EXTERNAL
- description: |-
- Describes whether this kas is managed by the organization or if they imported
- the kas information from an external party. These two modes are necessary in order
- to encrypt a tdf dek with an external parties kas public key.
+ - 1
+ description: Define the version of the Connect protocol
+ const: 1
+ connect-timeout-header:
+ type: number
+ title: Connect-Timeout-Ms
+ description: Define the timeout, in ms
+ connect.error:
+ type: object
+ properties:
+ code:
+ type: string
+ examples:
+ - not_found
+ enum:
+ - canceled
+ - unknown
+ - invalid_argument
+ - deadline_exceeded
+ - not_found
+ - already_exists
+ - permission_denied
+ - resource_exhausted
+ - failed_precondition
+ - aborted
+ - out_of_range
+ - unimplemented
+ - internal
+ - unavailable
+ - data_loss
+ - unauthenticated
+ description: The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
+ message:
+ type: string
+ description: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
+ detail:
+ $ref: '#/components/schemas/google.protobuf.Any'
+ title: Connect Error
+ additionalProperties: true
+ description: 'Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation'
security: []
tags:
- name: authorization.AuthorizationService
diff --git a/docs/openapi/authorization/v2/authorization.openapi.yaml b/docs/openapi/authorization/v2/authorization.openapi.yaml
index b4dbfa42d6..7e9d837275 100644
--- a/docs/openapi/authorization/v2/authorization.openapi.yaml
+++ b/docs/openapi/authorization/v2/authorization.openapi.yaml
@@ -37,12 +37,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/authorization.v2.GetDecisionResponse'
- /authorization.v2.AuthorizationService/GetDecisionBulk:
+ /authorization.v2.AuthorizationService/GetDecisionMultiResource:
post:
tags:
- authorization.v2.AuthorizationService
- summary: GetDecisionBulk
- operationId: authorization.v2.AuthorizationService.GetDecisionBulk
+ summary: GetDecisionMultiResource
+ operationId: authorization.v2.AuthorizationService.GetDecisionMultiResource
parameters:
- name: Connect-Protocol-Version
in: header
@@ -57,7 +57,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/authorization.v2.GetDecisionBulkRequest'
+ $ref: '#/components/schemas/authorization.v2.GetDecisionMultiResourceRequest'
required: true
responses:
default:
@@ -71,13 +71,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/authorization.v2.GetDecisionBulkResponse'
- /authorization.v2.AuthorizationService/GetDecisionMultiResource:
+ $ref: '#/components/schemas/authorization.v2.GetDecisionMultiResourceResponse'
+ /authorization.v2.AuthorizationService/GetDecisionBulk:
post:
tags:
- authorization.v2.AuthorizationService
- summary: GetDecisionMultiResource
- operationId: authorization.v2.AuthorizationService.GetDecisionMultiResource
+ summary: GetDecisionBulk
+ operationId: authorization.v2.AuthorizationService.GetDecisionBulk
parameters:
- name: Connect-Protocol-Version
in: header
@@ -92,7 +92,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/authorization.v2.GetDecisionMultiResourceRequest'
+ $ref: '#/components/schemas/authorization.v2.GetDecisionBulkRequest'
required: true
responses:
default:
@@ -106,7 +106,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/authorization.v2.GetDecisionMultiResourceResponse'
+ $ref: '#/components/schemas/authorization.v2.GetDecisionBulkResponse'
/authorization.v2.AuthorizationService/GetEntitlements:
post:
tags:
@@ -151,6 +151,58 @@ components:
- DECISION_UNSPECIFIED
- DECISION_DENY
- DECISION_PERMIT
+ entity.Entity.Category:
+ type: string
+ title: Category
+ enum:
+ - CATEGORY_UNSPECIFIED
+ - CATEGORY_SUBJECT
+ - CATEGORY_ENVIRONMENT
+ policy.Action.StandardAction:
+ type: string
+ title: StandardAction
+ enum:
+ - STANDARD_ACTION_UNSPECIFIED
+ - STANDARD_ACTION_DECRYPT
+ - STANDARD_ACTION_TRANSMIT
+ policy.Algorithm:
+ type: string
+ title: Algorithm
+ enum:
+ - ALGORITHM_UNSPECIFIED
+ - ALGORITHM_RSA_2048
+ - ALGORITHM_RSA_4096
+ - ALGORITHM_EC_P256
+ - ALGORITHM_EC_P384
+ - ALGORITHM_EC_P521
+ - ALGORITHM_HPQT_XWING
+ - ALGORITHM_HPQT_SECP256R1_MLKEM768
+ - ALGORITHM_HPQT_SECP384R1_MLKEM1024
+ description: Supported key algorithms.
+ policy.KasPublicKeyAlgEnum:
+ type: string
+ title: KasPublicKeyAlgEnum
+ enum:
+ - KAS_PUBLIC_KEY_ALG_ENUM_UNSPECIFIED
+ - KAS_PUBLIC_KEY_ALG_ENUM_RSA_2048
+ - KAS_PUBLIC_KEY_ALG_ENUM_RSA_4096
+ - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP256R1
+ - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP384R1
+ - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP521R1
+ - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_XWING
+ - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP256R1_MLKEM768
+ - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP384R1_MLKEM1024
+ policy.SourceType:
+ type: string
+ title: SourceType
+ enum:
+ - SOURCE_TYPE_UNSPECIFIED
+ - SOURCE_TYPE_INTERNAL
+ - SOURCE_TYPE_EXTERNAL
+ description: |-
+ Describes whether this kas is managed by the organization or if they imported
+ the kas information from an external party. These two modes are necessary in order
+ to encrypt a tdf dek with an external parties kas public key.
authorization.v2.EntityEntitlements:
type: object
properties:
@@ -191,19 +243,21 @@ components:
authorization.v2.EntityIdentifier:
type: object
oneOf:
- - type: object
- properties:
+ - properties:
entityChain:
title: entity_chain
- description: |
+ description: |+
chain of one or more entities and at most 10
- entity_chain_required // entities must be provided and between 1 and 10 in count
+ entities must be provided and between 1 and 10 in count:
+ ```
+ has(this.entities) && this.entities.size() > 0 && this.entities.size() <= 10
+ ```
+
$ref: '#/components/schemas/entity.EntityChain'
title: entity_chain
required:
- entityChain
- - type: object
- properties:
+ - properties:
registeredResourceValueFqn:
type: string
title: registered_resource_value_fqn
@@ -215,24 +269,30 @@ components:
title: registered_resource_value_fqn
required:
- registeredResourceValueFqn
- - type: object
- properties:
+ - properties:
token:
title: token
- description: |
+ description: |+
access token (JWT), which is used to create an entity chain (comprising one or more entities)
- token_required // token must be provided
+ token must be provided:
+ ```
+ has(this.jwt) && this.jwt.size() > 0
+ ```
+
$ref: '#/components/schemas/entity.Token'
title: token
required:
- token
- - type: object
- properties:
+ - properties:
withRequestToken:
title: with_request_token
- description: |
+ description: |+
derive the entity from the request's authorization access token JWT, rather than passing in the body
- with_request_token_must_be_true // with_request_token must be true when set
+ with_request_token must be true when set:
+ ```
+ this == true
+ ```
+
$ref: '#/components/schemas/google.protobuf.BoolValue'
title: with_request_token
required:
@@ -292,19 +352,27 @@ components:
type: array
items:
type: string
- description: |
- obligation_value_fqns_valid // if provided, fulfillable_obligation_fqns must be between 1 and 50 in count with all valid FQNs
+ description: |+
+ if provided, fulfillable_obligation_fqns must be between 1 and 50 in count with all valid FQNs:
+ ```
+ this.size() == 0 || (this.size() <= 50 && this.all(item, item.isUri()))
+ ```
+
title: fulfillable_obligation_fqns
- description: |
+ description: |+
obligations (fully qualified values) the requester is capable of fulfilling
i.e. https:///obl//value/
- obligation_value_fqns_valid // if provided, fulfillable_obligation_fqns must be between 1 and 50 in count with all valid FQNs
+ if provided, fulfillable_obligation_fqns must be between 1 and 50 in count with all valid FQNs:
+ ```
+ this.size() == 0 || (this.size() <= 50 && this.all(item, item.isUri()))
+ ```
+
title: GetDecisionMultiResourceRequest
required:
- entityIdentifier
- action
additionalProperties: false
- description: |
+ description: |+
Can the identified entity/entities access?
1. one entity reference (actor)
2. one action
@@ -313,7 +381,11 @@ components:
If entitled, checks obligation policy: fulfillable obligations must satisfy all triggered.
Note: this is a more performant bulk request for multiple resource decisions, up to 1000 per request
- get_decision_multi_request.action_name_required // action.name must be provided
+ action.name must be provided:
+ ```
+ has(this.action.name)
+ ```
+
authorization.v2.GetDecisionMultiResourceResponse:
type: object
properties:
@@ -347,27 +419,39 @@ components:
type: array
items:
type: string
- description: |
- obligation_value_fqns_valid // if provided, fulfillable_obligation_fqns must be between 1 and 50 in count with all valid FQNs
+ description: |+
+ if provided, fulfillable_obligation_fqns must be between 1 and 50 in count with all valid FQNs:
+ ```
+ this.size() == 0 || (this.size() <= 50 && this.all(item, item.isUri()))
+ ```
+
title: fulfillable_obligation_fqns
- description: |
+ description: |+
obligations (fully qualified values) the requester is capable of fulfilling
i.e. https:///obl//value/
- obligation_value_fqns_valid // if provided, fulfillable_obligation_fqns must be between 1 and 50 in count with all valid FQNs
+ if provided, fulfillable_obligation_fqns must be between 1 and 50 in count with all valid FQNs:
+ ```
+ this.size() == 0 || (this.size() <= 50 && this.all(item, item.isUri()))
+ ```
+
title: GetDecisionRequest
required:
- entityIdentifier
- action
- resource
additionalProperties: false
- description: |
+ description: |+
Can the identified entity/entities access?
1. one entity reference (actor)
2. one action
3. one resource
If entitled, checks obligation policy: fulfillable obligations must satisfy all triggered.
- get_decision_request.action_name_required // action.name must be provided
+ action.name must be provided:
+ ```
+ has(this.action.name)
+ ```
+
authorization.v2.GetDecisionResponse:
type: object
properties:
@@ -385,13 +469,12 @@ components:
description: an entity must be identified for entitlement decisioning
$ref: '#/components/schemas/authorization.v2.EntityIdentifier'
withComprehensiveHierarchy:
- type:
- - boolean
- - "null"
+ type: boolean
title: with_comprehensive_hierarchy
description: |-
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
+ nullable: true
title: GetEntitlementsRequest
required:
- entityIdentifier
@@ -413,35 +496,36 @@ components:
additionalProperties: false
authorization.v2.Resource:
type: object
- allOf:
+ oneOf:
- properties:
- ephemeralId:
- type: string
- title: ephemeral_id
- description: ephemeral id for tracking between request and response
- - oneOf:
- - type: object
- properties:
- attributeValues:
- title: attribute_values
- description: |
- a set of attribute value FQNs, such as those on a TDF, between 1 and 20 in count
- attribute_values_required // if provided, resource.attribute_values must be between 1 and 20 in count with all valid FQNs
- $ref: '#/components/schemas/authorization.v2.Resource.AttributeValues'
+ attributeValues:
title: attribute_values
- required:
- - attributeValues
- - type: object
- properties:
- registeredResourceValueFqn:
- type: string
- title: registered_resource_value_fqn
- minLength: 1
- format: uri
- description: fully qualified name of the registered resource value stored in platform policy
+ description: |+
+ a set of attribute value FQNs, such as those on a TDF, between 1 and 20 in count
+ if provided, resource.attribute_values must be between 1 and 20 in count with all valid FQNs:
+ ```
+ this.fqns.size() > 0 && this.fqns.size() <= 20 && this.fqns.all(item, item.isUri())
+ ```
+
+ $ref: '#/components/schemas/authorization.v2.Resource.AttributeValues'
+ title: attribute_values
+ required:
+ - attributeValues
+ - properties:
+ registeredResourceValueFqn:
+ type: string
title: registered_resource_value_fqn
- required:
- - registeredResourceValueFqn
+ minLength: 1
+ format: uri
+ description: fully qualified name of the registered resource value stored in platform policy
+ title: registered_resource_value_fqn
+ required:
+ - registeredResourceValueFqn
+ properties:
+ ephemeralId:
+ type: string
+ title: ephemeral_id
+ description: ephemeral id for tracking between request and response
title: Resource
additionalProperties: false
description: Either a set of attribute values (such as those on a TDF) or a registered resource value
@@ -508,130 +592,49 @@ components:
title: value
title: LabelsEntry
additionalProperties: false
- connect-protocol-version:
- type: number
- title: Connect-Protocol-Version
- enum:
- - 1
- description: Define the version of the Connect protocol
- const: 1
- connect-timeout-header:
- type: number
- title: Connect-Timeout-Ms
- description: Define the timeout, in ms
- connect.error:
- type: object
- properties:
- code:
- type: string
- examples:
- - not_found
- enum:
- - canceled
- - unknown
- - invalid_argument
- - deadline_exceeded
- - not_found
- - already_exists
- - permission_denied
- - resource_exhausted
- - failed_precondition
- - aborted
- - out_of_range
- - unimplemented
- - internal
- - unavailable
- - data_loss
- - unauthenticated
- description: The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
- message:
- type: string
- description: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
- details:
- type: array
- items:
- $ref: '#/components/schemas/connect.error_details.Any'
- description: A list of messages that carry the error details. There is no limit on the number of messages.
- title: Connect Error
- additionalProperties: true
- description: 'Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation'
- connect.error_details.Any:
- type: object
- properties:
- type:
- type: string
- description: 'A URL that acts as a globally unique identifier for the type of the serialized message. For example: `type.googleapis.com/google.rpc.ErrorInfo`. This is used to determine the schema of the data in the `value` field and is the discriminator for the `debug` field.'
- value:
- type: string
- format: binary
- description: The Protobuf message, serialized as bytes and base64-encoded. The specific message type is identified by the `type` field.
- debug:
- oneOf:
- - type: object
- title: Any
- additionalProperties: true
- description: Detailed error information.
- discriminator:
- propertyName: type
- title: Debug
- description: Deserialized error detail payload. The 'type' field indicates the schema. This field is for easier debugging and should not be relied upon for application logic.
- additionalProperties: true
- description: Contains an arbitrary serialized message along with a @type that describes the type of the serialized message, with an additional debug field for ConnectRPC error details.
entity.Entity:
type: object
- allOf:
+ oneOf:
- properties:
- ephemeralId:
- type: string
- title: ephemeral_id
- description: ephemeral id for tracking between request and response
- category:
- title: category
- $ref: '#/components/schemas/entity.Entity.Category'
- - oneOf:
- - type: object
- properties:
- claims:
- title: claims
- description: used by ERS claims mode
- $ref: '#/components/schemas/google.protobuf.Any'
+ claims:
title: claims
- required:
- - claims
- - type: object
- properties:
- clientId:
- type: string
- title: client_id
+ description: used by ERS claims mode
+ $ref: '#/components/schemas/google.protobuf.Any'
+ title: claims
+ required:
+ - claims
+ - properties:
+ clientId:
+ type: string
title: client_id
- required:
- - clientId
- - type: object
- properties:
- emailAddress:
- type: string
- title: email_address
+ title: client_id
+ required:
+ - clientId
+ - properties:
+ emailAddress:
+ type: string
title: email_address
- required:
- - emailAddress
- - type: object
- properties:
- userName:
- type: string
- title: user_name
+ title: email_address
+ required:
+ - emailAddress
+ - properties:
+ userName:
+ type: string
title: user_name
- required:
- - userName
+ title: user_name
+ required:
+ - userName
+ properties:
+ ephemeralId:
+ type: string
+ title: ephemeral_id
+ description: ephemeral id for tracking between request and response
+ category:
+ title: category
+ $ref: '#/components/schemas/entity.Entity.Category'
title: Entity
additionalProperties: false
description: PE (Person Entity) or NPE (Non-Person Entity)
- entity.Entity.Category:
- type: string
- title: Category
- enum:
- - CATEGORY_UNSPECIFIED
- - CATEGORY_SUBJECT
- - CATEGORY_ENVIRONMENT
entity.EntityChain:
type: object
properties:
@@ -670,6 +673,9 @@ components:
value:
type: string
format: binary
+ debug:
+ type: object
+ additionalProperties: true
additionalProperties: true
description: Contains an arbitrary serialized message along with a @type that describes the type of the serialized message.
google.protobuf.BoolValue:
@@ -684,8 +690,8 @@ components:
google.protobuf.Timestamp:
type: string
examples:
- - "2023-01-15T01:30:15.01Z"
- - "2024-12-25T12:00:00Z"
+ - 1s
+ - 1.000340012s
format: date-time
description: |-
A Timestamp represents a point in time independent of any time zone or local
@@ -779,65 +785,41 @@ components:
) to obtain a formatter capable of generating timestamps in this format.
policy.Action:
type: object
- allOf:
+ oneOf:
- properties:
- id:
+ custom:
type: string
- title: id
- description: Generated uuid in database
- name:
- type: string
- title: name
- namespace:
- title: namespace
- description: Namespace context for this action
- $ref: '#/components/schemas/policy.Namespace'
- metadata:
- title: metadata
- $ref: '#/components/schemas/common.Metadata'
- - oneOf:
- - type: object
- properties:
- custom:
- type: string
- title: custom
- description: Deprecated
title: custom
- required:
- - custom
- - type: object
- properties:
- standard:
- title: standard
- description: Deprecated
- $ref: '#/components/schemas/policy.Action.StandardAction'
+ description: Deprecated
+ title: custom
+ required:
+ - custom
+ - properties:
+ standard:
title: standard
- required:
- - standard
+ description: Deprecated
+ $ref: '#/components/schemas/policy.Action.StandardAction'
+ title: standard
+ required:
+ - standard
+ properties:
+ id:
+ type: string
+ title: id
+ description: Generated uuid in database
+ name:
+ type: string
+ title: name
+ namespace:
+ title: namespace
+ description: Namespace context for this action
+ $ref: '#/components/schemas/policy.Namespace'
+ metadata:
+ title: metadata
+ $ref: '#/components/schemas/common.Metadata'
title: Action
additionalProperties: false
description: An action an entity can take
- policy.Action.StandardAction:
- type: string
- title: StandardAction
- enum:
- - STANDARD_ACTION_UNSPECIFIED
- - STANDARD_ACTION_DECRYPT
- - STANDARD_ACTION_TRANSMIT
- policy.Algorithm:
- type: string
- title: Algorithm
- enum:
- - ALGORITHM_UNSPECIFIED
- - ALGORITHM_RSA_2048
- - ALGORITHM_RSA_4096
- - ALGORITHM_EC_P256
- - ALGORITHM_EC_P384
- - ALGORITHM_EC_P521
- - ALGORITHM_HPQT_XWING
- - ALGORITHM_HPQT_SECP256R1_MLKEM768
- - ALGORITHM_HPQT_SECP384R1_MLKEM1024
- description: Supported key algorithms.
policy.KasPublicKey:
type: object
properties:
@@ -856,7 +838,7 @@ components:
alg:
not:
enum:
- - KAS_PUBLIC_KEY_ALG_ENUM_UNSPECIFIED
+ - 0
title: alg
description: |-
A known algorithm type with any additional parameters encoded.
@@ -868,19 +850,6 @@ components:
description: |-
Deprecated
A KAS public key and some associated metadata for further identifcation
- policy.KasPublicKeyAlgEnum:
- type: string
- title: KasPublicKeyAlgEnum
- enum:
- - KAS_PUBLIC_KEY_ALG_ENUM_UNSPECIFIED
- - KAS_PUBLIC_KEY_ALG_ENUM_RSA_2048
- - KAS_PUBLIC_KEY_ALG_ENUM_RSA_4096
- - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP256R1
- - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP384R1
- - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP521R1
- - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_XWING
- - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP256R1_MLKEM768
- - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP384R1_MLKEM1024
policy.KasPublicKeySet:
type: object
properties:
@@ -903,9 +872,13 @@ components:
uri:
type: string
title: uri
- description: |
+ description: |+
Address of a KAS instance
- uri_format // URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.
+ URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.:
+ ```
+ this.matches('^https?://[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?)*(:[0-9]+)?(/.*)?$')
+ ```
+
publicKey:
title: public_key
description: 'Deprecated: KAS can have multiple key pairs'
@@ -973,8 +946,7 @@ components:
policy.PublicKey:
type: object
oneOf:
- - type: object
- properties:
+ - properties:
cached:
title: cached
description: public key with additional information. Current preferred version
@@ -982,14 +954,17 @@ components:
title: cached
required:
- cached
- - type: object
- properties:
+ - properties:
remote:
type: string
title: remote
- description: |
+ description: |+
kas public key url - optional since can also be retrieved via public key
- uri_format // URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.
+ URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.:
+ ```
+ this.matches('^https://[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?)*(/.*)?$')
+ ```
+
title: remote
required:
- remote
@@ -1027,17 +1002,50 @@ components:
title: pem
title: SimpleKasPublicKey
additionalProperties: false
- policy.SourceType:
- type: string
- title: SourceType
+ connect-protocol-version:
+ type: number
+ title: Connect-Protocol-Version
enum:
- - SOURCE_TYPE_UNSPECIFIED
- - SOURCE_TYPE_INTERNAL
- - SOURCE_TYPE_EXTERNAL
- description: |-
- Describes whether this kas is managed by the organization or if they imported
- the kas information from an external party. These two modes are necessary in order
- to encrypt a tdf dek with an external parties kas public key.
+ - 1
+ description: Define the version of the Connect protocol
+ const: 1
+ connect-timeout-header:
+ type: number
+ title: Connect-Timeout-Ms
+ description: Define the timeout, in ms
+ connect.error:
+ type: object
+ properties:
+ code:
+ type: string
+ examples:
+ - not_found
+ enum:
+ - canceled
+ - unknown
+ - invalid_argument
+ - deadline_exceeded
+ - not_found
+ - already_exists
+ - permission_denied
+ - resource_exhausted
+ - failed_precondition
+ - aborted
+ - out_of_range
+ - unimplemented
+ - internal
+ - unavailable
+ - data_loss
+ - unauthenticated
+ description: The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
+ message:
+ type: string
+ description: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
+ detail:
+ $ref: '#/components/schemas/google.protobuf.Any'
+ title: Connect Error
+ additionalProperties: true
+ description: 'Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation'
security: []
tags:
- name: authorization.v2.AuthorizationService
diff --git a/docs/openapi/common/common.openapi.yaml b/docs/openapi/common/common.openapi.yaml
index 093091b6a7..0d1e60b152 100644
--- a/docs/openapi/common/common.openapi.yaml
+++ b/docs/openapi/common/common.openapi.yaml
@@ -13,14 +13,15 @@ components:
- ACTIVE_STATE_ENUM_INACTIVE
- ACTIVE_STATE_ENUM_ANY
description: 'buflint ENUM_VALUE_PREFIX: to make sure that C++ scoping rules aren''t violated when users add new enum values to an enum in a given package'
+ common.MetadataUpdateEnum:
+ type: string
+ title: MetadataUpdateEnum
+ enum:
+ - METADATA_UPDATE_ENUM_UNSPECIFIED
+ - METADATA_UPDATE_ENUM_EXTEND
+ - METADATA_UPDATE_ENUM_REPLACE
common.IdFqnIdentifier:
type: object
- allOf:
- - oneOf:
- - required:
- - id
- - required:
- - fqn
properties:
id:
type: string
@@ -35,12 +36,6 @@ components:
additionalProperties: false
common.IdNameIdentifier:
type: object
- allOf:
- - oneOf:
- - required:
- - id
- - required:
- - name
properties:
id:
type: string
@@ -51,8 +46,12 @@ components:
title: name
maxLength: 253
minLength: 1
- description: |
- name_format // Name must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored name will be normalized to lower case.
+ description: |+
+ Name must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored name will be normalized to lower case.:
+ ```
+ this.matches('^[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?$')
+ ```
+
title: IdNameIdentifier
additionalProperties: false
common.Metadata:
@@ -110,18 +109,11 @@ components:
title: value
title: LabelsEntry
additionalProperties: false
- common.MetadataUpdateEnum:
- type: string
- title: MetadataUpdateEnum
- enum:
- - METADATA_UPDATE_ENUM_UNSPECIFIED
- - METADATA_UPDATE_ENUM_EXTEND
- - METADATA_UPDATE_ENUM_REPLACE
google.protobuf.Timestamp:
type: string
examples:
- - "2023-01-15T01:30:15.01Z"
- - "2024-12-25T12:00:00Z"
+ - 1s
+ - 1.000340012s
format: date-time
description: |-
A Timestamp represents a point in time independent of any time zone or local
diff --git a/docs/openapi/entity/entity.openapi.yaml b/docs/openapi/entity/entity.openapi.yaml
index 388fb1f7a3..6484c863a0 100644
--- a/docs/openapi/entity/entity.openapi.yaml
+++ b/docs/openapi/entity/entity.openapi.yaml
@@ -4,61 +4,56 @@ info:
paths: {}
components:
schemas:
+ entity.Entity.Category:
+ type: string
+ title: Category
+ enum:
+ - CATEGORY_UNSPECIFIED
+ - CATEGORY_SUBJECT
+ - CATEGORY_ENVIRONMENT
entity.Entity:
type: object
- allOf:
+ oneOf:
- properties:
- ephemeralId:
- type: string
- title: ephemeral_id
- description: ephemeral id for tracking between request and response
- category:
- title: category
- $ref: '#/components/schemas/entity.Entity.Category'
- - oneOf:
- - type: object
- properties:
- claims:
- title: claims
- description: used by ERS claims mode
- $ref: '#/components/schemas/google.protobuf.Any'
+ claims:
title: claims
- required:
- - claims
- - type: object
- properties:
- clientId:
- type: string
- title: client_id
+ description: used by ERS claims mode
+ $ref: '#/components/schemas/google.protobuf.Any'
+ title: claims
+ required:
+ - claims
+ - properties:
+ clientId:
+ type: string
title: client_id
- required:
- - clientId
- - type: object
- properties:
- emailAddress:
- type: string
- title: email_address
+ title: client_id
+ required:
+ - clientId
+ - properties:
+ emailAddress:
+ type: string
title: email_address
- required:
- - emailAddress
- - type: object
- properties:
- userName:
- type: string
- title: user_name
+ title: email_address
+ required:
+ - emailAddress
+ - properties:
+ userName:
+ type: string
title: user_name
- required:
- - userName
+ title: user_name
+ required:
+ - userName
+ properties:
+ ephemeralId:
+ type: string
+ title: ephemeral_id
+ description: ephemeral id for tracking between request and response
+ category:
+ title: category
+ $ref: '#/components/schemas/entity.Entity.Category'
title: Entity
additionalProperties: false
description: PE (Person Entity) or NPE (Non-Person Entity)
- entity.Entity.Category:
- type: string
- title: Category
- enum:
- - CATEGORY_UNSPECIFIED
- - CATEGORY_SUBJECT
- - CATEGORY_ENVIRONMENT
entity.EntityChain:
type: object
properties:
@@ -97,6 +92,9 @@ components:
value:
type: string
format: binary
+ debug:
+ type: object
+ additionalProperties: true
additionalProperties: true
description: Contains an arbitrary serialized message along with a @type that describes the type of the serialized message.
security: []
diff --git a/docs/openapi/entityresolution/entity_resolution.openapi.yaml b/docs/openapi/entityresolution/entity_resolution.openapi.yaml
index 6a57e3b749..ac5e8021f4 100644
--- a/docs/openapi/entityresolution/entity_resolution.openapi.yaml
+++ b/docs/openapi/entityresolution/entity_resolution.openapi.yaml
@@ -2,13 +2,13 @@ openapi: 3.1.0
info:
title: entityresolution
paths:
- /entityresolution.EntityResolutionService/CreateEntityChainFromJwt:
+ /entityresolution.EntityResolutionService/ResolveEntities:
post:
tags:
- entityresolution.EntityResolutionService
- summary: CreateEntityChainFromJwt
- description: 'Deprecated: use v2 CreateEntityChainsFromTokens instead'
- operationId: entityresolution.EntityResolutionService.CreateEntityChainFromJwt
+ summary: ResolveEntities
+ description: 'Deprecated: use v2 ResolveEntities instead'
+ operationId: entityresolution.EntityResolutionService.ResolveEntities
parameters:
- name: Connect-Protocol-Version
in: header
@@ -23,7 +23,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/entityresolution.CreateEntityChainFromJwtRequest'
+ $ref: '#/components/schemas/entityresolution.ResolveEntitiesRequest'
required: true
responses:
default:
@@ -37,14 +37,14 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/entityresolution.CreateEntityChainFromJwtResponse'
- /entityresolution.EntityResolutionService/ResolveEntities:
+ $ref: '#/components/schemas/entityresolution.ResolveEntitiesResponse'
+ /entityresolution.EntityResolutionService/CreateEntityChainFromJwt:
post:
tags:
- entityresolution.EntityResolutionService
- summary: ResolveEntities
- description: 'Deprecated: use v2 ResolveEntities instead'
- operationId: entityresolution.EntityResolutionService.ResolveEntities
+ summary: CreateEntityChainFromJwt
+ description: 'Deprecated: use v2 CreateEntityChainsFromTokens instead'
+ operationId: entityresolution.EntityResolutionService.CreateEntityChainFromJwt
parameters:
- name: Connect-Protocol-Version
in: header
@@ -59,7 +59,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/entityresolution.ResolveEntitiesRequest'
+ $ref: '#/components/schemas/entityresolution.CreateEntityChainFromJwtRequest'
required: true
responses:
default:
@@ -73,88 +73,90 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/entityresolution.ResolveEntitiesResponse'
+ $ref: '#/components/schemas/entityresolution.CreateEntityChainFromJwtResponse'
components:
schemas:
+ authorization.Entity.Category:
+ type: string
+ title: Category
+ enum:
+ - CATEGORY_UNSPECIFIED
+ - CATEGORY_SUBJECT
+ - CATEGORY_ENVIRONMENT
+ google.protobuf.NullValue:
+ type: string
+ title: NullValue
+ enum:
+ - NULL_VALUE
+ description: |-
+ `NullValue` is a singleton enumeration to represent the null value for the
+ `Value` type union.
+
+ The JSON representation for `NullValue` is JSON `null`.
authorization.Entity:
type: object
- allOf:
+ oneOf:
- properties:
- id:
- type: string
- title: id
- description: ephemeral id for tracking between request and response
- category:
- title: category
- $ref: '#/components/schemas/authorization.Entity.Category'
- - oneOf:
- - type: object
- properties:
- claims:
- title: claims
- $ref: '#/components/schemas/google.protobuf.Any'
+ claims:
title: claims
- required:
- - claims
- - type: object
- properties:
- clientId:
- type: string
- title: client_id
+ $ref: '#/components/schemas/google.protobuf.Any'
+ title: claims
+ required:
+ - claims
+ - properties:
+ clientId:
+ type: string
title: client_id
- required:
- - clientId
- - type: object
- properties:
- custom:
- title: custom
- $ref: '#/components/schemas/authorization.EntityCustom'
+ title: client_id
+ required:
+ - clientId
+ - properties:
+ custom:
title: custom
- required:
- - custom
- - type: object
- properties:
- emailAddress:
- type: string
- title: email_address
- description: one of the entity options must be set
+ $ref: '#/components/schemas/authorization.EntityCustom'
+ title: custom
+ required:
+ - custom
+ - properties:
+ emailAddress:
+ type: string
title: email_address
- required:
- - emailAddress
- - type: object
- properties:
- remoteClaimsUrl:
- type: string
- title: remote_claims_url
+ description: one of the entity options must be set
+ title: email_address
+ required:
+ - emailAddress
+ - properties:
+ remoteClaimsUrl:
+ type: string
title: remote_claims_url
- required:
- - remoteClaimsUrl
- - type: object
- properties:
- userName:
- type: string
- title: user_name
+ title: remote_claims_url
+ required:
+ - remoteClaimsUrl
+ - properties:
+ userName:
+ type: string
title: user_name
- required:
- - userName
- - type: object
- properties:
- uuid:
- type: string
- title: uuid
+ title: user_name
+ required:
+ - userName
+ - properties:
+ uuid:
+ type: string
title: uuid
- required:
- - uuid
+ title: uuid
+ required:
+ - uuid
+ properties:
+ id:
+ type: string
+ title: id
+ description: ephemeral id for tracking between request and response
+ category:
+ title: category
+ $ref: '#/components/schemas/authorization.Entity.Category'
title: Entity
additionalProperties: false
description: PE (Person Entity) or NPE (Non-Person Entity)
- authorization.Entity.Category:
- type: string
- title: Category
- enum:
- - CATEGORY_UNSPECIFIED
- - CATEGORY_SUBJECT
- - CATEGORY_ENVIRONMENT
authorization.EntityChain:
type: object
properties:
@@ -192,75 +194,6 @@ components:
description: the token
title: Token
additionalProperties: false
- connect-protocol-version:
- type: number
- title: Connect-Protocol-Version
- enum:
- - 1
- description: Define the version of the Connect protocol
- const: 1
- connect-timeout-header:
- type: number
- title: Connect-Timeout-Ms
- description: Define the timeout, in ms
- connect.error:
- type: object
- properties:
- code:
- type: string
- examples:
- - not_found
- enum:
- - canceled
- - unknown
- - invalid_argument
- - deadline_exceeded
- - not_found
- - already_exists
- - permission_denied
- - resource_exhausted
- - failed_precondition
- - aborted
- - out_of_range
- - unimplemented
- - internal
- - unavailable
- - data_loss
- - unauthenticated
- description: The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
- message:
- type: string
- description: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
- details:
- type: array
- items:
- $ref: '#/components/schemas/connect.error_details.Any'
- description: A list of messages that carry the error details. There is no limit on the number of messages.
- title: Connect Error
- additionalProperties: true
- description: 'Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation'
- connect.error_details.Any:
- type: object
- properties:
- type:
- type: string
- description: 'A URL that acts as a globally unique identifier for the type of the serialized message. For example: `type.googleapis.com/google.rpc.ErrorInfo`. This is used to determine the schema of the data in the `value` field and is the discriminator for the `debug` field.'
- value:
- type: string
- format: binary
- description: The Protobuf message, serialized as bytes and base64-encoded. The specific message type is identified by the `type` field.
- debug:
- oneOf:
- - type: object
- title: Any
- additionalProperties: true
- description: Detailed error information.
- discriminator:
- propertyName: type
- title: Debug
- description: Deserialized error detail payload. The 'type' field indicates the schema. This field is for easier debugging and should not be relied upon for application logic.
- additionalProperties: true
- description: Contains an arbitrary serialized message along with a @type that describes the type of the serialized message, with an additional debug field for ConnectRPC error details.
entityresolution.CreateEntityChainFromJwtRequest:
type: object
properties:
@@ -402,6 +335,9 @@ components:
value:
type: string
format: binary
+ debug:
+ type: object
+ additionalProperties: true
additionalProperties: true
description: Contains an arbitrary serialized message along with a @type that describes the type of the serialized message.
google.protobuf.ListValue:
@@ -419,16 +355,6 @@ components:
`ListValue` is a wrapper around a repeated field of values.
The JSON representation for `ListValue` is JSON array.
- google.protobuf.NullValue:
- type: string
- title: NullValue
- enum:
- - NULL_VALUE
- description: |-
- `NullValue` is a singleton enumeration to represent the null value for the
- `Value` type union.
-
- The JSON representation for `NullValue` is JSON `null`.
google.protobuf.Struct:
type: object
additionalProperties:
@@ -469,6 +395,50 @@ components:
variants. Absence of any variant indicates an error.
The JSON representation for `Value` is JSON value.
+ connect-protocol-version:
+ type: number
+ title: Connect-Protocol-Version
+ enum:
+ - 1
+ description: Define the version of the Connect protocol
+ const: 1
+ connect-timeout-header:
+ type: number
+ title: Connect-Timeout-Ms
+ description: Define the timeout, in ms
+ connect.error:
+ type: object
+ properties:
+ code:
+ type: string
+ examples:
+ - not_found
+ enum:
+ - canceled
+ - unknown
+ - invalid_argument
+ - deadline_exceeded
+ - not_found
+ - already_exists
+ - permission_denied
+ - resource_exhausted
+ - failed_precondition
+ - aborted
+ - out_of_range
+ - unimplemented
+ - internal
+ - unavailable
+ - data_loss
+ - unauthenticated
+ description: The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
+ message:
+ type: string
+ description: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
+ detail:
+ $ref: '#/components/schemas/google.protobuf.Any'
+ title: Connect Error
+ additionalProperties: true
+ description: 'Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation'
security: []
tags:
- name: entityresolution.EntityResolutionService
diff --git a/docs/openapi/entityresolution/v2/entity_resolution.openapi.yaml b/docs/openapi/entityresolution/v2/entity_resolution.openapi.yaml
index 52baa90875..b8e661c75a 100644
--- a/docs/openapi/entityresolution/v2/entity_resolution.openapi.yaml
+++ b/docs/openapi/entityresolution/v2/entity_resolution.openapi.yaml
@@ -2,12 +2,12 @@ openapi: 3.1.0
info:
title: entityresolution.v2
paths:
- /entityresolution.v2.EntityResolutionService/CreateEntityChainsFromTokens:
+ /entityresolution.v2.EntityResolutionService/ResolveEntities:
post:
tags:
- entityresolution.v2.EntityResolutionService
- summary: CreateEntityChainsFromTokens
- operationId: entityresolution.v2.EntityResolutionService.CreateEntityChainsFromTokens
+ summary: ResolveEntities
+ operationId: entityresolution.v2.EntityResolutionService.ResolveEntities
parameters:
- name: Connect-Protocol-Version
in: header
@@ -22,7 +22,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/entityresolution.v2.CreateEntityChainsFromTokensRequest'
+ $ref: '#/components/schemas/entityresolution.v2.ResolveEntitiesRequest'
required: true
responses:
default:
@@ -36,13 +36,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/entityresolution.v2.CreateEntityChainsFromTokensResponse'
- /entityresolution.v2.EntityResolutionService/ResolveEntities:
+ $ref: '#/components/schemas/entityresolution.v2.ResolveEntitiesResponse'
+ /entityresolution.v2.EntityResolutionService/CreateEntityChainsFromTokens:
post:
tags:
- entityresolution.v2.EntityResolutionService
- summary: ResolveEntities
- operationId: entityresolution.v2.EntityResolutionService.ResolveEntities
+ summary: CreateEntityChainsFromTokens
+ operationId: entityresolution.v2.EntityResolutionService.CreateEntityChainsFromTokens
parameters:
- name: Connect-Protocol-Version
in: header
@@ -57,7 +57,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/entityresolution.v2.ResolveEntitiesRequest'
+ $ref: '#/components/schemas/entityresolution.v2.CreateEntityChainsFromTokensRequest'
required: true
responses:
default:
@@ -71,40 +71,58 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/entityresolution.v2.ResolveEntitiesResponse'
+ $ref: '#/components/schemas/entityresolution.v2.CreateEntityChainsFromTokensResponse'
components:
schemas:
+ entity.Entity.Category:
+ type: string
+ title: Category
+ enum:
+ - CATEGORY_UNSPECIFIED
+ - CATEGORY_SUBJECT
+ - CATEGORY_ENVIRONMENT
+ google.protobuf.NullValue:
+ type: string
+ title: NullValue
+ enum:
+ - NULL_VALUE
+ description: |-
+ `NullValue` is a singleton enumeration to represent the null value for the
+ `Value` type union.
+
+ The JSON representation for `NullValue` is JSON `null`.
authorization.v2.Resource:
type: object
- allOf:
+ oneOf:
- properties:
- ephemeralId:
- type: string
- title: ephemeral_id
- description: ephemeral id for tracking between request and response
- - oneOf:
- - type: object
- properties:
- attributeValues:
- title: attribute_values
- description: |
- a set of attribute value FQNs, such as those on a TDF, between 1 and 20 in count
- attribute_values_required // if provided, resource.attribute_values must be between 1 and 20 in count with all valid FQNs
- $ref: '#/components/schemas/authorization.v2.Resource.AttributeValues'
+ attributeValues:
title: attribute_values
- required:
- - attributeValues
- - type: object
- properties:
- registeredResourceValueFqn:
- type: string
- title: registered_resource_value_fqn
- minLength: 1
- format: uri
- description: fully qualified name of the registered resource value stored in platform policy
+ description: |+
+ a set of attribute value FQNs, such as those on a TDF, between 1 and 20 in count
+ if provided, resource.attribute_values must be between 1 and 20 in count with all valid FQNs:
+ ```
+ this.fqns.size() > 0 && this.fqns.size() <= 20 && this.fqns.all(item, item.isUri())
+ ```
+
+ $ref: '#/components/schemas/authorization.v2.Resource.AttributeValues'
+ title: attribute_values
+ required:
+ - attributeValues
+ - properties:
+ registeredResourceValueFqn:
+ type: string
title: registered_resource_value_fqn
- required:
- - registeredResourceValueFqn
+ minLength: 1
+ format: uri
+ description: fully qualified name of the registered resource value stored in platform policy
+ title: registered_resource_value_fqn
+ required:
+ - registeredResourceValueFqn
+ properties:
+ ephemeralId:
+ type: string
+ title: ephemeral_id
+ description: ephemeral id for tracking between request and response
title: Resource
additionalProperties: false
description: Either a set of attribute values (such as those on a TDF) or a registered resource value
@@ -118,130 +136,49 @@ components:
title: fqns
title: AttributeValues
additionalProperties: false
- connect-protocol-version:
- type: number
- title: Connect-Protocol-Version
- enum:
- - 1
- description: Define the version of the Connect protocol
- const: 1
- connect-timeout-header:
- type: number
- title: Connect-Timeout-Ms
- description: Define the timeout, in ms
- connect.error:
- type: object
- properties:
- code:
- type: string
- examples:
- - not_found
- enum:
- - canceled
- - unknown
- - invalid_argument
- - deadline_exceeded
- - not_found
- - already_exists
- - permission_denied
- - resource_exhausted
- - failed_precondition
- - aborted
- - out_of_range
- - unimplemented
- - internal
- - unavailable
- - data_loss
- - unauthenticated
- description: The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
- message:
- type: string
- description: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
- details:
- type: array
- items:
- $ref: '#/components/schemas/connect.error_details.Any'
- description: A list of messages that carry the error details. There is no limit on the number of messages.
- title: Connect Error
- additionalProperties: true
- description: 'Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation'
- connect.error_details.Any:
- type: object
- properties:
- type:
- type: string
- description: 'A URL that acts as a globally unique identifier for the type of the serialized message. For example: `type.googleapis.com/google.rpc.ErrorInfo`. This is used to determine the schema of the data in the `value` field and is the discriminator for the `debug` field.'
- value:
- type: string
- format: binary
- description: The Protobuf message, serialized as bytes and base64-encoded. The specific message type is identified by the `type` field.
- debug:
- oneOf:
- - type: object
- title: Any
- additionalProperties: true
- description: Detailed error information.
- discriminator:
- propertyName: type
- title: Debug
- description: Deserialized error detail payload. The 'type' field indicates the schema. This field is for easier debugging and should not be relied upon for application logic.
- additionalProperties: true
- description: Contains an arbitrary serialized message along with a @type that describes the type of the serialized message, with an additional debug field for ConnectRPC error details.
entity.Entity:
type: object
- allOf:
+ oneOf:
- properties:
- ephemeralId:
- type: string
- title: ephemeral_id
- description: ephemeral id for tracking between request and response
- category:
- title: category
- $ref: '#/components/schemas/entity.Entity.Category'
- - oneOf:
- - type: object
- properties:
- claims:
- title: claims
- description: used by ERS claims mode
- $ref: '#/components/schemas/google.protobuf.Any'
+ claims:
title: claims
- required:
- - claims
- - type: object
- properties:
- clientId:
- type: string
- title: client_id
+ description: used by ERS claims mode
+ $ref: '#/components/schemas/google.protobuf.Any'
+ title: claims
+ required:
+ - claims
+ - properties:
+ clientId:
+ type: string
title: client_id
- required:
- - clientId
- - type: object
- properties:
- emailAddress:
- type: string
- title: email_address
+ title: client_id
+ required:
+ - clientId
+ - properties:
+ emailAddress:
+ type: string
title: email_address
- required:
- - emailAddress
- - type: object
- properties:
- userName:
- type: string
- title: user_name
+ title: email_address
+ required:
+ - emailAddress
+ - properties:
+ userName:
+ type: string
title: user_name
- required:
- - userName
+ title: user_name
+ required:
+ - userName
+ properties:
+ ephemeralId:
+ type: string
+ title: ephemeral_id
+ description: ephemeral id for tracking between request and response
+ category:
+ title: category
+ $ref: '#/components/schemas/entity.Entity.Category'
title: Entity
additionalProperties: false
description: PE (Person Entity) or NPE (Non-Person Entity)
- entity.Entity.Category:
- type: string
- title: Category
- enum:
- - CATEGORY_UNSPECIFIED
- - CATEGORY_SUBJECT
- - CATEGORY_ENVIRONMENT
entity.EntityChain:
type: object
properties:
@@ -385,6 +322,9 @@ components:
value:
type: string
format: binary
+ debug:
+ type: object
+ additionalProperties: true
additionalProperties: true
description: Contains an arbitrary serialized message along with a @type that describes the type of the serialized message.
google.protobuf.ListValue:
@@ -402,16 +342,6 @@ components:
`ListValue` is a wrapper around a repeated field of values.
The JSON representation for `ListValue` is JSON array.
- google.protobuf.NullValue:
- type: string
- title: NullValue
- enum:
- - NULL_VALUE
- description: |-
- `NullValue` is a singleton enumeration to represent the null value for the
- `Value` type union.
-
- The JSON representation for `NullValue` is JSON `null`.
google.protobuf.Struct:
type: object
additionalProperties:
@@ -452,6 +382,50 @@ components:
variants. Absence of any variant indicates an error.
The JSON representation for `Value` is JSON value.
+ connect-protocol-version:
+ type: number
+ title: Connect-Protocol-Version
+ enum:
+ - 1
+ description: Define the version of the Connect protocol
+ const: 1
+ connect-timeout-header:
+ type: number
+ title: Connect-Timeout-Ms
+ description: Define the timeout, in ms
+ connect.error:
+ type: object
+ properties:
+ code:
+ type: string
+ examples:
+ - not_found
+ enum:
+ - canceled
+ - unknown
+ - invalid_argument
+ - deadline_exceeded
+ - not_found
+ - already_exists
+ - permission_denied
+ - resource_exhausted
+ - failed_precondition
+ - aborted
+ - out_of_range
+ - unimplemented
+ - internal
+ - unavailable
+ - data_loss
+ - unauthenticated
+ description: The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
+ message:
+ type: string
+ description: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
+ detail:
+ $ref: '#/components/schemas/google.protobuf.Any'
+ title: Connect Error
+ additionalProperties: true
+ description: 'Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation'
security: []
tags:
- name: entityresolution.v2.EntityResolutionService
diff --git a/docs/openapi/kas/kas.openapi.yaml b/docs/openapi/kas/kas.openapi.yaml
index 147aea0ddf..a357028153 100644
--- a/docs/openapi/kas/kas.openapi.yaml
+++ b/docs/openapi/kas/kas.openapi.yaml
@@ -2,16 +2,12 @@ openapi: 3.1.0
info:
title: kas
paths:
- /kas.AccessService/LegacyPublicKey:
+ /kas.AccessService/PublicKey:
post:
tags:
- kas.AccessService
- summary: Endpoint intended for gRPC Gateway's REST endpoint to provide v1 compatibility with older TDF clients
- description: |-
- This endpoint is not recommended for use in new applications, prefer the v2 endpoint ('PublicKey') instead.
-
- buf:lint:ignore RPC_RESPONSE_STANDARD_NAME
- operationId: kas.AccessService.LegacyPublicKey
+ summary: PublicKey
+ operationId: kas.AccessService.PublicKey
parameters:
- name: Connect-Protocol-Version
in: header
@@ -26,7 +22,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/kas.LegacyPublicKeyRequest'
+ $ref: '#/components/schemas/kas.PublicKeyRequest'
required: true
responses:
default:
@@ -40,14 +36,19 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/google.protobuf.StringValue'
- deprecated: true
- /kas.AccessService/PublicKey:
+ $ref: '#/components/schemas/kas.PublicKeyResponse'
+ /kas.AccessService/LegacyPublicKey:
post:
tags:
- kas.AccessService
- summary: PublicKey
- operationId: kas.AccessService.PublicKey
+ summary: LegacyPublicKey
+ description: |-
+ Endpoint intended for gRPC Gateway's REST endpoint to provide v1 compatibility with older TDF clients
+
+ This endpoint is not recommended for use in new applications, prefer the v2 endpoint ('PublicKey') instead.
+
+ buf:lint:ignore RPC_RESPONSE_STANDARD_NAME
+ operationId: kas.AccessService.LegacyPublicKey
parameters:
- name: Connect-Protocol-Version
in: header
@@ -62,7 +63,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/kas.PublicKeyRequest'
+ $ref: '#/components/schemas/kas.LegacyPublicKeyRequest'
required: true
responses:
default:
@@ -76,7 +77,8 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/kas.PublicKeyResponse'
+ $ref: '#/components/schemas/google.protobuf.StringValue'
+ deprecated: true
/kas.AccessService/Rewrap:
post:
tags:
@@ -114,75 +116,16 @@ paths:
$ref: '#/components/schemas/kas.RewrapResponse'
components:
schemas:
- connect-protocol-version:
- type: number
- title: Connect-Protocol-Version
+ google.protobuf.NullValue:
+ type: string
+ title: NullValue
enum:
- - 1
- description: Define the version of the Connect protocol
- const: 1
- connect-timeout-header:
- type: number
- title: Connect-Timeout-Ms
- description: Define the timeout, in ms
- connect.error:
- type: object
- properties:
- code:
- type: string
- examples:
- - not_found
- enum:
- - canceled
- - unknown
- - invalid_argument
- - deadline_exceeded
- - not_found
- - already_exists
- - permission_denied
- - resource_exhausted
- - failed_precondition
- - aborted
- - out_of_range
- - unimplemented
- - internal
- - unavailable
- - data_loss
- - unauthenticated
- description: The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
- message:
- type: string
- description: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
- details:
- type: array
- items:
- $ref: '#/components/schemas/connect.error_details.Any'
- description: A list of messages that carry the error details. There is no limit on the number of messages.
- title: Connect Error
- additionalProperties: true
- description: 'Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation'
- connect.error_details.Any:
- type: object
- properties:
- type:
- type: string
- description: 'A URL that acts as a globally unique identifier for the type of the serialized message. For example: `type.googleapis.com/google.rpc.ErrorInfo`. This is used to determine the schema of the data in the `value` field and is the discriminator for the `debug` field.'
- value:
- type: string
- format: binary
- description: The Protobuf message, serialized as bytes and base64-encoded. The specific message type is identified by the `type` field.
- debug:
- oneOf:
- - type: object
- title: Any
- additionalProperties: true
- description: Detailed error information.
- discriminator:
- propertyName: type
- title: Debug
- description: Deserialized error detail payload. The 'type' field indicates the schema. This field is for easier debugging and should not be relied upon for application logic.
- additionalProperties: true
- description: Contains an arbitrary serialized message along with a @type that describes the type of the serialized message, with an additional debug field for ConnectRPC error details.
+ - NULL_VALUE
+ description: |-
+ `NullValue` is a singleton enumeration to represent the null value for the
+ `Value` type union.
+
+ The JSON representation for `NullValue` is JSON `null`.
google.protobuf.ListValue:
type: object
properties:
@@ -198,16 +141,6 @@ components:
`ListValue` is a wrapper around a repeated field of values.
The JSON representation for `ListValue` is JSON array.
- google.protobuf.NullValue:
- type: string
- title: NullValue
- enum:
- - NULL_VALUE
- description: |-
- `NullValue` is a singleton enumeration to represent the null value for the
- `Value` type union.
-
- The JSON representation for `NullValue` is JSON `null`.
google.protobuf.StringValue:
type: string
description: |-
@@ -357,57 +290,54 @@ components:
description: Key Access Object containing cryptographic material and metadata for TDF decryption
kas.KeyAccessRewrapResult:
type: object
- allOf:
+ oneOf:
- properties:
- metadata:
- type: object
- title: metadata
- additionalProperties:
- title: value
- $ref: '#/components/schemas/google.protobuf.Value'
- description: |-
- Metadata associated with this KAO result (e.g., required obligations)
- Optional: May contain obligation requirements or other policy metadata
- Common keys: "X-Required-Obligations" with array of obligation FQNs
- keyAccessObjectId:
+ error:
type: string
- title: key_access_object_id
+ title: error
description: |-
- Identifier matching the key_access_object_id from the request
- Required: Always matches the ID from UnsignedRewrapRequest_WithKeyAccessObject
- status:
+ Error message when rewrap failed
+ Present when status="fail"
+ Human-readable description of the failure reason
+ title: error
+ required:
+ - error
+ - properties:
+ kasWrappedKey:
type: string
- title: status
- description: |-
- Status of the rewrap operation for this KAO
- Required: Always
- Values: "permit" (success), "fail" (failure)
- - oneOf:
- - type: object
- properties:
- error:
- type: string
- title: error
- description: |-
- Error message when rewrap failed
- Present when status="fail"
- Human-readable description of the failure reason
- title: error
- required:
- - error
- - type: object
- properties:
- kasWrappedKey:
- type: string
- title: kas_wrapped_key
- format: byte
- description: |-
- Successfully rewrapped key encrypted with the session key
- Present when status="permit"
- Contains the DEK encrypted with the ephemeral session key
title: kas_wrapped_key
- required:
- - kasWrappedKey
+ format: byte
+ description: |-
+ Successfully rewrapped key encrypted with the session key
+ Present when status="permit"
+ Contains the DEK encrypted with the ephemeral session key
+ title: kas_wrapped_key
+ required:
+ - kasWrappedKey
+ properties:
+ metadata:
+ type: object
+ title: metadata
+ additionalProperties:
+ title: value
+ $ref: '#/components/schemas/google.protobuf.Value'
+ description: |-
+ Metadata associated with this KAO result (e.g., required obligations)
+ Optional: May contain obligation requirements or other policy metadata
+ Common keys: "X-Required-Obligations" with array of obligation FQNs
+ keyAccessObjectId:
+ type: string
+ title: key_access_object_id
+ description: |-
+ Identifier matching the key_access_object_id from the request
+ Required: Always matches the ID from UnsignedRewrapRequest_WithKeyAccessObject
+ status:
+ type: string
+ title: status
+ description: |-
+ Status of the rewrap operation for this KAO
+ Required: Always
+ Values: "permit" (success), "fail" (failure)
title: KeyAccessRewrapResult
additionalProperties: false
description: Result of a key access object rewrap operation
@@ -689,6 +619,63 @@ components:
title: WithPolicyRequest
additionalProperties: false
description: Request grouping policy with associated key access objects
+ connect-protocol-version:
+ type: number
+ title: Connect-Protocol-Version
+ enum:
+ - 1
+ description: Define the version of the Connect protocol
+ const: 1
+ connect-timeout-header:
+ type: number
+ title: Connect-Timeout-Ms
+ description: Define the timeout, in ms
+ connect.error:
+ type: object
+ properties:
+ code:
+ type: string
+ examples:
+ - not_found
+ enum:
+ - canceled
+ - unknown
+ - invalid_argument
+ - deadline_exceeded
+ - not_found
+ - already_exists
+ - permission_denied
+ - resource_exhausted
+ - failed_precondition
+ - aborted
+ - out_of_range
+ - unimplemented
+ - internal
+ - unavailable
+ - data_loss
+ - unauthenticated
+ description: The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
+ message:
+ type: string
+ description: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
+ detail:
+ $ref: '#/components/schemas/google.protobuf.Any'
+ title: Connect Error
+ additionalProperties: true
+ description: 'Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation'
+ google.protobuf.Any:
+ type: object
+ properties:
+ type:
+ type: string
+ value:
+ type: string
+ format: binary
+ debug:
+ type: object
+ additionalProperties: true
+ additionalProperties: true
+ description: Contains an arbitrary serialized message along with a @type that describes the type of the serialized message.
security: []
tags:
- name: kas.AccessService
diff --git a/docs/openapi/policy/actions/actions.openapi.yaml b/docs/openapi/policy/actions/actions.openapi.yaml
index b5c6f2c12b..db1d5d2a32 100644
--- a/docs/openapi/policy/actions/actions.openapi.yaml
+++ b/docs/openapi/policy/actions/actions.openapi.yaml
@@ -2,12 +2,12 @@ openapi: 3.1.0
info:
title: policy.actions
paths:
- /policy.actions.ActionService/CreateAction:
+ /policy.actions.ActionService/GetAction:
post:
tags:
- policy.actions.ActionService
- summary: CreateAction
- operationId: policy.actions.ActionService.CreateAction
+ summary: GetAction
+ operationId: policy.actions.ActionService.GetAction
parameters:
- name: Connect-Protocol-Version
in: header
@@ -22,7 +22,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.actions.CreateActionRequest'
+ $ref: '#/components/schemas/policy.actions.GetActionRequest'
required: true
responses:
default:
@@ -36,13 +36,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.actions.CreateActionResponse'
- /policy.actions.ActionService/DeleteAction:
+ $ref: '#/components/schemas/policy.actions.GetActionResponse'
+ /policy.actions.ActionService/ListActions:
post:
tags:
- policy.actions.ActionService
- summary: DeleteAction
- operationId: policy.actions.ActionService.DeleteAction
+ summary: ListActions
+ operationId: policy.actions.ActionService.ListActions
parameters:
- name: Connect-Protocol-Version
in: header
@@ -57,7 +57,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.actions.DeleteActionRequest'
+ $ref: '#/components/schemas/policy.actions.ListActionsRequest'
required: true
responses:
default:
@@ -71,13 +71,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.actions.DeleteActionResponse'
- /policy.actions.ActionService/GetAction:
+ $ref: '#/components/schemas/policy.actions.ListActionsResponse'
+ /policy.actions.ActionService/CreateAction:
post:
tags:
- policy.actions.ActionService
- summary: GetAction
- operationId: policy.actions.ActionService.GetAction
+ summary: CreateAction
+ operationId: policy.actions.ActionService.CreateAction
parameters:
- name: Connect-Protocol-Version
in: header
@@ -92,7 +92,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.actions.GetActionRequest'
+ $ref: '#/components/schemas/policy.actions.CreateActionRequest'
required: true
responses:
default:
@@ -106,13 +106,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.actions.GetActionResponse'
- /policy.actions.ActionService/ListActions:
+ $ref: '#/components/schemas/policy.actions.CreateActionResponse'
+ /policy.actions.ActionService/UpdateAction:
post:
tags:
- policy.actions.ActionService
- summary: ListActions
- operationId: policy.actions.ActionService.ListActions
+ summary: UpdateAction
+ operationId: policy.actions.ActionService.UpdateAction
parameters:
- name: Connect-Protocol-Version
in: header
@@ -127,7 +127,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.actions.ListActionsRequest'
+ $ref: '#/components/schemas/policy.actions.UpdateActionRequest'
required: true
responses:
default:
@@ -141,13 +141,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.actions.ListActionsResponse'
- /policy.actions.ActionService/UpdateAction:
+ $ref: '#/components/schemas/policy.actions.UpdateActionResponse'
+ /policy.actions.ActionService/DeleteAction:
post:
tags:
- policy.actions.ActionService
- summary: UpdateAction
- operationId: policy.actions.ActionService.UpdateAction
+ summary: DeleteAction
+ operationId: policy.actions.ActionService.DeleteAction
parameters:
- name: Connect-Protocol-Version
in: header
@@ -162,7 +162,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.actions.UpdateActionRequest'
+ $ref: '#/components/schemas/policy.actions.DeleteActionRequest'
required: true
responses:
default:
@@ -176,9 +176,84 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.actions.UpdateActionResponse'
+ $ref: '#/components/schemas/policy.actions.DeleteActionResponse'
components:
schemas:
+ common.MetadataUpdateEnum:
+ type: string
+ title: MetadataUpdateEnum
+ enum:
+ - METADATA_UPDATE_ENUM_UNSPECIFIED
+ - METADATA_UPDATE_ENUM_EXTEND
+ - METADATA_UPDATE_ENUM_REPLACE
+ policy.Action.StandardAction:
+ type: string
+ title: StandardAction
+ enum:
+ - STANDARD_ACTION_UNSPECIFIED
+ - STANDARD_ACTION_DECRYPT
+ - STANDARD_ACTION_TRANSMIT
+ policy.Algorithm:
+ type: string
+ title: Algorithm
+ enum:
+ - ALGORITHM_UNSPECIFIED
+ - ALGORITHM_RSA_2048
+ - ALGORITHM_RSA_4096
+ - ALGORITHM_EC_P256
+ - ALGORITHM_EC_P384
+ - ALGORITHM_EC_P521
+ - ALGORITHM_HPQT_XWING
+ - ALGORITHM_HPQT_SECP256R1_MLKEM768
+ - ALGORITHM_HPQT_SECP384R1_MLKEM1024
+ description: Supported key algorithms.
+ policy.AttributeRuleTypeEnum:
+ type: string
+ title: AttributeRuleTypeEnum
+ enum:
+ - ATTRIBUTE_RULE_TYPE_ENUM_UNSPECIFIED
+ - ATTRIBUTE_RULE_TYPE_ENUM_ALL_OF
+ - ATTRIBUTE_RULE_TYPE_ENUM_ANY_OF
+ - ATTRIBUTE_RULE_TYPE_ENUM_HIERARCHY
+ policy.ConditionBooleanTypeEnum:
+ type: string
+ title: ConditionBooleanTypeEnum
+ enum:
+ - CONDITION_BOOLEAN_TYPE_ENUM_UNSPECIFIED
+ - CONDITION_BOOLEAN_TYPE_ENUM_AND
+ - CONDITION_BOOLEAN_TYPE_ENUM_OR
+ policy.KasPublicKeyAlgEnum:
+ type: string
+ title: KasPublicKeyAlgEnum
+ enum:
+ - KAS_PUBLIC_KEY_ALG_ENUM_UNSPECIFIED
+ - KAS_PUBLIC_KEY_ALG_ENUM_RSA_2048
+ - KAS_PUBLIC_KEY_ALG_ENUM_RSA_4096
+ - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP256R1
+ - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP384R1
+ - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP521R1
+ - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_XWING
+ - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP256R1_MLKEM768
+ - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP384R1_MLKEM1024
+ policy.SourceType:
+ type: string
+ title: SourceType
+ enum:
+ - SOURCE_TYPE_UNSPECIFIED
+ - SOURCE_TYPE_INTERNAL
+ - SOURCE_TYPE_EXTERNAL
+ description: |-
+ Describes whether this kas is managed by the organization or if they imported
+ the kas information from an external party. These two modes are necessary in order
+ to encrypt a tdf dek with an external parties kas public key.
+ policy.SubjectMappingOperatorEnum:
+ type: string
+ title: SubjectMappingOperatorEnum
+ enum:
+ - SUBJECT_MAPPING_OPERATOR_ENUM_UNSPECIFIED
+ - SUBJECT_MAPPING_OPERATOR_ENUM_IN
+ - SUBJECT_MAPPING_OPERATOR_ENUM_NOT_IN
+ - SUBJECT_MAPPING_OPERATOR_ENUM_IN_CONTAINS
common.Metadata:
type: object
properties:
@@ -234,82 +309,6 @@ components:
title: value
title: LabelsEntry
additionalProperties: false
- common.MetadataUpdateEnum:
- type: string
- title: MetadataUpdateEnum
- enum:
- - METADATA_UPDATE_ENUM_UNSPECIFIED
- - METADATA_UPDATE_ENUM_EXTEND
- - METADATA_UPDATE_ENUM_REPLACE
- connect-protocol-version:
- type: number
- title: Connect-Protocol-Version
- enum:
- - 1
- description: Define the version of the Connect protocol
- const: 1
- connect-timeout-header:
- type: number
- title: Connect-Timeout-Ms
- description: Define the timeout, in ms
- connect.error:
- type: object
- properties:
- code:
- type: string
- examples:
- - not_found
- enum:
- - canceled
- - unknown
- - invalid_argument
- - deadline_exceeded
- - not_found
- - already_exists
- - permission_denied
- - resource_exhausted
- - failed_precondition
- - aborted
- - out_of_range
- - unimplemented
- - internal
- - unavailable
- - data_loss
- - unauthenticated
- description: The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
- message:
- type: string
- description: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
- details:
- type: array
- items:
- $ref: '#/components/schemas/connect.error_details.Any'
- description: A list of messages that carry the error details. There is no limit on the number of messages.
- title: Connect Error
- additionalProperties: true
- description: 'Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation'
- connect.error_details.Any:
- type: object
- properties:
- type:
- type: string
- description: 'A URL that acts as a globally unique identifier for the type of the serialized message. For example: `type.googleapis.com/google.rpc.ErrorInfo`. This is used to determine the schema of the data in the `value` field and is the discriminator for the `debug` field.'
- value:
- type: string
- format: binary
- description: The Protobuf message, serialized as bytes and base64-encoded. The specific message type is identified by the `type` field.
- debug:
- oneOf:
- - type: object
- title: Any
- additionalProperties: true
- description: Detailed error information.
- discriminator:
- propertyName: type
- title: Debug
- description: Deserialized error detail payload. The 'type' field indicates the schema. This field is for easier debugging and should not be relied upon for application logic.
- additionalProperties: true
- description: Contains an arbitrary serialized message along with a @type that describes the type of the serialized message, with an additional debug field for ConnectRPC error details.
google.protobuf.BoolValue:
type: boolean
description: |-
@@ -322,8 +321,8 @@ components:
google.protobuf.Timestamp:
type: string
examples:
- - "2023-01-15T01:30:15.01Z"
- - "2024-12-25T12:00:00Z"
+ - 1s
+ - 1.000340012s
format: date-time
description: |-
A Timestamp represents a point in time independent of any time zone or local
@@ -417,65 +416,41 @@ components:
) to obtain a formatter capable of generating timestamps in this format.
policy.Action:
type: object
- allOf:
+ oneOf:
- properties:
- id:
- type: string
- title: id
- description: Generated uuid in database
- name:
+ custom:
type: string
- title: name
- namespace:
- title: namespace
- description: Namespace context for this action
- $ref: '#/components/schemas/policy.Namespace'
- metadata:
- title: metadata
- $ref: '#/components/schemas/common.Metadata'
- - oneOf:
- - type: object
- properties:
- custom:
- type: string
- title: custom
- description: Deprecated
title: custom
- required:
- - custom
- - type: object
- properties:
- standard:
- title: standard
- description: Deprecated
- $ref: '#/components/schemas/policy.Action.StandardAction'
+ description: Deprecated
+ title: custom
+ required:
+ - custom
+ - properties:
+ standard:
title: standard
- required:
- - standard
+ description: Deprecated
+ $ref: '#/components/schemas/policy.Action.StandardAction'
+ title: standard
+ required:
+ - standard
+ properties:
+ id:
+ type: string
+ title: id
+ description: Generated uuid in database
+ name:
+ type: string
+ title: name
+ namespace:
+ title: namespace
+ description: Namespace context for this action
+ $ref: '#/components/schemas/policy.Namespace'
+ metadata:
+ title: metadata
+ $ref: '#/components/schemas/common.Metadata'
title: Action
additionalProperties: false
description: An action an entity can take
- policy.Action.StandardAction:
- type: string
- title: StandardAction
- enum:
- - STANDARD_ACTION_UNSPECIFIED
- - STANDARD_ACTION_DECRYPT
- - STANDARD_ACTION_TRANSMIT
- policy.Algorithm:
- type: string
- title: Algorithm
- enum:
- - ALGORITHM_UNSPECIFIED
- - ALGORITHM_RSA_2048
- - ALGORITHM_RSA_4096
- - ALGORITHM_EC_P256
- - ALGORITHM_EC_P384
- - ALGORITHM_EC_P521
- - ALGORITHM_HPQT_XWING
- - ALGORITHM_HPQT_SECP256R1_MLKEM768
- - ALGORITHM_HPQT_SECP384R1_MLKEM1024
- description: Supported key algorithms.
policy.Attribute:
type: object
properties:
@@ -532,14 +507,6 @@ components:
required:
- rule
additionalProperties: false
- policy.AttributeRuleTypeEnum:
- type: string
- title: AttributeRuleTypeEnum
- enum:
- - ATTRIBUTE_RULE_TYPE_ENUM_UNSPECIFIED
- - ATTRIBUTE_RULE_TYPE_ENUM_ALL_OF
- - ATTRIBUTE_RULE_TYPE_ENUM_ANY_OF
- - ATTRIBUTE_RULE_TYPE_ENUM_HIERARCHY
policy.Condition:
type: object
properties:
@@ -557,6 +524,7 @@ components:
type: array
items:
type: string
+ minItems: 1
title: subject_external_values
minItems: 1
description: |-
@@ -572,13 +540,6 @@ components:
*
A Condition defines a rule of
- policy.ConditionBooleanTypeEnum:
- type: string
- title: ConditionBooleanTypeEnum
- enum:
- - CONDITION_BOOLEAN_TYPE_ENUM_UNSPECIFIED
- - CONDITION_BOOLEAN_TYPE_ENUM_AND
- - CONDITION_BOOLEAN_TYPE_ENUM_OR
policy.ConditionGroup:
type: object
properties:
@@ -615,7 +576,7 @@ components:
alg:
not:
enum:
- - KAS_PUBLIC_KEY_ALG_ENUM_UNSPECIFIED
+ - 0
title: alg
description: |-
A known algorithm type with any additional parameters encoded.
@@ -627,19 +588,6 @@ components:
description: |-
Deprecated
A KAS public key and some associated metadata for further identifcation
- policy.KasPublicKeyAlgEnum:
- type: string
- title: KasPublicKeyAlgEnum
- enum:
- - KAS_PUBLIC_KEY_ALG_ENUM_UNSPECIFIED
- - KAS_PUBLIC_KEY_ALG_ENUM_RSA_2048
- - KAS_PUBLIC_KEY_ALG_ENUM_RSA_4096
- - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP256R1
- - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP384R1
- - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP521R1
- - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_XWING
- - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP256R1_MLKEM768
- - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP384R1_MLKEM1024
policy.KasPublicKeySet:
type: object
properties:
@@ -662,9 +610,13 @@ components:
uri:
type: string
title: uri
- description: |
+ description: |+
Address of a KAS instance
- uri_format // URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.
+ URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.:
+ ```
+ this.matches('^https?://[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?)*(:[0-9]+)?(/.*)?$')
+ ```
+
publicKey:
title: public_key
description: 'Deprecated: KAS can have multiple key pairs'
@@ -862,8 +814,7 @@ components:
policy.PublicKey:
type: object
oneOf:
- - type: object
- properties:
+ - properties:
cached:
title: cached
description: public key with additional information. Current preferred version
@@ -871,14 +822,17 @@ components:
title: cached
required:
- cached
- - type: object
- properties:
+ - properties:
remote:
type: string
title: remote
- description: |
+ description: |+
kas public key url - optional since can also be retrieved via public key
- uri_format // URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.
+ URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.:
+ ```
+ this.matches('^https://[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?)*(/.*)?$')
+ ```
+
title: remote
required:
- remote
@@ -986,17 +940,6 @@ components:
title: pem
title: SimpleKasPublicKey
additionalProperties: false
- policy.SourceType:
- type: string
- title: SourceType
- enum:
- - SOURCE_TYPE_UNSPECIFIED
- - SOURCE_TYPE_INTERNAL
- - SOURCE_TYPE_EXTERNAL
- description: |-
- Describes whether this kas is managed by the organization or if they imported
- the kas information from an external party. These two modes are necessary in order
- to encrypt a tdf dek with an external parties kas public key.
policy.SubjectConditionSet:
type: object
properties:
@@ -1062,14 +1005,6 @@ components:
description: |-
Subject Mapping: A Policy assigning Subject Set(s) to a permitted attribute
value + action(s) combination
- policy.SubjectMappingOperatorEnum:
- type: string
- title: SubjectMappingOperatorEnum
- enum:
- - SUBJECT_MAPPING_OPERATOR_ENUM_UNSPECIFIED
- - SUBJECT_MAPPING_OPERATOR_ENUM_IN
- - SUBJECT_MAPPING_OPERATOR_ENUM_NOT_IN
- - SUBJECT_MAPPING_OPERATOR_ENUM_IN_CONTAINS
policy.SubjectSet:
type: object
properties:
@@ -1143,9 +1078,13 @@ components:
type: string
title: name
maxLength: 253
- description: |
+ description: |+
Required
- action_name_format // Action name must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored action name will be normalized to lower case.
+ Action name must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored action name will be normalized to lower case.:
+ ```
+ this.matches('^[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?$')
+ ```
+
namespaceId:
type: string
title: namespace_id
@@ -1201,44 +1140,45 @@ components:
additionalProperties: false
policy.actions.GetActionRequest:
type: object
- allOf:
+ oneOf:
- properties:
- namespaceId:
+ id:
type: string
- title: namespace_id
+ title: id
format: uuid
- description: |-
- Optional namespace ID to scope name-based lookup.
- If omitted for name-based lookup, action search is limited to legacy (namespace_id = NULL) actions.
- namespaceFqn:
+ title: id
+ required:
+ - id
+ - properties:
+ name:
type: string
- title: namespace_fqn
- minLength: 1
- format: uri
- description: |-
- Optional namespace FQN to scope name-based lookup.
- If omitted for name-based lookup, action search is limited to legacy (namespace_id = NULL) actions.
- - oneOf:
- - type: object
- properties:
- id:
- type: string
- title: id
- format: uuid
- title: id
- required:
- - id
- - type: object
- properties:
- name:
- type: string
- title: name
- maxLength: 253
- description: |
- action_name_format // Action name must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored action name will be normalized to lower case.
title: name
- required:
- - name
+ maxLength: 253
+ description: |+
+ Action name must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored action name will be normalized to lower case.:
+ ```
+ this.matches('^[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?$')
+ ```
+
+ title: name
+ required:
+ - name
+ properties:
+ namespaceId:
+ type: string
+ title: namespace_id
+ format: uuid
+ description: |-
+ Optional namespace ID to scope name-based lookup.
+ If omitted for name-based lookup, action search is limited to legacy (namespace_id = NULL) actions.
+ namespaceFqn:
+ type: string
+ title: namespace_fqn
+ minLength: 1
+ format: uri
+ description: |-
+ Optional namespace FQN to scope name-based lookup.
+ If omitted for name-based lookup, action search is limited to legacy (namespace_id = NULL) actions.
title: GetActionRequest
additionalProperties: false
policy.actions.GetActionResponse:
@@ -1305,10 +1245,14 @@ components:
type: string
title: name
maxLength: 253
- description: |
+ description: |+
Optional
Custom actions only: replaces the existing action name
- action_name_format // Action name must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored action name will be normalized to lower case.
+ Action name must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored action name will be normalized to lower case.:
+ ```
+ size(this) == 0 || this.matches('^[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?$')
+ ```
+
metadata:
title: metadata
description: Common metadata
@@ -1329,6 +1273,63 @@ components:
$ref: '#/components/schemas/policy.Action'
title: UpdateActionResponse
additionalProperties: false
+ connect-protocol-version:
+ type: number
+ title: Connect-Protocol-Version
+ enum:
+ - 1
+ description: Define the version of the Connect protocol
+ const: 1
+ connect-timeout-header:
+ type: number
+ title: Connect-Timeout-Ms
+ description: Define the timeout, in ms
+ connect.error:
+ type: object
+ properties:
+ code:
+ type: string
+ examples:
+ - not_found
+ enum:
+ - canceled
+ - unknown
+ - invalid_argument
+ - deadline_exceeded
+ - not_found
+ - already_exists
+ - permission_denied
+ - resource_exhausted
+ - failed_precondition
+ - aborted
+ - out_of_range
+ - unimplemented
+ - internal
+ - unavailable
+ - data_loss
+ - unauthenticated
+ description: The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
+ message:
+ type: string
+ description: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
+ detail:
+ $ref: '#/components/schemas/google.protobuf.Any'
+ title: Connect Error
+ additionalProperties: true
+ description: 'Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation'
+ google.protobuf.Any:
+ type: object
+ properties:
+ type:
+ type: string
+ value:
+ type: string
+ format: binary
+ debug:
+ type: object
+ additionalProperties: true
+ additionalProperties: true
+ description: Contains an arbitrary serialized message along with a @type that describes the type of the serialized message.
security: []
tags:
- name: policy.actions.ActionService
diff --git a/docs/openapi/policy/attributes/attributes.openapi.yaml b/docs/openapi/policy/attributes/attributes.openapi.yaml
index bb6c0978fe..9505224012 100644
--- a/docs/openapi/policy/attributes/attributes.openapi.yaml
+++ b/docs/openapi/policy/attributes/attributes.openapi.yaml
@@ -2,13 +2,16 @@ openapi: 3.1.0
info:
title: policy.attributes
paths:
- /policy.attributes.AttributesService/AssignKeyAccessServerToAttribute:
+ /policy.attributes.AttributesService/ListAttributes:
post:
tags:
- policy.attributes.AttributesService
- summary: AssignKeyAccessServerToAttribute
- description: 'Deprecated: utilize AssignPublicKeyToAttribute'
- operationId: policy.attributes.AttributesService.AssignKeyAccessServerToAttribute
+ summary: ListAttributes
+ description: |-
+ --------------------------------------*
+ Attribute RPCs
+ ---------------------------------------
+ operationId: policy.attributes.AttributesService.ListAttributes
parameters:
- name: Connect-Protocol-Version
in: header
@@ -23,7 +26,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.attributes.AssignKeyAccessServerToAttributeRequest'
+ $ref: '#/components/schemas/policy.attributes.ListAttributesRequest'
required: true
responses:
default:
@@ -37,15 +40,16 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.attributes.AssignKeyAccessServerToAttributeResponse'
- deprecated: true
- /policy.attributes.AttributesService/AssignKeyAccessServerToValue:
+ $ref: '#/components/schemas/policy.attributes.ListAttributesResponse'
+ /policy.attributes.AttributesService/ListAttributeValues:
post:
tags:
- policy.attributes.AttributesService
- summary: AssignKeyAccessServerToValue
- description: 'Deprecated: utilize AssignPublicKeyToValue'
- operationId: policy.attributes.AttributesService.AssignKeyAccessServerToValue
+ summary: ListAttributeValues
+ description: |-
+ Deprecated
+ Use GetAttribute
+ operationId: policy.attributes.AttributesService.ListAttributeValues
parameters:
- name: Connect-Protocol-Version
in: header
@@ -60,7 +64,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.attributes.AssignKeyAccessServerToValueRequest'
+ $ref: '#/components/schemas/policy.attributes.ListAttributeValuesRequest'
required: true
responses:
default:
@@ -74,14 +78,14 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.attributes.AssignKeyAccessServerToValueResponse'
+ $ref: '#/components/schemas/policy.attributes.ListAttributeValuesResponse'
deprecated: true
- /policy.attributes.AttributesService/AssignPublicKeyToAttribute:
+ /policy.attributes.AttributesService/GetAttribute:
post:
tags:
- policy.attributes.AttributesService
- summary: AssignPublicKeyToAttribute
- operationId: policy.attributes.AttributesService.AssignPublicKeyToAttribute
+ summary: GetAttribute
+ operationId: policy.attributes.AttributesService.GetAttribute
parameters:
- name: Connect-Protocol-Version
in: header
@@ -96,7 +100,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.attributes.AssignPublicKeyToAttributeRequest'
+ $ref: '#/components/schemas/policy.attributes.GetAttributeRequest'
required: true
responses:
default:
@@ -110,13 +114,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.attributes.AssignPublicKeyToAttributeResponse'
- /policy.attributes.AttributesService/AssignPublicKeyToValue:
+ $ref: '#/components/schemas/policy.attributes.GetAttributeResponse'
+ /policy.attributes.AttributesService/GetAttributeValuesByFqns:
post:
tags:
- policy.attributes.AttributesService
- summary: AssignPublicKeyToValue
- operationId: policy.attributes.AttributesService.AssignPublicKeyToValue
+ summary: GetAttributeValuesByFqns
+ operationId: policy.attributes.AttributesService.GetAttributeValuesByFqns
parameters:
- name: Connect-Protocol-Version
in: header
@@ -131,7 +135,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.attributes.AssignPublicKeyToValueRequest'
+ $ref: '#/components/schemas/policy.attributes.GetAttributeValuesByFqnsRequest'
required: true
responses:
default:
@@ -145,7 +149,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.attributes.AssignPublicKeyToValueResponse'
+ $ref: '#/components/schemas/policy.attributes.GetAttributeValuesByFqnsResponse'
/policy.attributes.AttributesService/CreateAttribute:
post:
tags:
@@ -181,12 +185,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/policy.attributes.CreateAttributeResponse'
- /policy.attributes.AttributesService/CreateAttributeValue:
+ /policy.attributes.AttributesService/UpdateAttribute:
post:
tags:
- policy.attributes.AttributesService
- summary: CreateAttributeValue
- operationId: policy.attributes.AttributesService.CreateAttributeValue
+ summary: UpdateAttribute
+ operationId: policy.attributes.AttributesService.UpdateAttribute
parameters:
- name: Connect-Protocol-Version
in: header
@@ -201,7 +205,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.attributes.CreateAttributeValueRequest'
+ $ref: '#/components/schemas/policy.attributes.UpdateAttributeRequest'
required: true
responses:
default:
@@ -215,7 +219,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.attributes.CreateAttributeValueResponse'
+ $ref: '#/components/schemas/policy.attributes.UpdateAttributeResponse'
/policy.attributes.AttributesService/DeactivateAttribute:
post:
tags:
@@ -251,12 +255,16 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/policy.attributes.DeactivateAttributeResponse'
- /policy.attributes.AttributesService/DeactivateAttributeValue:
+ /policy.attributes.AttributesService/GetAttributeValue:
post:
tags:
- policy.attributes.AttributesService
- summary: DeactivateAttributeValue
- operationId: policy.attributes.AttributesService.DeactivateAttributeValue
+ summary: GetAttributeValue
+ description: |-
+ --------------------------------------*
+ Value RPCs
+ ---------------------------------------
+ operationId: policy.attributes.AttributesService.GetAttributeValue
parameters:
- name: Connect-Protocol-Version
in: header
@@ -271,7 +279,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.attributes.DeactivateAttributeValueRequest'
+ $ref: '#/components/schemas/policy.attributes.GetAttributeValueRequest'
required: true
responses:
default:
@@ -285,13 +293,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.attributes.DeactivateAttributeValueResponse'
- /policy.attributes.AttributesService/GetAttribute:
+ $ref: '#/components/schemas/policy.attributes.GetAttributeValueResponse'
+ /policy.attributes.AttributesService/CreateAttributeValue:
post:
tags:
- policy.attributes.AttributesService
- summary: GetAttribute
- operationId: policy.attributes.AttributesService.GetAttribute
+ summary: CreateAttributeValue
+ operationId: policy.attributes.AttributesService.CreateAttributeValue
parameters:
- name: Connect-Protocol-Version
in: header
@@ -306,7 +314,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.attributes.GetAttributeRequest'
+ $ref: '#/components/schemas/policy.attributes.CreateAttributeValueRequest'
required: true
responses:
default:
@@ -320,17 +328,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.attributes.GetAttributeResponse'
- /policy.attributes.AttributesService/GetAttributeValue:
+ $ref: '#/components/schemas/policy.attributes.CreateAttributeValueResponse'
+ /policy.attributes.AttributesService/UpdateAttributeValue:
post:
tags:
- policy.attributes.AttributesService
- summary: GetAttributeValue
- description: |-
- --------------------------------------*
- Value RPCs
- ---------------------------------------
- operationId: policy.attributes.AttributesService.GetAttributeValue
+ summary: UpdateAttributeValue
+ operationId: policy.attributes.AttributesService.UpdateAttributeValue
parameters:
- name: Connect-Protocol-Version
in: header
@@ -345,7 +349,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.attributes.GetAttributeValueRequest'
+ $ref: '#/components/schemas/policy.attributes.UpdateAttributeValueRequest'
required: true
responses:
default:
@@ -359,13 +363,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.attributes.GetAttributeValueResponse'
- /policy.attributes.AttributesService/GetAttributeValuesByFqns:
+ $ref: '#/components/schemas/policy.attributes.UpdateAttributeValueResponse'
+ /policy.attributes.AttributesService/DeactivateAttributeValue:
post:
tags:
- policy.attributes.AttributesService
- summary: GetAttributeValuesByFqns
- operationId: policy.attributes.AttributesService.GetAttributeValuesByFqns
+ summary: DeactivateAttributeValue
+ operationId: policy.attributes.AttributesService.DeactivateAttributeValue
parameters:
- name: Connect-Protocol-Version
in: header
@@ -380,7 +384,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.attributes.GetAttributeValuesByFqnsRequest'
+ $ref: '#/components/schemas/policy.attributes.DeactivateAttributeValueRequest'
required: true
responses:
default:
@@ -394,16 +398,14 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.attributes.GetAttributeValuesByFqnsResponse'
- /policy.attributes.AttributesService/ListAttributeValues:
+ $ref: '#/components/schemas/policy.attributes.DeactivateAttributeValueResponse'
+ /policy.attributes.AttributesService/AssignKeyAccessServerToAttribute:
post:
tags:
- policy.attributes.AttributesService
- summary: ListAttributeValues
- description: |-
- Deprecated
- Use GetAttribute
- operationId: policy.attributes.AttributesService.ListAttributeValues
+ summary: AssignKeyAccessServerToAttribute
+ description: 'Deprecated: utilize AssignPublicKeyToAttribute'
+ operationId: policy.attributes.AttributesService.AssignKeyAccessServerToAttribute
parameters:
- name: Connect-Protocol-Version
in: header
@@ -418,7 +420,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.attributes.ListAttributeValuesRequest'
+ $ref: '#/components/schemas/policy.attributes.AssignKeyAccessServerToAttributeRequest'
required: true
responses:
default:
@@ -432,18 +434,15 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.attributes.ListAttributeValuesResponse'
+ $ref: '#/components/schemas/policy.attributes.AssignKeyAccessServerToAttributeResponse'
deprecated: true
- /policy.attributes.AttributesService/ListAttributes:
+ /policy.attributes.AttributesService/RemoveKeyAccessServerFromAttribute:
post:
tags:
- policy.attributes.AttributesService
- summary: ListAttributes
- description: |-
- --------------------------------------*
- Attribute RPCs
- ---------------------------------------
- operationId: policy.attributes.AttributesService.ListAttributes
+ summary: RemoveKeyAccessServerFromAttribute
+ description: 'Deprecated: utilize RemovePublicKeyFromAttribute'
+ operationId: policy.attributes.AttributesService.RemoveKeyAccessServerFromAttribute
parameters:
- name: Connect-Protocol-Version
in: header
@@ -458,7 +457,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.attributes.ListAttributesRequest'
+ $ref: '#/components/schemas/policy.attributes.RemoveKeyAccessServerFromAttributeRequest'
required: true
responses:
default:
@@ -472,14 +471,15 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.attributes.ListAttributesResponse'
- /policy.attributes.AttributesService/RemoveKeyAccessServerFromAttribute:
+ $ref: '#/components/schemas/policy.attributes.RemoveKeyAccessServerFromAttributeResponse'
+ deprecated: true
+ /policy.attributes.AttributesService/AssignKeyAccessServerToValue:
post:
tags:
- policy.attributes.AttributesService
- summary: RemoveKeyAccessServerFromAttribute
- description: 'Deprecated: utilize RemovePublicKeyFromAttribute'
- operationId: policy.attributes.AttributesService.RemoveKeyAccessServerFromAttribute
+ summary: AssignKeyAccessServerToValue
+ description: 'Deprecated: utilize AssignPublicKeyToValue'
+ operationId: policy.attributes.AttributesService.AssignKeyAccessServerToValue
parameters:
- name: Connect-Protocol-Version
in: header
@@ -494,7 +494,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.attributes.RemoveKeyAccessServerFromAttributeRequest'
+ $ref: '#/components/schemas/policy.attributes.AssignKeyAccessServerToValueRequest'
required: true
responses:
default:
@@ -508,7 +508,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.attributes.RemoveKeyAccessServerFromAttributeResponse'
+ $ref: '#/components/schemas/policy.attributes.AssignKeyAccessServerToValueResponse'
deprecated: true
/policy.attributes.AttributesService/RemoveKeyAccessServerFromValue:
post:
@@ -547,12 +547,12 @@ paths:
schema:
$ref: '#/components/schemas/policy.attributes.RemoveKeyAccessServerFromValueResponse'
deprecated: true
- /policy.attributes.AttributesService/RemovePublicKeyFromAttribute:
+ /policy.attributes.AttributesService/AssignPublicKeyToAttribute:
post:
tags:
- policy.attributes.AttributesService
- summary: RemovePublicKeyFromAttribute
- operationId: policy.attributes.AttributesService.RemovePublicKeyFromAttribute
+ summary: AssignPublicKeyToAttribute
+ operationId: policy.attributes.AttributesService.AssignPublicKeyToAttribute
parameters:
- name: Connect-Protocol-Version
in: header
@@ -567,7 +567,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.attributes.RemovePublicKeyFromAttributeRequest'
+ $ref: '#/components/schemas/policy.attributes.AssignPublicKeyToAttributeRequest'
required: true
responses:
default:
@@ -581,13 +581,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.attributes.RemovePublicKeyFromAttributeResponse'
- /policy.attributes.AttributesService/RemovePublicKeyFromValue:
+ $ref: '#/components/schemas/policy.attributes.AssignPublicKeyToAttributeResponse'
+ /policy.attributes.AttributesService/RemovePublicKeyFromAttribute:
post:
tags:
- policy.attributes.AttributesService
- summary: RemovePublicKeyFromValue
- operationId: policy.attributes.AttributesService.RemovePublicKeyFromValue
+ summary: RemovePublicKeyFromAttribute
+ operationId: policy.attributes.AttributesService.RemovePublicKeyFromAttribute
parameters:
- name: Connect-Protocol-Version
in: header
@@ -602,7 +602,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.attributes.RemovePublicKeyFromValueRequest'
+ $ref: '#/components/schemas/policy.attributes.RemovePublicKeyFromAttributeRequest'
required: true
responses:
default:
@@ -616,13 +616,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.attributes.RemovePublicKeyFromValueResponse'
- /policy.attributes.AttributesService/UpdateAttribute:
+ $ref: '#/components/schemas/policy.attributes.RemovePublicKeyFromAttributeResponse'
+ /policy.attributes.AttributesService/AssignPublicKeyToValue:
post:
tags:
- policy.attributes.AttributesService
- summary: UpdateAttribute
- operationId: policy.attributes.AttributesService.UpdateAttribute
+ summary: AssignPublicKeyToValue
+ operationId: policy.attributes.AttributesService.AssignPublicKeyToValue
parameters:
- name: Connect-Protocol-Version
in: header
@@ -637,7 +637,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.attributes.UpdateAttributeRequest'
+ $ref: '#/components/schemas/policy.attributes.AssignPublicKeyToValueRequest'
required: true
responses:
default:
@@ -651,13 +651,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.attributes.UpdateAttributeResponse'
- /policy.attributes.AttributesService/UpdateAttributeValue:
+ $ref: '#/components/schemas/policy.attributes.AssignPublicKeyToValueResponse'
+ /policy.attributes.AttributesService/RemovePublicKeyFromValue:
post:
tags:
- policy.attributes.AttributesService
- summary: UpdateAttributeValue
- operationId: policy.attributes.AttributesService.UpdateAttributeValue
+ summary: RemovePublicKeyFromValue
+ operationId: policy.attributes.AttributesService.RemovePublicKeyFromValue
parameters:
- name: Connect-Protocol-Version
in: header
@@ -672,7 +672,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.attributes.UpdateAttributeValueRequest'
+ $ref: '#/components/schemas/policy.attributes.RemovePublicKeyFromValueRequest'
required: true
responses:
default:
@@ -686,7 +686,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.attributes.UpdateAttributeValueResponse'
+ $ref: '#/components/schemas/policy.attributes.RemovePublicKeyFromValueResponse'
components:
schemas:
common.ActiveStateEnum:
@@ -698,14 +698,103 @@ components:
- ACTIVE_STATE_ENUM_INACTIVE
- ACTIVE_STATE_ENUM_ANY
description: 'buflint ENUM_VALUE_PREFIX: to make sure that C++ scoping rules aren''t violated when users add new enum values to an enum in a given package'
+ common.MetadataUpdateEnum:
+ type: string
+ title: MetadataUpdateEnum
+ enum:
+ - METADATA_UPDATE_ENUM_UNSPECIFIED
+ - METADATA_UPDATE_ENUM_EXTEND
+ - METADATA_UPDATE_ENUM_REPLACE
+ policy.Action.StandardAction:
+ type: string
+ title: StandardAction
+ enum:
+ - STANDARD_ACTION_UNSPECIFIED
+ - STANDARD_ACTION_DECRYPT
+ - STANDARD_ACTION_TRANSMIT
+ policy.Algorithm:
+ type: string
+ title: Algorithm
+ enum:
+ - ALGORITHM_UNSPECIFIED
+ - ALGORITHM_RSA_2048
+ - ALGORITHM_RSA_4096
+ - ALGORITHM_EC_P256
+ - ALGORITHM_EC_P384
+ - ALGORITHM_EC_P521
+ - ALGORITHM_HPQT_XWING
+ - ALGORITHM_HPQT_SECP256R1_MLKEM768
+ - ALGORITHM_HPQT_SECP384R1_MLKEM1024
+ description: Supported key algorithms.
+ policy.AttributeRuleTypeEnum:
+ type: string
+ title: AttributeRuleTypeEnum
+ enum:
+ - ATTRIBUTE_RULE_TYPE_ENUM_UNSPECIFIED
+ - ATTRIBUTE_RULE_TYPE_ENUM_ALL_OF
+ - ATTRIBUTE_RULE_TYPE_ENUM_ANY_OF
+ - ATTRIBUTE_RULE_TYPE_ENUM_HIERARCHY
+ policy.ConditionBooleanTypeEnum:
+ type: string
+ title: ConditionBooleanTypeEnum
+ enum:
+ - CONDITION_BOOLEAN_TYPE_ENUM_UNSPECIFIED
+ - CONDITION_BOOLEAN_TYPE_ENUM_AND
+ - CONDITION_BOOLEAN_TYPE_ENUM_OR
+ policy.KasPublicKeyAlgEnum:
+ type: string
+ title: KasPublicKeyAlgEnum
+ enum:
+ - KAS_PUBLIC_KEY_ALG_ENUM_UNSPECIFIED
+ - KAS_PUBLIC_KEY_ALG_ENUM_RSA_2048
+ - KAS_PUBLIC_KEY_ALG_ENUM_RSA_4096
+ - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP256R1
+ - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP384R1
+ - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP521R1
+ - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_XWING
+ - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP256R1_MLKEM768
+ - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP384R1_MLKEM1024
+ policy.SortDirection:
+ type: string
+ title: SortDirection
+ enum:
+ - SORT_DIRECTION_UNSPECIFIED
+ - SORT_DIRECTION_ASC
+ - SORT_DIRECTION_DESC
+ description: |-
+ Sorting direction shared across list APIs.
+ When the 'sort' field is omitted or the chosen sort 'field' is UNSPECIFIED,
+ the endpoint's request message defines the default ordering; see the
+ specific List* request docs.
+ policy.SourceType:
+ type: string
+ title: SourceType
+ enum:
+ - SOURCE_TYPE_UNSPECIFIED
+ - SOURCE_TYPE_INTERNAL
+ - SOURCE_TYPE_EXTERNAL
+ description: |-
+ Describes whether this kas is managed by the organization or if they imported
+ the kas information from an external party. These two modes are necessary in order
+ to encrypt a tdf dek with an external parties kas public key.
+ policy.SubjectMappingOperatorEnum:
+ type: string
+ title: SubjectMappingOperatorEnum
+ enum:
+ - SUBJECT_MAPPING_OPERATOR_ENUM_UNSPECIFIED
+ - SUBJECT_MAPPING_OPERATOR_ENUM_IN
+ - SUBJECT_MAPPING_OPERATOR_ENUM_NOT_IN
+ - SUBJECT_MAPPING_OPERATOR_ENUM_IN_CONTAINS
+ policy.attributes.SortAttributesType:
+ type: string
+ title: SortAttributesType
+ enum:
+ - SORT_ATTRIBUTES_TYPE_UNSPECIFIED
+ - SORT_ATTRIBUTES_TYPE_NAME
+ - SORT_ATTRIBUTES_TYPE_CREATED_AT
+ - SORT_ATTRIBUTES_TYPE_UPDATED_AT
common.IdFqnIdentifier:
type: object
- allOf:
- - oneOf:
- - required:
- - id
- - required:
- - fqn
properties:
id:
type: string
@@ -720,12 +809,6 @@ components:
additionalProperties: false
common.IdNameIdentifier:
type: object
- allOf:
- - oneOf:
- - required:
- - id
- - required:
- - name
properties:
id:
type: string
@@ -736,8 +819,12 @@ components:
title: name
maxLength: 253
minLength: 1
- description: |
- name_format // Name must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored name will be normalized to lower case.
+ description: |+
+ Name must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored name will be normalized to lower case.:
+ ```
+ this.matches('^[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?$')
+ ```
+
title: IdNameIdentifier
additionalProperties: false
common.Metadata:
@@ -764,113 +851,37 @@ components:
common.Metadata.LabelsEntry:
type: object
properties:
- key:
- type: string
- title: key
- value:
- type: string
- title: value
- title: LabelsEntry
- additionalProperties: false
- common.MetadataMutable:
- type: object
- properties:
- labels:
- type: object
- title: labels
- additionalProperties:
- type: string
- title: value
- description: optional labels
- title: MetadataMutable
- additionalProperties: false
- common.MetadataMutable.LabelsEntry:
- type: object
- properties:
- key:
- type: string
- title: key
- value:
- type: string
- title: value
- title: LabelsEntry
- additionalProperties: false
- common.MetadataUpdateEnum:
- type: string
- title: MetadataUpdateEnum
- enum:
- - METADATA_UPDATE_ENUM_UNSPECIFIED
- - METADATA_UPDATE_ENUM_EXTEND
- - METADATA_UPDATE_ENUM_REPLACE
- connect-protocol-version:
- type: number
- title: Connect-Protocol-Version
- enum:
- - 1
- description: Define the version of the Connect protocol
- const: 1
- connect-timeout-header:
- type: number
- title: Connect-Timeout-Ms
- description: Define the timeout, in ms
- connect.error:
- type: object
- properties:
- code:
+ key:
type: string
- examples:
- - not_found
- enum:
- - canceled
- - unknown
- - invalid_argument
- - deadline_exceeded
- - not_found
- - already_exists
- - permission_denied
- - resource_exhausted
- - failed_precondition
- - aborted
- - out_of_range
- - unimplemented
- - internal
- - unavailable
- - data_loss
- - unauthenticated
- description: The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
- message:
+ title: key
+ value:
type: string
- description: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
- details:
- type: array
- items:
- $ref: '#/components/schemas/connect.error_details.Any'
- description: A list of messages that carry the error details. There is no limit on the number of messages.
- title: Connect Error
- additionalProperties: true
- description: 'Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation'
- connect.error_details.Any:
+ title: value
+ title: LabelsEntry
+ additionalProperties: false
+ common.MetadataMutable:
type: object
properties:
- type:
+ labels:
+ type: object
+ title: labels
+ additionalProperties:
+ type: string
+ title: value
+ description: optional labels
+ title: MetadataMutable
+ additionalProperties: false
+ common.MetadataMutable.LabelsEntry:
+ type: object
+ properties:
+ key:
type: string
- description: 'A URL that acts as a globally unique identifier for the type of the serialized message. For example: `type.googleapis.com/google.rpc.ErrorInfo`. This is used to determine the schema of the data in the `value` field and is the discriminator for the `debug` field.'
+ title: key
value:
type: string
- format: binary
- description: The Protobuf message, serialized as bytes and base64-encoded. The specific message type is identified by the `type` field.
- debug:
- oneOf:
- - type: object
- title: Any
- additionalProperties: true
- description: Detailed error information.
- discriminator:
- propertyName: type
- title: Debug
- description: Deserialized error detail payload. The 'type' field indicates the schema. This field is for easier debugging and should not be relied upon for application logic.
- additionalProperties: true
- description: Contains an arbitrary serialized message along with a @type that describes the type of the serialized message, with an additional debug field for ConnectRPC error details.
+ title: value
+ title: LabelsEntry
+ additionalProperties: false
google.protobuf.BoolValue:
type: boolean
description: |-
@@ -883,8 +894,8 @@ components:
google.protobuf.Timestamp:
type: string
examples:
- - "2023-01-15T01:30:15.01Z"
- - "2024-12-25T12:00:00Z"
+ - 1s
+ - 1.000340012s
format: date-time
description: |-
A Timestamp represents a point in time independent of any time zone or local
@@ -978,65 +989,41 @@ components:
) to obtain a formatter capable of generating timestamps in this format.
policy.Action:
type: object
- allOf:
+ oneOf:
- properties:
- id:
+ custom:
type: string
- title: id
- description: Generated uuid in database
- name:
- type: string
- title: name
- namespace:
- title: namespace
- description: Namespace context for this action
- $ref: '#/components/schemas/policy.Namespace'
- metadata:
- title: metadata
- $ref: '#/components/schemas/common.Metadata'
- - oneOf:
- - type: object
- properties:
- custom:
- type: string
- title: custom
- description: Deprecated
title: custom
- required:
- - custom
- - type: object
- properties:
- standard:
- title: standard
- description: Deprecated
- $ref: '#/components/schemas/policy.Action.StandardAction'
+ description: Deprecated
+ title: custom
+ required:
+ - custom
+ - properties:
+ standard:
title: standard
- required:
- - standard
+ description: Deprecated
+ $ref: '#/components/schemas/policy.Action.StandardAction'
+ title: standard
+ required:
+ - standard
+ properties:
+ id:
+ type: string
+ title: id
+ description: Generated uuid in database
+ name:
+ type: string
+ title: name
+ namespace:
+ title: namespace
+ description: Namespace context for this action
+ $ref: '#/components/schemas/policy.Namespace'
+ metadata:
+ title: metadata
+ $ref: '#/components/schemas/common.Metadata'
title: Action
additionalProperties: false
description: An action an entity can take
- policy.Action.StandardAction:
- type: string
- title: StandardAction
- enum:
- - STANDARD_ACTION_UNSPECIFIED
- - STANDARD_ACTION_DECRYPT
- - STANDARD_ACTION_TRANSMIT
- policy.Algorithm:
- type: string
- title: Algorithm
- enum:
- - ALGORITHM_UNSPECIFIED
- - ALGORITHM_RSA_2048
- - ALGORITHM_RSA_4096
- - ALGORITHM_EC_P256
- - ALGORITHM_EC_P384
- - ALGORITHM_EC_P521
- - ALGORITHM_HPQT_XWING
- - ALGORITHM_HPQT_SECP256R1_MLKEM768
- - ALGORITHM_HPQT_SECP384R1_MLKEM1024
- description: Supported key algorithms.
policy.Attribute:
type: object
properties:
@@ -1093,14 +1080,6 @@ components:
required:
- rule
additionalProperties: false
- policy.AttributeRuleTypeEnum:
- type: string
- title: AttributeRuleTypeEnum
- enum:
- - ATTRIBUTE_RULE_TYPE_ENUM_UNSPECIFIED
- - ATTRIBUTE_RULE_TYPE_ENUM_ALL_OF
- - ATTRIBUTE_RULE_TYPE_ENUM_ANY_OF
- - ATTRIBUTE_RULE_TYPE_ENUM_HIERARCHY
policy.Condition:
type: object
properties:
@@ -1118,6 +1097,7 @@ components:
type: array
items:
type: string
+ minItems: 1
title: subject_external_values
minItems: 1
description: |-
@@ -1133,13 +1113,6 @@ components:
*
A Condition defines a rule of
- policy.ConditionBooleanTypeEnum:
- type: string
- title: ConditionBooleanTypeEnum
- enum:
- - CONDITION_BOOLEAN_TYPE_ENUM_UNSPECIFIED
- - CONDITION_BOOLEAN_TYPE_ENUM_AND
- - CONDITION_BOOLEAN_TYPE_ENUM_OR
policy.ConditionGroup:
type: object
properties:
@@ -1176,7 +1149,7 @@ components:
alg:
not:
enum:
- - KAS_PUBLIC_KEY_ALG_ENUM_UNSPECIFIED
+ - 0
title: alg
description: |-
A known algorithm type with any additional parameters encoded.
@@ -1188,19 +1161,6 @@ components:
description: |-
Deprecated
A KAS public key and some associated metadata for further identifcation
- policy.KasPublicKeyAlgEnum:
- type: string
- title: KasPublicKeyAlgEnum
- enum:
- - KAS_PUBLIC_KEY_ALG_ENUM_UNSPECIFIED
- - KAS_PUBLIC_KEY_ALG_ENUM_RSA_2048
- - KAS_PUBLIC_KEY_ALG_ENUM_RSA_4096
- - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP256R1
- - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP384R1
- - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP521R1
- - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_XWING
- - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP256R1_MLKEM768
- - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP384R1_MLKEM1024
policy.KasPublicKeySet:
type: object
properties:
@@ -1223,9 +1183,13 @@ components:
uri:
type: string
title: uri
- description: |
+ description: |+
Address of a KAS instance
- uri_format // URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.
+ URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.:
+ ```
+ this.matches('^https?://[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?)*(:[0-9]+)?(/.*)?$')
+ ```
+
publicKey:
title: public_key
description: 'Deprecated: KAS can have multiple key pairs'
@@ -1423,8 +1387,7 @@ components:
policy.PublicKey:
type: object
oneOf:
- - type: object
- properties:
+ - properties:
cached:
title: cached
description: public key with additional information. Current preferred version
@@ -1432,14 +1395,17 @@ components:
title: cached
required:
- cached
- - type: object
- properties:
+ - properties:
remote:
type: string
title: remote
- description: |
+ description: |+
kas public key url - optional since can also be retrieved via public key
- uri_format // URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.
+ URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.:
+ ```
+ this.matches('^https://[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?)*(/.*)?$')
+ ```
+
title: remote
required:
- remote
@@ -1516,6 +1482,14 @@ components:
description: |-
Resource Mapping Groups are namespaced collections of Resource Mappings
associated under a common group name.
+ policy.Search:
+ type: object
+ properties:
+ term:
+ type: string
+ title: term
+ title: Search
+ additionalProperties: false
policy.SimpleKasKey:
type: object
properties:
@@ -1547,29 +1521,6 @@ components:
title: pem
title: SimpleKasPublicKey
additionalProperties: false
- policy.SortDirection:
- type: string
- title: SortDirection
- enum:
- - SORT_DIRECTION_UNSPECIFIED
- - SORT_DIRECTION_ASC
- - SORT_DIRECTION_DESC
- description: |-
- Sorting direction shared across list APIs.
- When the 'sort' field is omitted or the chosen sort 'field' is UNSPECIFIED,
- the endpoint's request message defines the default ordering; see the
- specific List* request docs.
- policy.SourceType:
- type: string
- title: SourceType
- enum:
- - SOURCE_TYPE_UNSPECIFIED
- - SOURCE_TYPE_INTERNAL
- - SOURCE_TYPE_EXTERNAL
- description: |-
- Describes whether this kas is managed by the organization or if they imported
- the kas information from an external party. These two modes are necessary in order
- to encrypt a tdf dek with an external parties kas public key.
policy.SubjectConditionSet:
type: object
properties:
@@ -1635,14 +1586,6 @@ components:
description: |-
Subject Mapping: A Policy assigning Subject Set(s) to a permitted attribute
value + action(s) combination
- policy.SubjectMappingOperatorEnum:
- type: string
- title: SubjectMappingOperatorEnum
- enum:
- - SUBJECT_MAPPING_OPERATOR_ENUM_UNSPECIFIED
- - SUBJECT_MAPPING_OPERATOR_ENUM_IN
- - SUBJECT_MAPPING_OPERATOR_ENUM_NOT_IN
- - SUBJECT_MAPPING_OPERATOR_ENUM_IN_CONTAINS
policy.SubjectSet:
type: object
properties:
@@ -1866,9 +1809,13 @@ components:
type: string
title: name
maxLength: 253
- description: |
+ description: |+
Required
- attribute_name_format // Attribute name must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored attribute name will be normalized to lower case.
+ Attribute name must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored attribute name will be normalized to lower case.:
+ ```
+ this.matches('^[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?$')
+ ```
+
rule:
title: rule
description: Required
@@ -1879,6 +1826,7 @@ components:
type: string
maxLength: 253
pattern: ^[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?$
+ uniqueItems: true
title: values
uniqueItems: true
description: |-
@@ -1924,9 +1872,13 @@ components:
type: string
title: value
maxLength: 253
- description: |
+ description: |+
Required
- attribute_value_format // Attribute value must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored attribute value will be normalized to lower case.
+ Attribute value must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored attribute value will be normalized to lower case.:
+ ```
+ this.matches('^[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?$')
+ ```
+
obligationTriggers:
type: array
items:
@@ -1991,40 +1943,45 @@ components:
additionalProperties: false
policy.attributes.GetAttributeRequest:
type: object
- allOf:
+ oneOf:
- properties:
- id:
+ attributeId:
type: string
- title: id
- format: uuid
- description: 'Deprecated: utilize identifier'
- deprecated: true
- - oneOf:
- - type: object
- properties:
- attributeId:
- type: string
- title: attribute_id
- format: uuid
- description: 'option (buf.validate.oneof).required = true; // TODO: enable this when we remove the deprecated field'
title: attribute_id
- required:
- - attributeId
- - type: object
- properties:
- fqn:
- type: string
- title: fqn
- minLength: 1
- format: uri
+ format: uuid
+ description: 'option (buf.validate.oneof).required = true; // TODO: enable this when we remove the deprecated field'
+ title: attribute_id
+ required:
+ - attributeId
+ - properties:
+ fqn:
+ type: string
title: fqn
- required:
- - fqn
+ minLength: 1
+ format: uri
+ title: fqn
+ required:
+ - fqn
+ properties:
+ id:
+ type: string
+ title: id
+ format: uuid
+ description: 'Deprecated: utilize identifier'
+ deprecated: true
title: GetAttributeRequest
additionalProperties: false
- description: |
- exclusive_fields // Either use deprecated 'id' field or one of 'attribute_id' or 'fqn', but not both
- required_fields // Either id or one of attribute_id or fqn must be set
+ description: |+
+ Either use deprecated 'id' field or one of 'attribute_id' or 'fqn', but not both:
+ ```
+ !(has(this.id) && (has(this.attribute_id) || has(this.fqn)))
+ ```
+
+ Either id or one of attribute_id or fqn must be set:
+ ```
+ has(this.id) || has(this.attribute_id) || has(this.fqn)
+ ```
+
policy.attributes.GetAttributeResponse:
type: object
properties:
@@ -2035,43 +1992,48 @@ components:
additionalProperties: false
policy.attributes.GetAttributeValueRequest:
type: object
- allOf:
+ oneOf:
- properties:
- id:
+ fqn:
type: string
- title: id
- format: uuid
- description: 'Deprecated: utilize identifier'
- deprecated: true
- - oneOf:
- - type: object
- properties:
- fqn:
- type: string
- title: fqn
- minLength: 1
- format: uri
title: fqn
- required:
- - fqn
- - type: object
- properties:
- valueId:
- type: string
- title: value_id
- format: uuid
- description: 'option (buf.validate.oneof).required = true; // TODO: enable this when we remove the deprecated field'
+ minLength: 1
+ format: uri
+ title: fqn
+ required:
+ - fqn
+ - properties:
+ valueId:
+ type: string
title: value_id
- required:
- - valueId
+ format: uuid
+ description: 'option (buf.validate.oneof).required = true; // TODO: enable this when we remove the deprecated field'
+ title: value_id
+ required:
+ - valueId
+ properties:
+ id:
+ type: string
+ title: id
+ format: uuid
+ description: 'Deprecated: utilize identifier'
+ deprecated: true
title: GetAttributeValueRequest
additionalProperties: false
- description: |
+ description: |+
/
/ Value RPC messages
/
- exclusive_fields // Either use deprecated 'id' field or one of 'value_id' or 'fqn', but not both
- required_fields // Either id or one of value_id or fqn must be set
+ Either use deprecated 'id' field or one of 'value_id' or 'fqn', but not both:
+ ```
+ !(has(this.id) && (has(this.value_id) || has(this.fqn)))
+ ```
+
+ Either id or one of value_id or fqn must be set:
+ ```
+ has(this.id) || has(this.value_id) || has(this.fqn)
+ ```
+
policy.attributes.GetAttributeValueResponse:
type: object
properties:
@@ -2087,6 +2049,8 @@ components:
type: array
items:
type: string
+ maxItems: 250
+ minItems: 1
title: fqns
maxItems: 250
minItems: 1
@@ -2193,6 +2157,10 @@ components:
- direction UNSPECIFIED defaults to DESC for the specified field
- field UNSPECIFIED defaults to created_at with the specified direction
- both UNSPECIFIED or sort omitted defaults to created_at DESC
+ search:
+ title: search
+ description: Optional
+ $ref: '#/components/schemas/policy.Search'
title: ListAttributesRequest
additionalProperties: false
policy.attributes.ListAttributesResponse:
@@ -2284,14 +2252,6 @@ components:
$ref: '#/components/schemas/policy.attributes.ValueKey'
title: RemovePublicKeyFromValueResponse
additionalProperties: false
- policy.attributes.SortAttributesType:
- type: string
- title: SortAttributesType
- enum:
- - SORT_ATTRIBUTES_TYPE_UNSPECIFIED
- - SORT_ATTRIBUTES_TYPE_NAME
- - SORT_ATTRIBUTES_TYPE_CREATED_AT
- - SORT_ATTRIBUTES_TYPE_UPDATED_AT
policy.attributes.UpdateAttributeRequest:
type: object
properties:
@@ -2377,6 +2337,63 @@ components:
description: Required
title: ValueKeyAccessServer
additionalProperties: false
+ connect-protocol-version:
+ type: number
+ title: Connect-Protocol-Version
+ enum:
+ - 1
+ description: Define the version of the Connect protocol
+ const: 1
+ connect-timeout-header:
+ type: number
+ title: Connect-Timeout-Ms
+ description: Define the timeout, in ms
+ connect.error:
+ type: object
+ properties:
+ code:
+ type: string
+ examples:
+ - not_found
+ enum:
+ - canceled
+ - unknown
+ - invalid_argument
+ - deadline_exceeded
+ - not_found
+ - already_exists
+ - permission_denied
+ - resource_exhausted
+ - failed_precondition
+ - aborted
+ - out_of_range
+ - unimplemented
+ - internal
+ - unavailable
+ - data_loss
+ - unauthenticated
+ description: The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
+ message:
+ type: string
+ description: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
+ detail:
+ $ref: '#/components/schemas/google.protobuf.Any'
+ title: Connect Error
+ additionalProperties: true
+ description: 'Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation'
+ google.protobuf.Any:
+ type: object
+ properties:
+ type:
+ type: string
+ value:
+ type: string
+ format: binary
+ debug:
+ type: object
+ additionalProperties: true
+ additionalProperties: true
+ description: Contains an arbitrary serialized message along with a @type that describes the type of the serialized message.
security: []
tags:
- name: policy.attributes.AttributesService
diff --git a/docs/openapi/policy/kasregistry/key_access_server_registry.openapi.yaml b/docs/openapi/policy/kasregistry/key_access_server_registry.openapi.yaml
index 8d9f785054..c11ccb0dad 100644
--- a/docs/openapi/policy/kasregistry/key_access_server_registry.openapi.yaml
+++ b/docs/openapi/policy/kasregistry/key_access_server_registry.openapi.yaml
@@ -2,15 +2,12 @@ openapi: 3.1.0
info:
title: policy.kasregistry
paths:
- /policy.kasregistry.KeyAccessServerRegistryService/CreateKey:
+ /policy.kasregistry.KeyAccessServerRegistryService/ListKeyAccessServers:
post:
tags:
- policy.kasregistry.KeyAccessServerRegistryService
- summary: CreateKey
- description: |-
- KAS Key Management
- Request to create a new key in the Key Access Service.
- operationId: policy.kasregistry.KeyAccessServerRegistryService.CreateKey
+ summary: ListKeyAccessServers
+ operationId: policy.kasregistry.KeyAccessServerRegistryService.ListKeyAccessServers
parameters:
- name: Connect-Protocol-Version
in: header
@@ -25,7 +22,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.kasregistry.CreateKeyRequest'
+ $ref: '#/components/schemas/policy.kasregistry.ListKeyAccessServersRequest'
required: true
responses:
default:
@@ -39,13 +36,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.kasregistry.CreateKeyResponse'
- /policy.kasregistry.KeyAccessServerRegistryService/CreateKeyAccessServer:
+ $ref: '#/components/schemas/policy.kasregistry.ListKeyAccessServersResponse'
+ /policy.kasregistry.KeyAccessServerRegistryService/GetKeyAccessServer:
post:
tags:
- policy.kasregistry.KeyAccessServerRegistryService
- summary: CreateKeyAccessServer
- operationId: policy.kasregistry.KeyAccessServerRegistryService.CreateKeyAccessServer
+ summary: GetKeyAccessServer
+ operationId: policy.kasregistry.KeyAccessServerRegistryService.GetKeyAccessServer
parameters:
- name: Connect-Protocol-Version
in: header
@@ -60,7 +57,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.kasregistry.CreateKeyAccessServerRequest'
+ $ref: '#/components/schemas/policy.kasregistry.GetKeyAccessServerRequest'
required: true
responses:
default:
@@ -74,13 +71,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.kasregistry.CreateKeyAccessServerResponse'
- /policy.kasregistry.KeyAccessServerRegistryService/DeleteKeyAccessServer:
+ $ref: '#/components/schemas/policy.kasregistry.GetKeyAccessServerResponse'
+ /policy.kasregistry.KeyAccessServerRegistryService/CreateKeyAccessServer:
post:
tags:
- policy.kasregistry.KeyAccessServerRegistryService
- summary: DeleteKeyAccessServer
- operationId: policy.kasregistry.KeyAccessServerRegistryService.DeleteKeyAccessServer
+ summary: CreateKeyAccessServer
+ operationId: policy.kasregistry.KeyAccessServerRegistryService.CreateKeyAccessServer
parameters:
- name: Connect-Protocol-Version
in: header
@@ -95,7 +92,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.kasregistry.DeleteKeyAccessServerRequest'
+ $ref: '#/components/schemas/policy.kasregistry.CreateKeyAccessServerRequest'
required: true
responses:
default:
@@ -109,14 +106,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.kasregistry.DeleteKeyAccessServerResponse'
- /policy.kasregistry.KeyAccessServerRegistryService/GetBaseKey:
+ $ref: '#/components/schemas/policy.kasregistry.CreateKeyAccessServerResponse'
+ /policy.kasregistry.KeyAccessServerRegistryService/UpdateKeyAccessServer:
post:
tags:
- policy.kasregistry.KeyAccessServerRegistryService
- summary: GetBaseKey
- description: Get Default kas keys
- operationId: policy.kasregistry.KeyAccessServerRegistryService.GetBaseKey
+ summary: UpdateKeyAccessServer
+ operationId: policy.kasregistry.KeyAccessServerRegistryService.UpdateKeyAccessServer
parameters:
- name: Connect-Protocol-Version
in: header
@@ -131,7 +127,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.kasregistry.GetBaseKeyRequest'
+ $ref: '#/components/schemas/policy.kasregistry.UpdateKeyAccessServerRequest'
required: true
responses:
default:
@@ -145,14 +141,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.kasregistry.GetBaseKeyResponse'
- /policy.kasregistry.KeyAccessServerRegistryService/GetKey:
+ $ref: '#/components/schemas/policy.kasregistry.UpdateKeyAccessServerResponse'
+ /policy.kasregistry.KeyAccessServerRegistryService/DeleteKeyAccessServer:
post:
tags:
- policy.kasregistry.KeyAccessServerRegistryService
- summary: GetKey
- description: Request to retrieve a key from the Key Access Service.
- operationId: policy.kasregistry.KeyAccessServerRegistryService.GetKey
+ summary: DeleteKeyAccessServer
+ operationId: policy.kasregistry.KeyAccessServerRegistryService.DeleteKeyAccessServer
parameters:
- name: Connect-Protocol-Version
in: header
@@ -167,7 +162,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.kasregistry.GetKeyRequest'
+ $ref: '#/components/schemas/policy.kasregistry.DeleteKeyAccessServerRequest'
required: true
responses:
default:
@@ -181,13 +176,14 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.kasregistry.GetKeyResponse'
- /policy.kasregistry.KeyAccessServerRegistryService/GetKeyAccessServer:
+ $ref: '#/components/schemas/policy.kasregistry.DeleteKeyAccessServerResponse'
+ /policy.kasregistry.KeyAccessServerRegistryService/ListKeyAccessServerGrants:
post:
tags:
- policy.kasregistry.KeyAccessServerRegistryService
- summary: GetKeyAccessServer
- operationId: policy.kasregistry.KeyAccessServerRegistryService.GetKeyAccessServer
+ summary: ListKeyAccessServerGrants
+ description: Deprecated
+ operationId: policy.kasregistry.KeyAccessServerRegistryService.ListKeyAccessServerGrants
parameters:
- name: Connect-Protocol-Version
in: header
@@ -202,7 +198,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.kasregistry.GetKeyAccessServerRequest'
+ $ref: '#/components/schemas/policy.kasregistry.ListKeyAccessServerGrantsRequest'
required: true
responses:
default:
@@ -216,14 +212,17 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.kasregistry.GetKeyAccessServerResponse'
- /policy.kasregistry.KeyAccessServerRegistryService/ListKeyAccessServerGrants:
+ $ref: '#/components/schemas/policy.kasregistry.ListKeyAccessServerGrantsResponse'
+ deprecated: true
+ /policy.kasregistry.KeyAccessServerRegistryService/CreateKey:
post:
tags:
- policy.kasregistry.KeyAccessServerRegistryService
- summary: ListKeyAccessServerGrants
- description: Deprecated
- operationId: policy.kasregistry.KeyAccessServerRegistryService.ListKeyAccessServerGrants
+ summary: CreateKey
+ description: |-
+ KAS Key Management
+ Request to create a new key in the Key Access Service.
+ operationId: policy.kasregistry.KeyAccessServerRegistryService.CreateKey
parameters:
- name: Connect-Protocol-Version
in: header
@@ -238,7 +237,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.kasregistry.ListKeyAccessServerGrantsRequest'
+ $ref: '#/components/schemas/policy.kasregistry.CreateKeyRequest'
required: true
responses:
default:
@@ -252,14 +251,14 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.kasregistry.ListKeyAccessServerGrantsResponse'
- deprecated: true
- /policy.kasregistry.KeyAccessServerRegistryService/ListKeyAccessServers:
+ $ref: '#/components/schemas/policy.kasregistry.CreateKeyResponse'
+ /policy.kasregistry.KeyAccessServerRegistryService/GetKey:
post:
tags:
- policy.kasregistry.KeyAccessServerRegistryService
- summary: ListKeyAccessServers
- operationId: policy.kasregistry.KeyAccessServerRegistryService.ListKeyAccessServers
+ summary: GetKey
+ description: Request to retrieve a key from the Key Access Service.
+ operationId: policy.kasregistry.KeyAccessServerRegistryService.GetKey
parameters:
- name: Connect-Protocol-Version
in: header
@@ -274,7 +273,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.kasregistry.ListKeyAccessServersRequest'
+ $ref: '#/components/schemas/policy.kasregistry.GetKeyRequest'
required: true
responses:
default:
@@ -288,14 +287,14 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.kasregistry.ListKeyAccessServersResponse'
- /policy.kasregistry.KeyAccessServerRegistryService/ListKeyMappings:
+ $ref: '#/components/schemas/policy.kasregistry.GetKeyResponse'
+ /policy.kasregistry.KeyAccessServerRegistryService/ListKeys:
post:
tags:
- policy.kasregistry.KeyAccessServerRegistryService
- summary: ListKeyMappings
- description: Request to list key mappings in the Key Access Service.
- operationId: policy.kasregistry.KeyAccessServerRegistryService.ListKeyMappings
+ summary: ListKeys
+ description: Request to list keys in the Key Access Service.
+ operationId: policy.kasregistry.KeyAccessServerRegistryService.ListKeys
parameters:
- name: Connect-Protocol-Version
in: header
@@ -310,7 +309,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.kasregistry.ListKeyMappingsRequest'
+ $ref: '#/components/schemas/policy.kasregistry.ListKeysRequest'
required: true
responses:
default:
@@ -324,14 +323,14 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.kasregistry.ListKeyMappingsResponse'
- /policy.kasregistry.KeyAccessServerRegistryService/ListKeys:
+ $ref: '#/components/schemas/policy.kasregistry.ListKeysResponse'
+ /policy.kasregistry.KeyAccessServerRegistryService/UpdateKey:
post:
tags:
- policy.kasregistry.KeyAccessServerRegistryService
- summary: ListKeys
- description: Request to list keys in the Key Access Service.
- operationId: policy.kasregistry.KeyAccessServerRegistryService.ListKeys
+ summary: UpdateKey
+ description: Request to update a key in the Key Access Service.
+ operationId: policy.kasregistry.KeyAccessServerRegistryService.UpdateKey
parameters:
- name: Connect-Protocol-Version
in: header
@@ -346,7 +345,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.kasregistry.ListKeysRequest'
+ $ref: '#/components/schemas/policy.kasregistry.UpdateKeyRequest'
required: true
responses:
default:
@@ -360,7 +359,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.kasregistry.ListKeysResponse'
+ $ref: '#/components/schemas/policy.kasregistry.UpdateKeyResponse'
/policy.kasregistry.KeyAccessServerRegistryService/RotateKey:
post:
tags:
@@ -433,13 +432,13 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/policy.kasregistry.SetBaseKeyResponse'
- /policy.kasregistry.KeyAccessServerRegistryService/UpdateKey:
+ /policy.kasregistry.KeyAccessServerRegistryService/GetBaseKey:
post:
tags:
- policy.kasregistry.KeyAccessServerRegistryService
- summary: UpdateKey
- description: Request to update a key in the Key Access Service.
- operationId: policy.kasregistry.KeyAccessServerRegistryService.UpdateKey
+ summary: GetBaseKey
+ description: Get Default kas keys
+ operationId: policy.kasregistry.KeyAccessServerRegistryService.GetBaseKey
parameters:
- name: Connect-Protocol-Version
in: header
@@ -454,7 +453,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.kasregistry.UpdateKeyRequest'
+ $ref: '#/components/schemas/policy.kasregistry.GetBaseKeyRequest'
required: true
responses:
default:
@@ -468,13 +467,14 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.kasregistry.UpdateKeyResponse'
- /policy.kasregistry.KeyAccessServerRegistryService/UpdateKeyAccessServer:
+ $ref: '#/components/schemas/policy.kasregistry.GetBaseKeyResponse'
+ /policy.kasregistry.KeyAccessServerRegistryService/ListKeyMappings:
post:
tags:
- policy.kasregistry.KeyAccessServerRegistryService
- summary: UpdateKeyAccessServer
- operationId: policy.kasregistry.KeyAccessServerRegistryService.UpdateKeyAccessServer
+ summary: ListKeyMappings
+ description: Request to list key mappings in the Key Access Service.
+ operationId: policy.kasregistry.KeyAccessServerRegistryService.ListKeyMappings
parameters:
- name: Connect-Protocol-Version
in: header
@@ -489,7 +489,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.kasregistry.UpdateKeyAccessServerRequest'
+ $ref: '#/components/schemas/policy.kasregistry.ListKeyMappingsRequest'
required: true
responses:
default:
@@ -503,9 +503,101 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.kasregistry.UpdateKeyAccessServerResponse'
+ $ref: '#/components/schemas/policy.kasregistry.ListKeyMappingsResponse'
components:
schemas:
+ common.MetadataUpdateEnum:
+ type: string
+ title: MetadataUpdateEnum
+ enum:
+ - METADATA_UPDATE_ENUM_UNSPECIFIED
+ - METADATA_UPDATE_ENUM_EXTEND
+ - METADATA_UPDATE_ENUM_REPLACE
+ policy.Algorithm:
+ type: string
+ title: Algorithm
+ enum:
+ - ALGORITHM_UNSPECIFIED
+ - ALGORITHM_RSA_2048
+ - ALGORITHM_RSA_4096
+ - ALGORITHM_EC_P256
+ - ALGORITHM_EC_P384
+ - ALGORITHM_EC_P521
+ - ALGORITHM_HPQT_XWING
+ - ALGORITHM_HPQT_SECP256R1_MLKEM768
+ - ALGORITHM_HPQT_SECP384R1_MLKEM1024
+ description: Supported key algorithms.
+ policy.KasPublicKeyAlgEnum:
+ type: string
+ title: KasPublicKeyAlgEnum
+ enum:
+ - KAS_PUBLIC_KEY_ALG_ENUM_UNSPECIFIED
+ - KAS_PUBLIC_KEY_ALG_ENUM_RSA_2048
+ - KAS_PUBLIC_KEY_ALG_ENUM_RSA_4096
+ - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP256R1
+ - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP384R1
+ - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP521R1
+ - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_XWING
+ - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP256R1_MLKEM768
+ - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP384R1_MLKEM1024
+ policy.KeyMode:
+ type: string
+ title: KeyMode
+ enum:
+ - KEY_MODE_UNSPECIFIED
+ - KEY_MODE_CONFIG_ROOT_KEY
+ - KEY_MODE_PROVIDER_ROOT_KEY
+ - KEY_MODE_REMOTE
+ - KEY_MODE_PUBLIC_KEY_ONLY
+ description: Describes the management and operational mode of a cryptographic key.
+ policy.KeyStatus:
+ type: string
+ title: KeyStatus
+ enum:
+ - KEY_STATUS_UNSPECIFIED
+ - KEY_STATUS_ACTIVE
+ - KEY_STATUS_ROTATED
+ description: The status of the key
+ policy.SortDirection:
+ type: string
+ title: SortDirection
+ enum:
+ - SORT_DIRECTION_UNSPECIFIED
+ - SORT_DIRECTION_ASC
+ - SORT_DIRECTION_DESC
+ description: |-
+ Sorting direction shared across list APIs.
+ When the 'sort' field is omitted or the chosen sort 'field' is UNSPECIFIED,
+ the endpoint's request message defines the default ordering; see the
+ specific List* request docs.
+ policy.SourceType:
+ type: string
+ title: SourceType
+ enum:
+ - SOURCE_TYPE_UNSPECIFIED
+ - SOURCE_TYPE_INTERNAL
+ - SOURCE_TYPE_EXTERNAL
+ description: |-
+ Describes whether this kas is managed by the organization or if they imported
+ the kas information from an external party. These two modes are necessary in order
+ to encrypt a tdf dek with an external parties kas public key.
+ policy.kasregistry.SortKasKeysType:
+ type: string
+ title: SortKasKeysType
+ enum:
+ - SORT_KAS_KEYS_TYPE_UNSPECIFIED
+ - SORT_KAS_KEYS_TYPE_KEY_ID
+ - SORT_KAS_KEYS_TYPE_CREATED_AT
+ - SORT_KAS_KEYS_TYPE_UPDATED_AT
+ policy.kasregistry.SortKeyAccessServersType:
+ type: string
+ title: SortKeyAccessServersType
+ enum:
+ - SORT_KEY_ACCESS_SERVERS_TYPE_UNSPECIFIED
+ - SORT_KEY_ACCESS_SERVERS_TYPE_NAME
+ - SORT_KEY_ACCESS_SERVERS_TYPE_URI
+ - SORT_KEY_ACCESS_SERVERS_TYPE_CREATED_AT
+ - SORT_KEY_ACCESS_SERVERS_TYPE_UPDATED_AT
common.Metadata:
type: object
properties:
@@ -561,82 +653,6 @@ components:
title: value
title: LabelsEntry
additionalProperties: false
- common.MetadataUpdateEnum:
- type: string
- title: MetadataUpdateEnum
- enum:
- - METADATA_UPDATE_ENUM_UNSPECIFIED
- - METADATA_UPDATE_ENUM_EXTEND
- - METADATA_UPDATE_ENUM_REPLACE
- connect-protocol-version:
- type: number
- title: Connect-Protocol-Version
- enum:
- - 1
- description: Define the version of the Connect protocol
- const: 1
- connect-timeout-header:
- type: number
- title: Connect-Timeout-Ms
- description: Define the timeout, in ms
- connect.error:
- type: object
- properties:
- code:
- type: string
- examples:
- - not_found
- enum:
- - canceled
- - unknown
- - invalid_argument
- - deadline_exceeded
- - not_found
- - already_exists
- - permission_denied
- - resource_exhausted
- - failed_precondition
- - aborted
- - out_of_range
- - unimplemented
- - internal
- - unavailable
- - data_loss
- - unauthenticated
- description: The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
- message:
- type: string
- description: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
- details:
- type: array
- items:
- $ref: '#/components/schemas/connect.error_details.Any'
- description: A list of messages that carry the error details. There is no limit on the number of messages.
- title: Connect Error
- additionalProperties: true
- description: 'Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation'
- connect.error_details.Any:
- type: object
- properties:
- type:
- type: string
- description: 'A URL that acts as a globally unique identifier for the type of the serialized message. For example: `type.googleapis.com/google.rpc.ErrorInfo`. This is used to determine the schema of the data in the `value` field and is the discriminator for the `debug` field.'
- value:
- type: string
- format: binary
- description: The Protobuf message, serialized as bytes and base64-encoded. The specific message type is identified by the `type` field.
- debug:
- oneOf:
- - type: object
- title: Any
- additionalProperties: true
- description: Detailed error information.
- discriminator:
- propertyName: type
- title: Debug
- description: Deserialized error detail payload. The 'type' field indicates the schema. This field is for easier debugging and should not be relied upon for application logic.
- additionalProperties: true
- description: Contains an arbitrary serialized message along with a @type that describes the type of the serialized message, with an additional debug field for ConnectRPC error details.
google.protobuf.BoolValue:
type: boolean
description: |-
@@ -649,8 +665,8 @@ components:
google.protobuf.Timestamp:
type: string
examples:
- - "2023-01-15T01:30:15.01Z"
- - "2024-12-25T12:00:00Z"
+ - 1s
+ - 1.000340012s
format: date-time
description: |-
A Timestamp represents a point in time independent of any time zone or local
@@ -742,20 +758,6 @@ components:
the Joda Time's [`ISODateTimeFormat.dateTime()`](
http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()
) to obtain a formatter capable of generating timestamps in this format.
- policy.Algorithm:
- type: string
- title: Algorithm
- enum:
- - ALGORITHM_UNSPECIFIED
- - ALGORITHM_RSA_2048
- - ALGORITHM_RSA_4096
- - ALGORITHM_EC_P256
- - ALGORITHM_EC_P384
- - ALGORITHM_EC_P521
- - ALGORITHM_HPQT_XWING
- - ALGORITHM_HPQT_SECP256R1_MLKEM768
- - ALGORITHM_HPQT_SECP384R1_MLKEM1024
- description: Supported key algorithms.
policy.AsymmetricKey:
type: object
properties:
@@ -833,7 +835,7 @@ components:
alg:
not:
enum:
- - KAS_PUBLIC_KEY_ALG_ENUM_UNSPECIFIED
+ - 0
title: alg
description: |-
A known algorithm type with any additional parameters encoded.
@@ -845,19 +847,6 @@ components:
description: |-
Deprecated
A KAS public key and some associated metadata for further identifcation
- policy.KasPublicKeyAlgEnum:
- type: string
- title: KasPublicKeyAlgEnum
- enum:
- - KAS_PUBLIC_KEY_ALG_ENUM_UNSPECIFIED
- - KAS_PUBLIC_KEY_ALG_ENUM_RSA_2048
- - KAS_PUBLIC_KEY_ALG_ENUM_RSA_4096
- - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP256R1
- - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP384R1
- - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP521R1
- - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_XWING
- - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP256R1_MLKEM768
- - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP384R1_MLKEM1024
policy.KasPublicKeySet:
type: object
properties:
@@ -905,9 +894,13 @@ components:
uri:
type: string
title: uri
- description: |
+ description: |+
Address of a KAS instance
- uri_format // URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.
+ URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.:
+ ```
+ this.matches('^https?://[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?)*(:[0-9]+)?(/.*)?$')
+ ```
+
publicKey:
title: public_key
description: 'Deprecated: KAS can have multiple key pairs'
@@ -935,16 +928,6 @@ components:
title: KeyAccessServer
additionalProperties: false
description: Key Access Server Registry
- policy.KeyMode:
- type: string
- title: KeyMode
- enum:
- - KEY_MODE_UNSPECIFIED
- - KEY_MODE_CONFIG_ROOT_KEY
- - KEY_MODE_PROVIDER_ROOT_KEY
- - KEY_MODE_REMOTE
- - KEY_MODE_PUBLIC_KEY_ONLY
- description: Describes the management and operational mode of a cryptographic key.
policy.KeyProviderConfig:
type: object
properties:
@@ -967,14 +950,6 @@ components:
$ref: '#/components/schemas/common.Metadata'
title: KeyProviderConfig
additionalProperties: false
- policy.KeyStatus:
- type: string
- title: KeyStatus
- enum:
- - KEY_STATUS_UNSPECIFIED
- - KEY_STATUS_ACTIVE
- - KEY_STATUS_ROTATED
- description: The status of the key
policy.PageRequest:
type: object
properties:
@@ -1034,8 +1009,7 @@ components:
policy.PublicKey:
type: object
oneOf:
- - type: object
- properties:
+ - properties:
cached:
title: cached
description: public key with additional information. Current preferred version
@@ -1043,14 +1017,17 @@ components:
title: cached
required:
- cached
- - type: object
- properties:
+ - properties:
remote:
type: string
title: remote
- description: |
+ description: |+
kas public key url - optional since can also be retrieved via public key
- uri_format // URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.
+ URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.:
+ ```
+ this.matches('^https://[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?)*(/.*)?$')
+ ```
+
title: remote
required:
- remote
@@ -1067,6 +1044,14 @@ components:
description: Required Base64 encoded public key in PEM format
title: PublicKeyCtx
additionalProperties: false
+ policy.Search:
+ type: object
+ properties:
+ term:
+ type: string
+ title: term
+ title: Search
+ additionalProperties: false
policy.SimpleKasKey:
type: object
properties:
@@ -1098,29 +1083,6 @@ components:
title: pem
title: SimpleKasPublicKey
additionalProperties: false
- policy.SortDirection:
- type: string
- title: SortDirection
- enum:
- - SORT_DIRECTION_UNSPECIFIED
- - SORT_DIRECTION_ASC
- - SORT_DIRECTION_DESC
- description: |-
- Sorting direction shared across list APIs.
- When the 'sort' field is omitted or the chosen sort 'field' is UNSPECIFIED,
- the endpoint's request message defines the default ordering; see the
- specific List* request docs.
- policy.SourceType:
- type: string
- title: SourceType
- enum:
- - SOURCE_TYPE_UNSPECIFIED
- - SOURCE_TYPE_INTERNAL
- - SOURCE_TYPE_EXTERNAL
- description: |-
- Describes whether this kas is managed by the organization or if they imported
- the kas information from an external party. These two modes are necessary in order
- to encrypt a tdf dek with an external parties kas public key.
policy.kasregistry.ActivatePublicKeyRequest:
type: object
properties:
@@ -1158,9 +1120,13 @@ components:
uri:
type: string
title: uri
- description: |
+ description: |+
Required
- uri_format // URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.
+ URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.:
+ ```
+ this.isUri()
+ ```
+
publicKey:
title: public_key
description: Deprecated
@@ -1173,9 +1139,13 @@ components:
type: string
title: name
maxLength: 253
- description: |
+ description: |+
Optional
- kas_name_format // Registered KAS name must be an alphanumeric string, allowing hyphens, and underscores but not as the first or last character. The stored KAS name will be normalized to lower case.
+ Registered KAS name must be an alphanumeric string, allowing hyphens, and underscores but not as the first or last character. The stored KAS name will be normalized to lower case.:
+ ```
+ size(this) > 0 ? this.matches('^[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?$') : true
+ ```
+
metadata:
title: metadata
description: Common metadata
@@ -1205,15 +1175,23 @@ components:
description: Required A user-defined identifier for the key
keyAlgorithm:
title: key_algorithm
- description: |
+ description: |+
Required The algorithm to be used for the key
- key_algorithm_defined // The key_algorithm must be one of the defined values.
+ The key_algorithm must be one of the defined values.:
+ ```
+ this in [1, 2, 3, 4, 5, 6, 7, 8]
+ ```
+
$ref: '#/components/schemas/policy.Algorithm'
keyMode:
title: key_mode
- description: |
+ description: |+
Required The mode of the key (e.g., local or external)
- key_mode_defined // The key_mode must be one of the defined values (1-4).
+ The key_mode must be one of the defined values (1-4).:
+ ```
+ this >= 1 && this <= 4
+ ```
+
$ref: '#/components/schemas/policy.KeyMode'
publicKeyCtx:
title: public_key_ctx
@@ -1239,11 +1217,23 @@ components:
required:
- publicKeyCtx
additionalProperties: false
- description: |
+ description: |+
Create a new asymmetric key for the specified Key Access Server (KAS)
- private_key_ctx_for_public_key_only // private_key_ctx must not be set if key_mode is KEY_MODE_PUBLIC_KEY_ONLY.
- private_key_ctx_optionally_required // The wrapped_key is required if key_mode is KEY_MODE_CONFIG_ROOT_KEY or KEY_MODE_PROVIDER_ROOT_KEY. The wrapped_key must be empty if key_mode is KEY_MODE_REMOTE or KEY_MODE_PUBLIC_KEY_ONLY.
- provider_config_id_optionally_required // Provider config id is required if key_mode is KEY_MODE_PROVIDER_ROOT_KEY or KEY_MODE_REMOTE. It must be empty for KEY_MODE_CONFIG_ROOT_KEY and KEY_MODE_PUBLIC_KEY_ONLY.
+ The wrapped_key is required if key_mode is KEY_MODE_CONFIG_ROOT_KEY or KEY_MODE_PROVIDER_ROOT_KEY. The wrapped_key must be empty if key_mode is KEY_MODE_REMOTE or KEY_MODE_PUBLIC_KEY_ONLY.:
+ ```
+ ((this.key_mode == 1 || this.key_mode == 2) && this.private_key_ctx.wrapped_key != '') || ((this.key_mode == 3 || this.key_mode == 4) && this.private_key_ctx.wrapped_key == '')
+ ```
+
+ Provider config id is required if key_mode is KEY_MODE_PROVIDER_ROOT_KEY or KEY_MODE_REMOTE. It must be empty for KEY_MODE_CONFIG_ROOT_KEY and KEY_MODE_PUBLIC_KEY_ONLY.:
+ ```
+ ((this.key_mode == 1 || this.key_mode == 4) && this.provider_config_id == '') || ((this.key_mode == 2 || this.key_mode == 3) && this.provider_config_id != '')
+ ```
+
+ private_key_ctx must not be set if key_mode is KEY_MODE_PUBLIC_KEY_ONLY.:
+ ```
+ !(this.key_mode == 4 && has(this.private_key_ctx))
+ ```
+
policy.kasregistry.CreateKeyResponse:
type: object
properties:
@@ -1332,49 +1322,53 @@ components:
additionalProperties: false
policy.kasregistry.GetKeyAccessServerRequest:
type: object
- allOf:
+ oneOf:
- properties:
- id:
+ kasId:
type: string
- title: id
- format: uuid
- description: Deprecated
- deprecated: true
- - oneOf:
- - type: object
- properties:
- kasId:
- type: string
- title: kas_id
- format: uuid
- description: 'option (buf.validate.oneof).required = true; // TODO: enable this when we remove the deprecated field'
title: kas_id
- required:
- - kasId
- - type: object
- properties:
- name:
- type: string
- title: name
- minLength: 1
+ format: uuid
+ description: 'option (buf.validate.oneof).required = true; // TODO: enable this when we remove the deprecated field'
+ title: kas_id
+ required:
+ - kasId
+ - properties:
+ name:
+ type: string
title: name
- required:
- - name
- - type: object
- properties:
- uri:
- type: string
- title: uri
- minLength: 1
- format: uri
+ minLength: 1
+ title: name
+ required:
+ - name
+ - properties:
+ uri:
+ type: string
title: uri
- required:
- - uri
+ minLength: 1
+ format: uri
+ title: uri
+ required:
+ - uri
+ properties:
+ id:
+ type: string
+ title: id
+ format: uuid
+ description: Deprecated
+ deprecated: true
title: GetKeyAccessServerRequest
additionalProperties: false
- description: |
- exclusive_fields // Either use deprecated 'id' field or one of 'kas_id' or 'uri', but not both
- required_fields // Either id or one of kas_id or uri must be set
+ description: |+
+ Either use deprecated 'id' field or one of 'kas_id' or 'uri', but not both:
+ ```
+ !(has(this.id) && (has(this.kas_id) || has(this.uri) || has(this.name)))
+ ```
+
+ Either id or one of kas_id or uri must be set:
+ ```
+ has(this.id) || has(this.kas_id) || has(this.uri) || has(this.name)
+ ```
+
policy.kasregistry.GetKeyAccessServerResponse:
type: object
properties:
@@ -1386,8 +1380,7 @@ components:
policy.kasregistry.GetKeyRequest:
type: object
oneOf:
- - type: object
- properties:
+ - properties:
id:
type: string
title: id
@@ -1396,8 +1389,7 @@ components:
title: id
required:
- id
- - type: object
- properties:
+ - properties:
key:
title: key
$ref: '#/components/schemas/policy.kasregistry.KasKeyIdentifier'
@@ -1420,8 +1412,7 @@ components:
policy.kasregistry.GetPublicKeyRequest:
type: object
oneOf:
- - type: object
- properties:
+ - properties:
id:
type: string
title: id
@@ -1453,42 +1444,38 @@ components:
description: Can be namespace, attribute definition, or value
policy.kasregistry.KasKeyIdentifier:
type: object
- allOf:
+ oneOf:
- properties:
- kid:
+ kasId:
type: string
- title: kid
- minLength: 1
- description: Required Key ID of the key in question
- - oneOf:
- - type: object
- properties:
- kasId:
- type: string
- title: kas_id
- format: uuid
title: kas_id
- required:
- - kasId
- - type: object
- properties:
- name:
- type: string
- title: name
- minLength: 1
+ format: uuid
+ title: kas_id
+ required:
+ - kasId
+ - properties:
+ name:
+ type: string
title: name
- required:
- - name
- - type: object
- properties:
- uri:
- type: string
- title: uri
- minLength: 1
- format: uri
+ minLength: 1
+ title: name
+ required:
+ - name
+ - properties:
+ uri:
+ type: string
title: uri
- required:
- - uri
+ minLength: 1
+ format: uri
+ title: uri
+ required:
+ - uri
+ properties:
+ kid:
+ type: string
+ title: kid
+ minLength: 1
+ description: Required Key ID of the key in question
title: KasKeyIdentifier
additionalProperties: false
description: Nested message for specifying the active key using KAS ID and Key ID
@@ -1573,31 +1560,43 @@ components:
kasId:
type: string
title: kas_id
- description: |
+ description: |+
Optional
Filter LIST by ID of a registered Key Access Server.
If neither is provided, grants from all registered KASs to policy attribute
objects are returned.
- optional_uuid_format // Optional field must be a valid UUID
+ Optional field must be a valid UUID:
+ ```
+ size(this) == 0 || this.matches('[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}')
+ ```
+
kasUri:
type: string
title: kas_uri
- description: |
+ description: |+
Optional
Filter LIST by URI of a registered Key Access Server.
If none is provided, grants from all registered KASs to policy attribute
objects are returned.
- optional_uri_format // Optional URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.
+ Optional URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.:
+ ```
+ size(this) == 0 || this.isUri()
+ ```
+
kasName:
type: string
title: kas_name
maxLength: 253
- description: |
+ description: |+
Optional
Filter LIST by name of a registered Key Access Server.
If none are provided, grants from all registered KASs to policy attribute
objects are returned.
- kas_name_format // Registered KAS name must be an alphanumeric string, allowing hyphens, and underscores but not as the first or last character. The stored KAS name will be normalized to lower case.
+ Registered KAS name must be an alphanumeric string, allowing hyphens, and underscores but not as the first or last character. The stored KAS name will be normalized to lower case.:
+ ```
+ size(this) == 0 || this.matches('^[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?$')
+ ```
+
pagination:
title: pagination
description: Optional
@@ -1643,6 +1642,10 @@ components:
- direction UNSPECIFIED defaults to DESC for the specified field
- field UNSPECIFIED defaults to created_at with the specified direction
- both UNSPECIFIED or sort omitted defaults to created_at DESC
+ search:
+ title: search
+ description: Optional
+ $ref: '#/components/schemas/policy.Search'
title: ListKeyAccessServersRequest
additionalProperties: false
policy.kasregistry.ListKeyAccessServersResponse:
@@ -1660,31 +1663,28 @@ components:
additionalProperties: false
policy.kasregistry.ListKeyMappingsRequest:
type: object
- allOf:
+ oneOf:
- properties:
- pagination:
- title: pagination
- description: Pagination request for the list of keys
- $ref: '#/components/schemas/policy.PageRequest'
- - oneOf:
- - type: object
- properties:
- id:
- type: string
- title: id
- format: uuid
- description: The unique identifier of the key to retrieve
+ id:
+ type: string
title: id
- required:
- - id
- - type: object
- properties:
- key:
- title: key
- $ref: '#/components/schemas/policy.kasregistry.KasKeyIdentifier'
+ format: uuid
+ description: The unique identifier of the key to retrieve
+ title: id
+ required:
+ - id
+ - properties:
+ key:
title: key
- required:
- - key
+ $ref: '#/components/schemas/policy.kasregistry.KasKeyIdentifier'
+ title: key
+ required:
+ - key
+ properties:
+ pagination:
+ title: pagination
+ description: Pagination request for the list of keys
+ $ref: '#/components/schemas/policy.PageRequest'
title: ListKeyMappingsRequest
additionalProperties: false
policy.kasregistry.ListKeyMappingsResponse:
@@ -1704,68 +1704,71 @@ components:
additionalProperties: false
policy.kasregistry.ListKeysRequest:
type: object
- allOf:
+ oneOf:
- properties:
- keyAlgorithm:
- title: key_algorithm
- description: |
- Filter keys by algorithm
- key_algorithm_defined // The key_algorithm must be one of the defined values.
- $ref: '#/components/schemas/policy.Algorithm'
- legacy:
- type:
- - boolean
- - "null"
- title: legacy
- description: Optional Filter for legacy keys
- pagination:
- title: pagination
- description: Optional Pagination request for the list of keys
- $ref: '#/components/schemas/policy.PageRequest'
- sort:
- type: array
- items:
- $ref: '#/components/schemas/policy.kasregistry.KasKeysSort'
- title: sort
- maxItems: 1
- description: |-
- Optional - CONSTRAINT: max 1 item
- Sort defaults:
- - direction UNSPECIFIED defaults to DESC for the specified field
- - field UNSPECIFIED defaults to created_at with the specified direction
- - both UNSPECIFIED or sort omitted defaults to created_at DESC
- - oneOf:
- - type: object
- properties:
- kasId:
- type: string
- title: kas_id
- format: uuid
- description: Filter keys by the KAS ID
+ kasId:
+ type: string
title: kas_id
- required:
- - kasId
- - type: object
- properties:
- kasName:
- type: string
- title: kas_name
- minLength: 1
- description: Filter keys by the KAS name
+ format: uuid
+ description: Filter keys by the KAS ID
+ title: kas_id
+ required:
+ - kasId
+ - properties:
+ kasName:
+ type: string
title: kas_name
- required:
- - kasName
- - type: object
- properties:
- kasUri:
- type: string
- title: kas_uri
- minLength: 1
- format: uri
- description: Filter keys by the KAS URI
+ minLength: 1
+ description: Filter keys by the KAS name
+ title: kas_name
+ required:
+ - kasName
+ - properties:
+ kasUri:
+ type: string
title: kas_uri
- required:
- - kasUri
+ minLength: 1
+ format: uri
+ description: Filter keys by the KAS URI
+ title: kas_uri
+ required:
+ - kasUri
+ properties:
+ keyAlgorithm:
+ title: key_algorithm
+ description: |+
+ Filter keys by algorithm
+ The key_algorithm must be one of the defined values.:
+ ```
+ this in [0, 1, 2, 3, 4, 5, 6, 7, 8]
+ ```
+
+ $ref: '#/components/schemas/policy.Algorithm'
+ legacy:
+ type: boolean
+ title: legacy
+ description: Optional Filter for legacy keys
+ nullable: true
+ pagination:
+ title: pagination
+ description: Optional Pagination request for the list of keys
+ $ref: '#/components/schemas/policy.PageRequest'
+ sort:
+ type: array
+ items:
+ $ref: '#/components/schemas/policy.kasregistry.KasKeysSort'
+ title: sort
+ maxItems: 1
+ description: |-
+ Optional - CONSTRAINT: max 1 item
+ Sort defaults:
+ - direction UNSPECIFIED defaults to DESC for the specified field
+ - field UNSPECIFIED defaults to created_at with the specified direction
+ - both UNSPECIFIED or sort omitted defaults to created_at DESC
+ search:
+ title: search
+ description: Optional
+ $ref: '#/components/schemas/policy.Search'
title: ListKeysRequest
additionalProperties: false
description: List all asymmetric keys managed by a specific Key Access Server or with a given algorithm
@@ -1787,49 +1790,45 @@ components:
description: Response to a ListKeysRequest, containing the list of asymmetric keys and pagination information
policy.kasregistry.ListPublicKeyMappingRequest:
type: object
- allOf:
+ oneOf:
- properties:
- publicKeyId:
+ kasId:
type: string
- title: public_key_id
+ title: kas_id
format: uuid
- description: Optional Public Key ID
- pagination:
- title: pagination
description: Optional
- $ref: '#/components/schemas/policy.PageRequest'
- - oneOf:
- - type: object
- properties:
- kasId:
- type: string
- title: kas_id
- format: uuid
- description: Optional
- title: kas_id
- required:
- - kasId
- - type: object
- properties:
- kasName:
- type: string
- title: kas_name
- minLength: 1
- description: Optional
+ title: kas_id
+ required:
+ - kasId
+ - properties:
+ kasName:
+ type: string
title: kas_name
- required:
- - kasName
- - type: object
- properties:
- kasUri:
- type: string
- title: kas_uri
- minLength: 1
- format: uri
- description: Optional
+ minLength: 1
+ description: Optional
+ title: kas_name
+ required:
+ - kasName
+ - properties:
+ kasUri:
+ type: string
title: kas_uri
- required:
- - kasUri
+ minLength: 1
+ format: uri
+ description: Optional
+ title: kas_uri
+ required:
+ - kasUri
+ properties:
+ publicKeyId:
+ type: string
+ title: public_key_id
+ format: uuid
+ description: Optional Public Key ID
+ pagination:
+ title: pagination
+ description: Optional
+ $ref: '#/components/schemas/policy.PageRequest'
title: ListPublicKeyMappingRequest
additionalProperties: false
policy.kasregistry.ListPublicKeyMappingResponse:
@@ -1900,44 +1899,40 @@ components:
additionalProperties: false
policy.kasregistry.ListPublicKeysRequest:
type: object
- allOf:
+ oneOf:
- properties:
- pagination:
- title: pagination
- description: Optional
- $ref: '#/components/schemas/policy.PageRequest'
- - oneOf:
- - type: object
- properties:
- kasId:
- type: string
- title: kas_id
- format: uuid
- description: Optional
+ kasId:
+ type: string
title: kas_id
- required:
- - kasId
- - type: object
- properties:
- kasName:
- type: string
- title: kas_name
- minLength: 1
- description: Optional
+ format: uuid
+ description: Optional
+ title: kas_id
+ required:
+ - kasId
+ - properties:
+ kasName:
+ type: string
title: kas_name
- required:
- - kasName
- - type: object
- properties:
- kasUri:
- type: string
- title: kas_uri
- minLength: 1
- format: uri
- description: Optional
+ minLength: 1
+ description: Optional
+ title: kas_name
+ required:
+ - kasName
+ - properties:
+ kasUri:
+ type: string
title: kas_uri
- required:
- - kasUri
+ minLength: 1
+ format: uri
+ description: Optional
+ title: kas_uri
+ required:
+ - kasUri
+ properties:
+ pagination:
+ title: pagination
+ description: Optional
+ $ref: '#/components/schemas/policy.PageRequest'
title: ListPublicKeysRequest
additionalProperties: false
policy.kasregistry.ListPublicKeysResponse:
@@ -1968,38 +1963,47 @@ components:
additionalProperties: false
policy.kasregistry.RotateKeyRequest:
type: object
- allOf:
+ oneOf:
- properties:
- newKey:
- title: new_key
- description: Information about the new key to be rotated in
- $ref: '#/components/schemas/policy.kasregistry.RotateKeyRequest.NewKey'
- - oneOf:
- - type: object
- properties:
- id:
- type: string
- title: id
- format: uuid
- description: Current Active Key UUID
+ id:
+ type: string
title: id
- required:
- - id
- - type: object
- properties:
- key:
- title: key
- description: Alternative way to specify the active key using KAS ID and Key ID
- $ref: '#/components/schemas/policy.kasregistry.KasKeyIdentifier'
+ format: uuid
+ description: Current Active Key UUID
+ title: id
+ required:
+ - id
+ - properties:
+ key:
title: key
- required:
- - key
+ description: Alternative way to specify the active key using KAS ID and Key ID
+ $ref: '#/components/schemas/policy.kasregistry.KasKeyIdentifier'
+ title: key
+ required:
+ - key
+ properties:
+ newKey:
+ title: new_key
+ description: Information about the new key to be rotated in
+ $ref: '#/components/schemas/policy.kasregistry.RotateKeyRequest.NewKey'
title: RotateKeyRequest
additionalProperties: false
- description: |
- private_key_ctx_for_public_key_only // private_key_ctx must not be set if key_mode is KEY_MODE_PUBLIC_KEY_ONLY.
- private_key_ctx_optionally_required // For the new key, the wrapped_key is required if key_mode is KEY_MODE_CONFIG_ROOT_KEY or KEY_MODE_PROVIDER_ROOT_KEY. The wrapped_key must be empty if key_mode is KEY_MODE_REMOTE or KEY_MODE_PUBLIC_KEY_ONLY.
- provider_config_id_optionally_required // For the new key, provider config id is required if key_mode is KEY_MODE_PROVIDER_ROOT_KEY or KEY_MODE_REMOTE. It must be empty for KEY_MODE_CONFIG_ROOT_KEY and KEY_MODE_PUBLIC_KEY_ONLY.
+ description: |+
+ For the new key, the wrapped_key is required if key_mode is KEY_MODE_CONFIG_ROOT_KEY or KEY_MODE_PROVIDER_ROOT_KEY. The wrapped_key must be empty if key_mode is KEY_MODE_REMOTE or KEY_MODE_PUBLIC_KEY_ONLY.:
+ ```
+ ((this.new_key.key_mode == 1 || this.new_key.key_mode == 2) && this.new_key.private_key_ctx.wrapped_key != '') || ((this.new_key.key_mode == 3 || this.new_key.key_mode == 4) && this.new_key.private_key_ctx.wrapped_key == '')
+ ```
+
+ For the new key, provider config id is required if key_mode is KEY_MODE_PROVIDER_ROOT_KEY or KEY_MODE_REMOTE. It must be empty for KEY_MODE_CONFIG_ROOT_KEY and KEY_MODE_PUBLIC_KEY_ONLY.:
+ ```
+ ((this.new_key.key_mode == 1 || this.new_key.key_mode == 4) && this.new_key.provider_config_id == '') || ((this.new_key.key_mode == 2 || this.new_key.key_mode == 3) && this.new_key.provider_config_id != '')
+ ```
+
+ private_key_ctx must not be set if key_mode is KEY_MODE_PUBLIC_KEY_ONLY.:
+ ```
+ !(this.new_key.key_mode == 4 && has(this.new_key.private_key_ctx))
+ ```
+
policy.kasregistry.RotateKeyRequest.NewKey:
type: object
properties:
@@ -2010,15 +2014,23 @@ components:
description: Required
algorithm:
title: algorithm
- description: |
+ description: |+
Required
- key_algorithm_defined // The key_algorithm must be one of the defined values.
+ The key_algorithm must be one of the defined values.:
+ ```
+ this in [1, 2, 3, 4, 5, 6, 7, 8]
+ ```
+
$ref: '#/components/schemas/policy.Algorithm'
keyMode:
title: key_mode
- description: |
+ description: |+
Required
- new_key_mode_defined // The new key_mode must be one of the defined values (1-4).
+ The new key_mode must be one of the defined values (1-4).:
+ ```
+ this in [1, 2, 3, 4]
+ ```
+
$ref: '#/components/schemas/policy.KeyMode'
publicKeyCtx:
title: public_key_ctx
@@ -2083,8 +2095,7 @@ components:
policy.kasregistry.SetBaseKeyRequest:
type: object
oneOf:
- - type: object
- properties:
+ - properties:
id:
type: string
title: id
@@ -2093,8 +2104,7 @@ components:
title: id
required:
- id
- - type: object
- properties:
+ - properties:
key:
title: key
description: Alternative way to specify the key using KAS ID and Key ID
@@ -2120,23 +2130,6 @@ components:
$ref: '#/components/schemas/policy.SimpleKasKey'
title: SetBaseKeyResponse
additionalProperties: false
- policy.kasregistry.SortKasKeysType:
- type: string
- title: SortKasKeysType
- enum:
- - SORT_KAS_KEYS_TYPE_UNSPECIFIED
- - SORT_KAS_KEYS_TYPE_KEY_ID
- - SORT_KAS_KEYS_TYPE_CREATED_AT
- - SORT_KAS_KEYS_TYPE_UPDATED_AT
- policy.kasregistry.SortKeyAccessServersType:
- type: string
- title: SortKeyAccessServersType
- enum:
- - SORT_KEY_ACCESS_SERVERS_TYPE_UNSPECIFIED
- - SORT_KEY_ACCESS_SERVERS_TYPE_NAME
- - SORT_KEY_ACCESS_SERVERS_TYPE_URI
- - SORT_KEY_ACCESS_SERVERS_TYPE_CREATED_AT
- - SORT_KEY_ACCESS_SERVERS_TYPE_UPDATED_AT
policy.kasregistry.UpdateKeyAccessServerRequest:
type: object
properties:
@@ -2148,9 +2141,13 @@ components:
uri:
type: string
title: uri
- description: |
+ description: |+
Optional
- optional_uri_format // Optional URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.
+ Optional URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.:
+ ```
+ size(this) == 0 || this.isUri()
+ ```
+
publicKey:
title: public_key
description: |-
@@ -2170,9 +2167,13 @@ components:
type: string
title: name
maxLength: 253
- description: |
+ description: |+
Optional
- kas_name_format // Registered KAS name must be an alphanumeric string, allowing hyphens, and underscores but not as the first or last character. The stored KAS name will be normalized to lower case.
+ Registered KAS name must be an alphanumeric string, allowing hyphens, and underscores but not as the first or last character. The stored KAS name will be normalized to lower case.:
+ ```
+ size(this) == 0 || this.matches('^[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?$')
+ ```
+
metadata:
title: metadata
description: |-
@@ -2212,9 +2213,13 @@ components:
$ref: '#/components/schemas/common.MetadataUpdateEnum'
title: UpdateKeyRequest
additionalProperties: false
- description: |
+ description: |+
Update an existing asymmetric key in the Key Management System
- metadata_update_behavior // Metadata update behavior must be either APPEND or REPLACE, when updating metadata.
+ Metadata update behavior must be either APPEND or REPLACE, when updating metadata.:
+ ```
+ ((!has(this.metadata)) || (has(this.metadata) && this.metadata_update_behavior != 0))
+ ```
+
policy.kasregistry.UpdateKeyResponse:
type: object
properties:
@@ -2252,6 +2257,63 @@ components:
$ref: '#/components/schemas/policy.Key'
title: UpdatePublicKeyResponse
additionalProperties: false
+ connect-protocol-version:
+ type: number
+ title: Connect-Protocol-Version
+ enum:
+ - 1
+ description: Define the version of the Connect protocol
+ const: 1
+ connect-timeout-header:
+ type: number
+ title: Connect-Timeout-Ms
+ description: Define the timeout, in ms
+ connect.error:
+ type: object
+ properties:
+ code:
+ type: string
+ examples:
+ - not_found
+ enum:
+ - canceled
+ - unknown
+ - invalid_argument
+ - deadline_exceeded
+ - not_found
+ - already_exists
+ - permission_denied
+ - resource_exhausted
+ - failed_precondition
+ - aborted
+ - out_of_range
+ - unimplemented
+ - internal
+ - unavailable
+ - data_loss
+ - unauthenticated
+ description: The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
+ message:
+ type: string
+ description: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
+ detail:
+ $ref: '#/components/schemas/google.protobuf.Any'
+ title: Connect Error
+ additionalProperties: true
+ description: 'Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation'
+ google.protobuf.Any:
+ type: object
+ properties:
+ type:
+ type: string
+ value:
+ type: string
+ format: binary
+ debug:
+ type: object
+ additionalProperties: true
+ additionalProperties: true
+ description: Contains an arbitrary serialized message along with a @type that describes the type of the serialized message.
security: []
tags:
- name: policy.kasregistry.KeyAccessServerRegistryService
diff --git a/docs/openapi/policy/keymanagement/key_management.openapi.yaml b/docs/openapi/policy/keymanagement/key_management.openapi.yaml
index 94f70d9b92..61a3e433ba 100644
--- a/docs/openapi/policy/keymanagement/key_management.openapi.yaml
+++ b/docs/openapi/policy/keymanagement/key_management.openapi.yaml
@@ -40,12 +40,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/policy.keymanagement.CreateProviderConfigResponse'
- /policy.keymanagement.KeyManagementService/DeleteProviderConfig:
+ /policy.keymanagement.KeyManagementService/GetProviderConfig:
post:
tags:
- policy.keymanagement.KeyManagementService
- summary: DeleteProviderConfig
- operationId: policy.keymanagement.KeyManagementService.DeleteProviderConfig
+ summary: GetProviderConfig
+ operationId: policy.keymanagement.KeyManagementService.GetProviderConfig
parameters:
- name: Connect-Protocol-Version
in: header
@@ -60,7 +60,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.keymanagement.DeleteProviderConfigRequest'
+ $ref: '#/components/schemas/policy.keymanagement.GetProviderConfigRequest'
required: true
responses:
default:
@@ -74,13 +74,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.keymanagement.DeleteProviderConfigResponse'
- /policy.keymanagement.KeyManagementService/GetProviderConfig:
+ $ref: '#/components/schemas/policy.keymanagement.GetProviderConfigResponse'
+ /policy.keymanagement.KeyManagementService/ListProviderConfigs:
post:
tags:
- policy.keymanagement.KeyManagementService
- summary: GetProviderConfig
- operationId: policy.keymanagement.KeyManagementService.GetProviderConfig
+ summary: ListProviderConfigs
+ operationId: policy.keymanagement.KeyManagementService.ListProviderConfigs
parameters:
- name: Connect-Protocol-Version
in: header
@@ -95,7 +95,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.keymanagement.GetProviderConfigRequest'
+ $ref: '#/components/schemas/policy.keymanagement.ListProviderConfigsRequest'
required: true
responses:
default:
@@ -109,13 +109,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.keymanagement.GetProviderConfigResponse'
- /policy.keymanagement.KeyManagementService/ListProviderConfigs:
+ $ref: '#/components/schemas/policy.keymanagement.ListProviderConfigsResponse'
+ /policy.keymanagement.KeyManagementService/UpdateProviderConfig:
post:
tags:
- policy.keymanagement.KeyManagementService
- summary: ListProviderConfigs
- operationId: policy.keymanagement.KeyManagementService.ListProviderConfigs
+ summary: UpdateProviderConfig
+ operationId: policy.keymanagement.KeyManagementService.UpdateProviderConfig
parameters:
- name: Connect-Protocol-Version
in: header
@@ -130,7 +130,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.keymanagement.ListProviderConfigsRequest'
+ $ref: '#/components/schemas/policy.keymanagement.UpdateProviderConfigRequest'
required: true
responses:
default:
@@ -144,13 +144,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.keymanagement.ListProviderConfigsResponse'
- /policy.keymanagement.KeyManagementService/UpdateProviderConfig:
+ $ref: '#/components/schemas/policy.keymanagement.UpdateProviderConfigResponse'
+ /policy.keymanagement.KeyManagementService/DeleteProviderConfig:
post:
tags:
- policy.keymanagement.KeyManagementService
- summary: UpdateProviderConfig
- operationId: policy.keymanagement.KeyManagementService.UpdateProviderConfig
+ summary: DeleteProviderConfig
+ operationId: policy.keymanagement.KeyManagementService.DeleteProviderConfig
parameters:
- name: Connect-Protocol-Version
in: header
@@ -165,7 +165,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.keymanagement.UpdateProviderConfigRequest'
+ $ref: '#/components/schemas/policy.keymanagement.DeleteProviderConfigRequest'
required: true
responses:
default:
@@ -179,9 +179,16 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.keymanagement.UpdateProviderConfigResponse'
+ $ref: '#/components/schemas/policy.keymanagement.DeleteProviderConfigResponse'
components:
schemas:
+ common.MetadataUpdateEnum:
+ type: string
+ title: MetadataUpdateEnum
+ enum:
+ - METADATA_UPDATE_ENUM_UNSPECIFIED
+ - METADATA_UPDATE_ENUM_EXTEND
+ - METADATA_UPDATE_ENUM_REPLACE
common.Metadata:
type: object
properties:
@@ -237,87 +244,11 @@ components:
title: value
title: LabelsEntry
additionalProperties: false
- common.MetadataUpdateEnum:
- type: string
- title: MetadataUpdateEnum
- enum:
- - METADATA_UPDATE_ENUM_UNSPECIFIED
- - METADATA_UPDATE_ENUM_EXTEND
- - METADATA_UPDATE_ENUM_REPLACE
- connect-protocol-version:
- type: number
- title: Connect-Protocol-Version
- enum:
- - 1
- description: Define the version of the Connect protocol
- const: 1
- connect-timeout-header:
- type: number
- title: Connect-Timeout-Ms
- description: Define the timeout, in ms
- connect.error:
- type: object
- properties:
- code:
- type: string
- examples:
- - not_found
- enum:
- - canceled
- - unknown
- - invalid_argument
- - deadline_exceeded
- - not_found
- - already_exists
- - permission_denied
- - resource_exhausted
- - failed_precondition
- - aborted
- - out_of_range
- - unimplemented
- - internal
- - unavailable
- - data_loss
- - unauthenticated
- description: The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
- message:
- type: string
- description: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
- details:
- type: array
- items:
- $ref: '#/components/schemas/connect.error_details.Any'
- description: A list of messages that carry the error details. There is no limit on the number of messages.
- title: Connect Error
- additionalProperties: true
- description: 'Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation'
- connect.error_details.Any:
- type: object
- properties:
- type:
- type: string
- description: 'A URL that acts as a globally unique identifier for the type of the serialized message. For example: `type.googleapis.com/google.rpc.ErrorInfo`. This is used to determine the schema of the data in the `value` field and is the discriminator for the `debug` field.'
- value:
- type: string
- format: binary
- description: The Protobuf message, serialized as bytes and base64-encoded. The specific message type is identified by the `type` field.
- debug:
- oneOf:
- - type: object
- title: Any
- additionalProperties: true
- description: Detailed error information.
- discriminator:
- propertyName: type
- title: Debug
- description: Deserialized error detail payload. The 'type' field indicates the schema. This field is for easier debugging and should not be relied upon for application logic.
- additionalProperties: true
- description: Contains an arbitrary serialized message along with a @type that describes the type of the serialized message, with an additional debug field for ConnectRPC error details.
google.protobuf.Timestamp:
type: string
examples:
- - "2023-01-15T01:30:15.01Z"
- - "2024-12-25T12:00:00Z"
+ - 1s
+ - 1.000340012s
format: date-time
description: |-
A Timestamp represents a point in time independent of any time zone or local
@@ -535,31 +466,28 @@ components:
additionalProperties: false
policy.keymanagement.GetProviderConfigRequest:
type: object
- allOf:
+ oneOf:
- properties:
- manager:
+ id:
type: string
- title: manager
- description: Optional - filter by manager type when searching by name
- - oneOf:
- - type: object
- properties:
- id:
- type: string
- title: id
- format: uuid
title: id
- required:
- - id
- - type: object
- properties:
- name:
- type: string
- title: name
- minLength: 1
+ format: uuid
+ title: id
+ required:
+ - id
+ - properties:
+ name:
+ type: string
title: name
- required:
- - name
+ minLength: 1
+ title: name
+ required:
+ - name
+ properties:
+ manager:
+ type: string
+ title: manager
+ description: Optional - filter by manager type when searching by name
title: GetProviderConfigRequest
additionalProperties: false
policy.keymanagement.GetProviderConfigResponse:
@@ -632,6 +560,63 @@ components:
$ref: '#/components/schemas/policy.KeyProviderConfig'
title: UpdateProviderConfigResponse
additionalProperties: false
+ connect-protocol-version:
+ type: number
+ title: Connect-Protocol-Version
+ enum:
+ - 1
+ description: Define the version of the Connect protocol
+ const: 1
+ connect-timeout-header:
+ type: number
+ title: Connect-Timeout-Ms
+ description: Define the timeout, in ms
+ connect.error:
+ type: object
+ properties:
+ code:
+ type: string
+ examples:
+ - not_found
+ enum:
+ - canceled
+ - unknown
+ - invalid_argument
+ - deadline_exceeded
+ - not_found
+ - already_exists
+ - permission_denied
+ - resource_exhausted
+ - failed_precondition
+ - aborted
+ - out_of_range
+ - unimplemented
+ - internal
+ - unavailable
+ - data_loss
+ - unauthenticated
+ description: The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
+ message:
+ type: string
+ description: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
+ detail:
+ $ref: '#/components/schemas/google.protobuf.Any'
+ title: Connect Error
+ additionalProperties: true
+ description: 'Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation'
+ google.protobuf.Any:
+ type: object
+ properties:
+ type:
+ type: string
+ value:
+ type: string
+ format: binary
+ debug:
+ type: object
+ additionalProperties: true
+ additionalProperties: true
+ description: Contains an arbitrary serialized message along with a @type that describes the type of the serialized message.
security: []
tags:
- name: policy.keymanagement.KeyManagementService
diff --git a/docs/openapi/policy/namespaces/namespaces.openapi.yaml b/docs/openapi/policy/namespaces/namespaces.openapi.yaml
index 506217b193..ab4a51570d 100644
--- a/docs/openapi/policy/namespaces/namespaces.openapi.yaml
+++ b/docs/openapi/policy/namespaces/namespaces.openapi.yaml
@@ -2,13 +2,12 @@ openapi: 3.1.0
info:
title: policy.namespaces
paths:
- /policy.namespaces.NamespaceService/AssignKeyAccessServerToNamespace:
+ /policy.namespaces.NamespaceService/GetNamespace:
post:
tags:
- policy.namespaces.NamespaceService
- summary: AssignKeyAccessServerToNamespace
- description: 'Deprecated: utilize AssignPublicKeyToNamespace'
- operationId: policy.namespaces.NamespaceService.AssignKeyAccessServerToNamespace
+ summary: GetNamespace
+ operationId: policy.namespaces.NamespaceService.GetNamespace
parameters:
- name: Connect-Protocol-Version
in: header
@@ -23,7 +22,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.namespaces.AssignKeyAccessServerToNamespaceRequest'
+ $ref: '#/components/schemas/policy.namespaces.GetNamespaceRequest'
required: true
responses:
default:
@@ -37,18 +36,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.namespaces.AssignKeyAccessServerToNamespaceResponse'
- deprecated: true
- /policy.namespaces.NamespaceService/AssignPublicKeyToNamespace:
+ $ref: '#/components/schemas/policy.namespaces.GetNamespaceResponse'
+ /policy.namespaces.NamespaceService/ListNamespaces:
post:
tags:
- policy.namespaces.NamespaceService
- summary: AssignPublicKeyToNamespace
- description: |-
- --------------------------------------*
- Namespace <> Key RPCs
- ---------------------------------------
- operationId: policy.namespaces.NamespaceService.AssignPublicKeyToNamespace
+ summary: ListNamespaces
+ operationId: policy.namespaces.NamespaceService.ListNamespaces
parameters:
- name: Connect-Protocol-Version
in: header
@@ -63,7 +57,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.namespaces.AssignPublicKeyToNamespaceRequest'
+ $ref: '#/components/schemas/policy.namespaces.ListNamespacesRequest'
required: true
responses:
default:
@@ -77,7 +71,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.namespaces.AssignPublicKeyToNamespaceResponse'
+ $ref: '#/components/schemas/policy.namespaces.ListNamespacesResponse'
/policy.namespaces.NamespaceService/CreateNamespace:
post:
tags:
@@ -113,12 +107,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/policy.namespaces.CreateNamespaceResponse'
- /policy.namespaces.NamespaceService/DeactivateNamespace:
+ /policy.namespaces.NamespaceService/UpdateNamespace:
post:
tags:
- policy.namespaces.NamespaceService
- summary: DeactivateNamespace
- operationId: policy.namespaces.NamespaceService.DeactivateNamespace
+ summary: UpdateNamespace
+ operationId: policy.namespaces.NamespaceService.UpdateNamespace
parameters:
- name: Connect-Protocol-Version
in: header
@@ -133,7 +127,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.namespaces.DeactivateNamespaceRequest'
+ $ref: '#/components/schemas/policy.namespaces.UpdateNamespaceRequest'
required: true
responses:
default:
@@ -147,13 +141,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.namespaces.DeactivateNamespaceResponse'
- /policy.namespaces.NamespaceService/GetNamespace:
+ $ref: '#/components/schemas/policy.namespaces.UpdateNamespaceResponse'
+ /policy.namespaces.NamespaceService/DeactivateNamespace:
post:
tags:
- policy.namespaces.NamespaceService
- summary: GetNamespace
- operationId: policy.namespaces.NamespaceService.GetNamespace
+ summary: DeactivateNamespace
+ operationId: policy.namespaces.NamespaceService.DeactivateNamespace
parameters:
- name: Connect-Protocol-Version
in: header
@@ -168,7 +162,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.namespaces.GetNamespaceRequest'
+ $ref: '#/components/schemas/policy.namespaces.DeactivateNamespaceRequest'
required: true
responses:
default:
@@ -182,13 +176,14 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.namespaces.GetNamespaceResponse'
- /policy.namespaces.NamespaceService/ListNamespaces:
+ $ref: '#/components/schemas/policy.namespaces.DeactivateNamespaceResponse'
+ /policy.namespaces.NamespaceService/AssignKeyAccessServerToNamespace:
post:
tags:
- policy.namespaces.NamespaceService
- summary: ListNamespaces
- operationId: policy.namespaces.NamespaceService.ListNamespaces
+ summary: AssignKeyAccessServerToNamespace
+ description: 'Deprecated: utilize AssignPublicKeyToNamespace'
+ operationId: policy.namespaces.NamespaceService.AssignKeyAccessServerToNamespace
parameters:
- name: Connect-Protocol-Version
in: header
@@ -203,7 +198,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.namespaces.ListNamespacesRequest'
+ $ref: '#/components/schemas/policy.namespaces.AssignKeyAccessServerToNamespaceRequest'
required: true
responses:
default:
@@ -217,7 +212,8 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.namespaces.ListNamespacesResponse'
+ $ref: '#/components/schemas/policy.namespaces.AssignKeyAccessServerToNamespaceResponse'
+ deprecated: true
/policy.namespaces.NamespaceService/RemoveKeyAccessServerFromNamespace:
post:
tags:
@@ -255,12 +251,16 @@ paths:
schema:
$ref: '#/components/schemas/policy.namespaces.RemoveKeyAccessServerFromNamespaceResponse'
deprecated: true
- /policy.namespaces.NamespaceService/RemovePublicKeyFromNamespace:
+ /policy.namespaces.NamespaceService/AssignPublicKeyToNamespace:
post:
tags:
- policy.namespaces.NamespaceService
- summary: RemovePublicKeyFromNamespace
- operationId: policy.namespaces.NamespaceService.RemovePublicKeyFromNamespace
+ summary: AssignPublicKeyToNamespace
+ description: |-
+ --------------------------------------*
+ Namespace <> Key RPCs
+ ---------------------------------------
+ operationId: policy.namespaces.NamespaceService.AssignPublicKeyToNamespace
parameters:
- name: Connect-Protocol-Version
in: header
@@ -275,7 +275,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.namespaces.RemovePublicKeyFromNamespaceRequest'
+ $ref: '#/components/schemas/policy.namespaces.AssignPublicKeyToNamespaceRequest'
required: true
responses:
default:
@@ -289,13 +289,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.namespaces.RemovePublicKeyFromNamespaceResponse'
- /policy.namespaces.NamespaceService/UpdateNamespace:
+ $ref: '#/components/schemas/policy.namespaces.AssignPublicKeyToNamespaceResponse'
+ /policy.namespaces.NamespaceService/RemovePublicKeyFromNamespace:
post:
tags:
- policy.namespaces.NamespaceService
- summary: UpdateNamespace
- operationId: policy.namespaces.NamespaceService.UpdateNamespace
+ summary: RemovePublicKeyFromNamespace
+ operationId: policy.namespaces.NamespaceService.RemovePublicKeyFromNamespace
parameters:
- name: Connect-Protocol-Version
in: header
@@ -310,7 +310,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.namespaces.UpdateNamespaceRequest'
+ $ref: '#/components/schemas/policy.namespaces.RemovePublicKeyFromNamespaceRequest'
required: true
responses:
default:
@@ -324,7 +324,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.namespaces.UpdateNamespaceResponse'
+ $ref: '#/components/schemas/policy.namespaces.RemovePublicKeyFromNamespaceResponse'
components:
schemas:
common.ActiveStateEnum:
@@ -336,6 +336,72 @@ components:
- ACTIVE_STATE_ENUM_INACTIVE
- ACTIVE_STATE_ENUM_ANY
description: 'buflint ENUM_VALUE_PREFIX: to make sure that C++ scoping rules aren''t violated when users add new enum values to an enum in a given package'
+ common.MetadataUpdateEnum:
+ type: string
+ title: MetadataUpdateEnum
+ enum:
+ - METADATA_UPDATE_ENUM_UNSPECIFIED
+ - METADATA_UPDATE_ENUM_EXTEND
+ - METADATA_UPDATE_ENUM_REPLACE
+ policy.Algorithm:
+ type: string
+ title: Algorithm
+ enum:
+ - ALGORITHM_UNSPECIFIED
+ - ALGORITHM_RSA_2048
+ - ALGORITHM_RSA_4096
+ - ALGORITHM_EC_P256
+ - ALGORITHM_EC_P384
+ - ALGORITHM_EC_P521
+ - ALGORITHM_HPQT_XWING
+ - ALGORITHM_HPQT_SECP256R1_MLKEM768
+ - ALGORITHM_HPQT_SECP384R1_MLKEM1024
+ description: Supported key algorithms.
+ policy.KasPublicKeyAlgEnum:
+ type: string
+ title: KasPublicKeyAlgEnum
+ enum:
+ - KAS_PUBLIC_KEY_ALG_ENUM_UNSPECIFIED
+ - KAS_PUBLIC_KEY_ALG_ENUM_RSA_2048
+ - KAS_PUBLIC_KEY_ALG_ENUM_RSA_4096
+ - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP256R1
+ - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP384R1
+ - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP521R1
+ - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_XWING
+ - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP256R1_MLKEM768
+ - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP384R1_MLKEM1024
+ policy.SortDirection:
+ type: string
+ title: SortDirection
+ enum:
+ - SORT_DIRECTION_UNSPECIFIED
+ - SORT_DIRECTION_ASC
+ - SORT_DIRECTION_DESC
+ description: |-
+ Sorting direction shared across list APIs.
+ When the 'sort' field is omitted or the chosen sort 'field' is UNSPECIFIED,
+ the endpoint's request message defines the default ordering; see the
+ specific List* request docs.
+ policy.SourceType:
+ type: string
+ title: SourceType
+ enum:
+ - SOURCE_TYPE_UNSPECIFIED
+ - SOURCE_TYPE_INTERNAL
+ - SOURCE_TYPE_EXTERNAL
+ description: |-
+ Describes whether this kas is managed by the organization or if they imported
+ the kas information from an external party. These two modes are necessary in order
+ to encrypt a tdf dek with an external parties kas public key.
+ policy.namespaces.SortNamespacesType:
+ type: string
+ title: SortNamespacesType
+ enum:
+ - SORT_NAMESPACES_TYPE_UNSPECIFIED
+ - SORT_NAMESPACES_TYPE_NAME
+ - SORT_NAMESPACES_TYPE_FQN
+ - SORT_NAMESPACES_TYPE_CREATED_AT
+ - SORT_NAMESPACES_TYPE_UPDATED_AT
common.Metadata:
type: object
properties:
@@ -391,82 +457,6 @@ components:
title: value
title: LabelsEntry
additionalProperties: false
- common.MetadataUpdateEnum:
- type: string
- title: MetadataUpdateEnum
- enum:
- - METADATA_UPDATE_ENUM_UNSPECIFIED
- - METADATA_UPDATE_ENUM_EXTEND
- - METADATA_UPDATE_ENUM_REPLACE
- connect-protocol-version:
- type: number
- title: Connect-Protocol-Version
- enum:
- - 1
- description: Define the version of the Connect protocol
- const: 1
- connect-timeout-header:
- type: number
- title: Connect-Timeout-Ms
- description: Define the timeout, in ms
- connect.error:
- type: object
- properties:
- code:
- type: string
- examples:
- - not_found
- enum:
- - canceled
- - unknown
- - invalid_argument
- - deadline_exceeded
- - not_found
- - already_exists
- - permission_denied
- - resource_exhausted
- - failed_precondition
- - aborted
- - out_of_range
- - unimplemented
- - internal
- - unavailable
- - data_loss
- - unauthenticated
- description: The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
- message:
- type: string
- description: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
- details:
- type: array
- items:
- $ref: '#/components/schemas/connect.error_details.Any'
- description: A list of messages that carry the error details. There is no limit on the number of messages.
- title: Connect Error
- additionalProperties: true
- description: 'Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation'
- connect.error_details.Any:
- type: object
- properties:
- type:
- type: string
- description: 'A URL that acts as a globally unique identifier for the type of the serialized message. For example: `type.googleapis.com/google.rpc.ErrorInfo`. This is used to determine the schema of the data in the `value` field and is the discriminator for the `debug` field.'
- value:
- type: string
- format: binary
- description: The Protobuf message, serialized as bytes and base64-encoded. The specific message type is identified by the `type` field.
- debug:
- oneOf:
- - type: object
- title: Any
- additionalProperties: true
- description: Detailed error information.
- discriminator:
- propertyName: type
- title: Debug
- description: Deserialized error detail payload. The 'type' field indicates the schema. This field is for easier debugging and should not be relied upon for application logic.
- additionalProperties: true
- description: Contains an arbitrary serialized message along with a @type that describes the type of the serialized message, with an additional debug field for ConnectRPC error details.
google.protobuf.BoolValue:
type: boolean
description: |-
@@ -479,8 +469,8 @@ components:
google.protobuf.Timestamp:
type: string
examples:
- - "2023-01-15T01:30:15.01Z"
- - "2024-12-25T12:00:00Z"
+ - 1s
+ - 1.000340012s
format: date-time
description: |-
A Timestamp represents a point in time independent of any time zone or local
@@ -572,20 +562,6 @@ components:
the Joda Time's [`ISODateTimeFormat.dateTime()`](
http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()
) to obtain a formatter capable of generating timestamps in this format.
- policy.Algorithm:
- type: string
- title: Algorithm
- enum:
- - ALGORITHM_UNSPECIFIED
- - ALGORITHM_RSA_2048
- - ALGORITHM_RSA_4096
- - ALGORITHM_EC_P256
- - ALGORITHM_EC_P384
- - ALGORITHM_EC_P521
- - ALGORITHM_HPQT_XWING
- - ALGORITHM_HPQT_SECP256R1_MLKEM768
- - ALGORITHM_HPQT_SECP384R1_MLKEM1024
- description: Supported key algorithms.
policy.KasPublicKey:
type: object
properties:
@@ -604,7 +580,7 @@ components:
alg:
not:
enum:
- - KAS_PUBLIC_KEY_ALG_ENUM_UNSPECIFIED
+ - 0
title: alg
description: |-
A known algorithm type with any additional parameters encoded.
@@ -616,19 +592,6 @@ components:
description: |-
Deprecated
A KAS public key and some associated metadata for further identifcation
- policy.KasPublicKeyAlgEnum:
- type: string
- title: KasPublicKeyAlgEnum
- enum:
- - KAS_PUBLIC_KEY_ALG_ENUM_UNSPECIFIED
- - KAS_PUBLIC_KEY_ALG_ENUM_RSA_2048
- - KAS_PUBLIC_KEY_ALG_ENUM_RSA_4096
- - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP256R1
- - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP384R1
- - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP521R1
- - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_XWING
- - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP256R1_MLKEM768
- - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP384R1_MLKEM1024
policy.KasPublicKeySet:
type: object
properties:
@@ -651,9 +614,13 @@ components:
uri:
type: string
title: uri
- description: |
+ description: |+
Address of a KAS instance
- uri_format // URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.
+ URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.:
+ ```
+ this.matches('^https?://[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?)*(:[0-9]+)?(/.*)?$')
+ ```
+
publicKey:
title: public_key
description: 'Deprecated: KAS can have multiple key pairs'
@@ -763,8 +730,7 @@ components:
policy.PublicKey:
type: object
oneOf:
- - type: object
- properties:
+ - properties:
cached:
title: cached
description: public key with additional information. Current preferred version
@@ -772,20 +738,31 @@ components:
title: cached
required:
- cached
- - type: object
- properties:
+ - properties:
remote:
type: string
title: remote
- description: |
+ description: |+
kas public key url - optional since can also be retrieved via public key
- uri_format // URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.
+ URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.:
+ ```
+ this.matches('^https://[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?)*(/.*)?$')
+ ```
+
title: remote
required:
- remote
title: PublicKey
additionalProperties: false
description: Deprecated
+ policy.Search:
+ type: object
+ properties:
+ term:
+ type: string
+ title: term
+ title: Search
+ additionalProperties: false
policy.SimpleKasKey:
type: object
properties:
@@ -817,29 +794,6 @@ components:
title: pem
title: SimpleKasPublicKey
additionalProperties: false
- policy.SortDirection:
- type: string
- title: SortDirection
- enum:
- - SORT_DIRECTION_UNSPECIFIED
- - SORT_DIRECTION_ASC
- - SORT_DIRECTION_DESC
- description: |-
- Sorting direction shared across list APIs.
- When the 'sort' field is omitted or the chosen sort 'field' is UNSPECIFIED,
- the endpoint's request message defines the default ordering; see the
- specific List* request docs.
- policy.SourceType:
- type: string
- title: SourceType
- enum:
- - SOURCE_TYPE_UNSPECIFIED
- - SOURCE_TYPE_INTERNAL
- - SOURCE_TYPE_EXTERNAL
- description: |-
- Describes whether this kas is managed by the organization or if they imported
- the kas information from an external party. These two modes are necessary in order
- to encrypt a tdf dek with an external parties kas public key.
policy.namespaces.AssignKeyAccessServerToNamespaceRequest:
type: object
properties:
@@ -883,9 +837,13 @@ components:
type: string
title: name
maxLength: 253
- description: |
+ description: |+
Required
- namespace_format // Namespace must be a valid hostname. It should include at least one dot, with each segment (label) starting and ending with an alphanumeric character. Each label must be 1 to 63 characters long, allowing hyphens but not as the first or last character. The top-level domain (the last segment after the final dot) must consist of at least two alphabetic characters. The stored namespace will be normalized to lower case.
+ Namespace must be a valid hostname. It should include at least one dot, with each segment (label) starting and ending with an alphanumeric character. Each label must be 1 to 63 characters long, allowing hyphens but not as the first or last character. The top-level domain (the last segment after the final dot) must consist of at least two alphabetic characters. The stored namespace will be normalized to lower case.:
+ ```
+ this.matches('^([a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}$')
+ ```
+
metadata:
title: metadata
description: Optional
@@ -918,40 +876,45 @@ components:
additionalProperties: false
policy.namespaces.GetNamespaceRequest:
type: object
- allOf:
+ oneOf:
- properties:
- id:
+ fqn:
type: string
- title: id
- format: uuid
- description: Deprecated
- deprecated: true
- - oneOf:
- - type: object
- properties:
- fqn:
- type: string
- title: fqn
- minLength: 1
- format: uri
title: fqn
- required:
- - fqn
- - type: object
- properties:
- namespaceId:
- type: string
- title: namespace_id
- format: uuid
- description: 'option (buf.validate.oneof).required = true; // TODO: enable this when we remove the deprecated field'
+ minLength: 1
+ format: uri
+ title: fqn
+ required:
+ - fqn
+ - properties:
+ namespaceId:
+ type: string
title: namespace_id
- required:
- - namespaceId
+ format: uuid
+ description: 'option (buf.validate.oneof).required = true; // TODO: enable this when we remove the deprecated field'
+ title: namespace_id
+ required:
+ - namespaceId
+ properties:
+ id:
+ type: string
+ title: id
+ format: uuid
+ description: Deprecated
+ deprecated: true
title: GetNamespaceRequest
additionalProperties: false
- description: |
- exclusive_fields // Either use deprecated 'id' field or one of 'namespace_id' or 'fqn', but not both
- required_fields // Either id or one of namespace_id or fqn must be set
+ description: |+
+ Either use deprecated 'id' field or one of 'namespace_id' or 'fqn', but not both:
+ ```
+ !(has(this.id) && (has(this.namespace_id) || has(this.fqn)))
+ ```
+
+ Either id or one of namespace_id or fqn must be set:
+ ```
+ has(this.id) || has(this.namespace_id) || has(this.fqn)
+ ```
+
policy.namespaces.GetNamespaceResponse:
type: object
properties:
@@ -985,6 +948,10 @@ components:
- direction UNSPECIFIED defaults to DESC for the specified field
- field UNSPECIFIED defaults to created_at with the specified direction
- both UNSPECIFIED or sort omitted defaults to created_at DESC
+ search:
+ title: search
+ description: Optional
+ $ref: '#/components/schemas/policy.Search'
title: ListNamespacesRequest
additionalProperties: false
policy.namespaces.ListNamespacesResponse:
@@ -1080,15 +1047,6 @@ components:
$ref: '#/components/schemas/policy.namespaces.NamespaceKey'
title: RemovePublicKeyFromNamespaceResponse
additionalProperties: false
- policy.namespaces.SortNamespacesType:
- type: string
- title: SortNamespacesType
- enum:
- - SORT_NAMESPACES_TYPE_UNSPECIFIED
- - SORT_NAMESPACES_TYPE_NAME
- - SORT_NAMESPACES_TYPE_FQN
- - SORT_NAMESPACES_TYPE_CREATED_AT
- - SORT_NAMESPACES_TYPE_UPDATED_AT
policy.namespaces.UpdateNamespaceRequest:
type: object
properties:
@@ -1114,6 +1072,63 @@ components:
$ref: '#/components/schemas/policy.Namespace'
title: UpdateNamespaceResponse
additionalProperties: false
+ connect-protocol-version:
+ type: number
+ title: Connect-Protocol-Version
+ enum:
+ - 1
+ description: Define the version of the Connect protocol
+ const: 1
+ connect-timeout-header:
+ type: number
+ title: Connect-Timeout-Ms
+ description: Define the timeout, in ms
+ connect.error:
+ type: object
+ properties:
+ code:
+ type: string
+ examples:
+ - not_found
+ enum:
+ - canceled
+ - unknown
+ - invalid_argument
+ - deadline_exceeded
+ - not_found
+ - already_exists
+ - permission_denied
+ - resource_exhausted
+ - failed_precondition
+ - aborted
+ - out_of_range
+ - unimplemented
+ - internal
+ - unavailable
+ - data_loss
+ - unauthenticated
+ description: The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
+ message:
+ type: string
+ description: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
+ detail:
+ $ref: '#/components/schemas/google.protobuf.Any'
+ title: Connect Error
+ additionalProperties: true
+ description: 'Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation'
+ google.protobuf.Any:
+ type: object
+ properties:
+ type:
+ type: string
+ value:
+ type: string
+ format: binary
+ debug:
+ type: object
+ additionalProperties: true
+ additionalProperties: true
+ description: Contains an arbitrary serialized message along with a @type that describes the type of the serialized message.
security: []
tags:
- name: policy.namespaces.NamespaceService
diff --git a/docs/openapi/policy/objects.openapi.yaml b/docs/openapi/policy/objects.openapi.yaml
index 6bef650b76..9c72e91e30 100644
--- a/docs/openapi/policy/objects.openapi.yaml
+++ b/docs/openapi/policy/objects.openapi.yaml
@@ -4,6 +4,92 @@ info:
paths: {}
components:
schemas:
+ policy.Action.StandardAction:
+ type: string
+ title: StandardAction
+ enum:
+ - STANDARD_ACTION_UNSPECIFIED
+ - STANDARD_ACTION_DECRYPT
+ - STANDARD_ACTION_TRANSMIT
+ policy.Algorithm:
+ type: string
+ title: Algorithm
+ enum:
+ - ALGORITHM_UNSPECIFIED
+ - ALGORITHM_RSA_2048
+ - ALGORITHM_RSA_4096
+ - ALGORITHM_EC_P256
+ - ALGORITHM_EC_P384
+ - ALGORITHM_EC_P521
+ - ALGORITHM_HPQT_XWING
+ - ALGORITHM_HPQT_SECP256R1_MLKEM768
+ - ALGORITHM_HPQT_SECP384R1_MLKEM1024
+ description: Supported key algorithms.
+ policy.AttributeRuleTypeEnum:
+ type: string
+ title: AttributeRuleTypeEnum
+ enum:
+ - ATTRIBUTE_RULE_TYPE_ENUM_UNSPECIFIED
+ - ATTRIBUTE_RULE_TYPE_ENUM_ALL_OF
+ - ATTRIBUTE_RULE_TYPE_ENUM_ANY_OF
+ - ATTRIBUTE_RULE_TYPE_ENUM_HIERARCHY
+ policy.ConditionBooleanTypeEnum:
+ type: string
+ title: ConditionBooleanTypeEnum
+ enum:
+ - CONDITION_BOOLEAN_TYPE_ENUM_UNSPECIFIED
+ - CONDITION_BOOLEAN_TYPE_ENUM_AND
+ - CONDITION_BOOLEAN_TYPE_ENUM_OR
+ policy.KasPublicKeyAlgEnum:
+ type: string
+ title: KasPublicKeyAlgEnum
+ enum:
+ - KAS_PUBLIC_KEY_ALG_ENUM_UNSPECIFIED
+ - KAS_PUBLIC_KEY_ALG_ENUM_RSA_2048
+ - KAS_PUBLIC_KEY_ALG_ENUM_RSA_4096
+ - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP256R1
+ - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP384R1
+ - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP521R1
+ - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_XWING
+ - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP256R1_MLKEM768
+ - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP384R1_MLKEM1024
+ policy.KeyMode:
+ type: string
+ title: KeyMode
+ enum:
+ - KEY_MODE_UNSPECIFIED
+ - KEY_MODE_CONFIG_ROOT_KEY
+ - KEY_MODE_PROVIDER_ROOT_KEY
+ - KEY_MODE_REMOTE
+ - KEY_MODE_PUBLIC_KEY_ONLY
+ description: Describes the management and operational mode of a cryptographic key.
+ policy.KeyStatus:
+ type: string
+ title: KeyStatus
+ enum:
+ - KEY_STATUS_UNSPECIFIED
+ - KEY_STATUS_ACTIVE
+ - KEY_STATUS_ROTATED
+ description: The status of the key
+ policy.SourceType:
+ type: string
+ title: SourceType
+ enum:
+ - SOURCE_TYPE_UNSPECIFIED
+ - SOURCE_TYPE_INTERNAL
+ - SOURCE_TYPE_EXTERNAL
+ description: |-
+ Describes whether this kas is managed by the organization or if they imported
+ the kas information from an external party. These two modes are necessary in order
+ to encrypt a tdf dek with an external parties kas public key.
+ policy.SubjectMappingOperatorEnum:
+ type: string
+ title: SubjectMappingOperatorEnum
+ enum:
+ - SUBJECT_MAPPING_OPERATOR_ENUM_UNSPECIFIED
+ - SUBJECT_MAPPING_OPERATOR_ENUM_IN
+ - SUBJECT_MAPPING_OPERATOR_ENUM_NOT_IN
+ - SUBJECT_MAPPING_OPERATOR_ENUM_IN_CONTAINS
common.Metadata:
type: object
properties:
@@ -48,8 +134,8 @@ components:
google.protobuf.Timestamp:
type: string
examples:
- - "2023-01-15T01:30:15.01Z"
- - "2024-12-25T12:00:00Z"
+ - 1s
+ - 1.000340012s
format: date-time
description: |-
A Timestamp represents a point in time independent of any time zone or local
@@ -143,65 +229,41 @@ components:
) to obtain a formatter capable of generating timestamps in this format.
policy.Action:
type: object
- allOf:
+ oneOf:
- properties:
- id:
- type: string
- title: id
- description: Generated uuid in database
- name:
+ custom:
type: string
- title: name
- namespace:
- title: namespace
- description: Namespace context for this action
- $ref: '#/components/schemas/policy.Namespace'
- metadata:
- title: metadata
- $ref: '#/components/schemas/common.Metadata'
- - oneOf:
- - type: object
- properties:
- custom:
- type: string
- title: custom
- description: Deprecated
title: custom
- required:
- - custom
- - type: object
- properties:
- standard:
- title: standard
- description: Deprecated
- $ref: '#/components/schemas/policy.Action.StandardAction'
+ description: Deprecated
+ title: custom
+ required:
+ - custom
+ - properties:
+ standard:
title: standard
- required:
- - standard
+ description: Deprecated
+ $ref: '#/components/schemas/policy.Action.StandardAction'
+ title: standard
+ required:
+ - standard
+ properties:
+ id:
+ type: string
+ title: id
+ description: Generated uuid in database
+ name:
+ type: string
+ title: name
+ namespace:
+ title: namespace
+ description: Namespace context for this action
+ $ref: '#/components/schemas/policy.Namespace'
+ metadata:
+ title: metadata
+ $ref: '#/components/schemas/common.Metadata'
title: Action
additionalProperties: false
description: An action an entity can take
- policy.Action.StandardAction:
- type: string
- title: StandardAction
- enum:
- - STANDARD_ACTION_UNSPECIFIED
- - STANDARD_ACTION_DECRYPT
- - STANDARD_ACTION_TRANSMIT
- policy.Algorithm:
- type: string
- title: Algorithm
- enum:
- - ALGORITHM_UNSPECIFIED
- - ALGORITHM_RSA_2048
- - ALGORITHM_RSA_4096
- - ALGORITHM_EC_P256
- - ALGORITHM_EC_P384
- - ALGORITHM_EC_P521
- - ALGORITHM_HPQT_XWING
- - ALGORITHM_HPQT_SECP256R1_MLKEM768
- - ALGORITHM_HPQT_SECP384R1_MLKEM1024
- description: Supported key algorithms.
policy.AsymmetricKey:
type: object
properties:
@@ -303,14 +365,6 @@ components:
required:
- rule
additionalProperties: false
- policy.AttributeRuleTypeEnum:
- type: string
- title: AttributeRuleTypeEnum
- enum:
- - ATTRIBUTE_RULE_TYPE_ENUM_UNSPECIFIED
- - ATTRIBUTE_RULE_TYPE_ENUM_ALL_OF
- - ATTRIBUTE_RULE_TYPE_ENUM_ANY_OF
- - ATTRIBUTE_RULE_TYPE_ENUM_HIERARCHY
policy.Condition:
type: object
properties:
@@ -328,6 +382,7 @@ components:
type: array
items:
type: string
+ minItems: 1
title: subject_external_values
minItems: 1
description: |-
@@ -343,13 +398,6 @@ components:
*
A Condition defines a rule of
- policy.ConditionBooleanTypeEnum:
- type: string
- title: ConditionBooleanTypeEnum
- enum:
- - CONDITION_BOOLEAN_TYPE_ENUM_UNSPECIFIED
- - CONDITION_BOOLEAN_TYPE_ENUM_AND
- - CONDITION_BOOLEAN_TYPE_ENUM_OR
policy.ConditionGroup:
type: object
properties:
@@ -400,7 +448,7 @@ components:
alg:
not:
enum:
- - KAS_PUBLIC_KEY_ALG_ENUM_UNSPECIFIED
+ - 0
title: alg
description: |-
A known algorithm type with any additional parameters encoded.
@@ -412,19 +460,6 @@ components:
description: |-
Deprecated
A KAS public key and some associated metadata for further identifcation
- policy.KasPublicKeyAlgEnum:
- type: string
- title: KasPublicKeyAlgEnum
- enum:
- - KAS_PUBLIC_KEY_ALG_ENUM_UNSPECIFIED
- - KAS_PUBLIC_KEY_ALG_ENUM_RSA_2048
- - KAS_PUBLIC_KEY_ALG_ENUM_RSA_4096
- - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP256R1
- - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP384R1
- - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP521R1
- - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_XWING
- - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP256R1_MLKEM768
- - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP384R1_MLKEM1024
policy.KasPublicKeySet:
type: object
properties:
@@ -472,9 +507,13 @@ components:
uri:
type: string
title: uri
- description: |
+ description: |+
Address of a KAS instance
- uri_format // URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.
+ URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.:
+ ```
+ this.matches('^https?://[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?)*(:[0-9]+)?(/.*)?$')
+ ```
+
publicKey:
title: public_key
description: 'Deprecated: KAS can have multiple key pairs'
@@ -502,16 +541,6 @@ components:
title: KeyAccessServer
additionalProperties: false
description: Key Access Server Registry
- policy.KeyMode:
- type: string
- title: KeyMode
- enum:
- - KEY_MODE_UNSPECIFIED
- - KEY_MODE_CONFIG_ROOT_KEY
- - KEY_MODE_PROVIDER_ROOT_KEY
- - KEY_MODE_REMOTE
- - KEY_MODE_PUBLIC_KEY_ONLY
- description: Describes the management and operational mode of a cryptographic key.
policy.KeyProviderConfig:
type: object
properties:
@@ -534,14 +563,6 @@ components:
$ref: '#/components/schemas/common.Metadata'
title: KeyProviderConfig
additionalProperties: false
- policy.KeyStatus:
- type: string
- title: KeyStatus
- enum:
- - KEY_STATUS_UNSPECIFIED
- - KEY_STATUS_ACTIVE
- - KEY_STATUS_ROTATED
- description: The status of the key
policy.Namespace:
type: object
properties:
@@ -684,8 +705,7 @@ components:
policy.PublicKey:
type: object
oneOf:
- - type: object
- properties:
+ - properties:
cached:
title: cached
description: public key with additional information. Current preferred version
@@ -693,14 +713,17 @@ components:
title: cached
required:
- cached
- - type: object
- properties:
+ - properties:
remote:
type: string
title: remote
- description: |
+ description: |+
kas public key url - optional since can also be retrieved via public key
- uri_format // URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.
+ URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.:
+ ```
+ this.matches('^https://[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?)*(/.*)?$')
+ ```
+
title: remote
required:
- remote
@@ -885,17 +908,6 @@ components:
title: pem
title: SimpleKasPublicKey
additionalProperties: false
- policy.SourceType:
- type: string
- title: SourceType
- enum:
- - SOURCE_TYPE_UNSPECIFIED
- - SOURCE_TYPE_INTERNAL
- - SOURCE_TYPE_EXTERNAL
- description: |-
- Describes whether this kas is managed by the organization or if they imported
- the kas information from an external party. These two modes are necessary in order
- to encrypt a tdf dek with an external parties kas public key.
policy.SubjectConditionSet:
type: object
properties:
@@ -961,14 +973,6 @@ components:
description: |-
Subject Mapping: A Policy assigning Subject Set(s) to a permitted attribute
value + action(s) combination
- policy.SubjectMappingOperatorEnum:
- type: string
- title: SubjectMappingOperatorEnum
- enum:
- - SUBJECT_MAPPING_OPERATOR_ENUM_UNSPECIFIED
- - SUBJECT_MAPPING_OPERATOR_ENUM_IN
- - SUBJECT_MAPPING_OPERATOR_ENUM_NOT_IN
- - SUBJECT_MAPPING_OPERATOR_ENUM_IN_CONTAINS
policy.SubjectProperty:
type: object
properties:
@@ -989,6 +993,7 @@ components:
authoritative source such as an IDP (Identity Provider) or User Store.
Examples include such ADFS/LDAP, OKTA, etc. For now, a valid property must
contain both a selector expression & a resulting value.
+
The external_selector_value is a specifier to select a value from a flattened
external representation of an Entity (such as from idP/LDAP), and the
external_value is the value selected by the external_selector_value on that
diff --git a/docs/openapi/policy/obligations/obligations.openapi.yaml b/docs/openapi/policy/obligations/obligations.openapi.yaml
index 946d6ce813..2f7b22fd34 100644
--- a/docs/openapi/policy/obligations/obligations.openapi.yaml
+++ b/docs/openapi/policy/obligations/obligations.openapi.yaml
@@ -2,12 +2,12 @@ openapi: 3.1.0
info:
title: policy.obligations
paths:
- /policy.obligations.Service/AddObligationTrigger:
+ /policy.obligations.Service/ListObligations:
post:
tags:
- policy.obligations.Service
- summary: AddObligationTrigger
- operationId: policy.obligations.Service.AddObligationTrigger
+ summary: ListObligations
+ operationId: policy.obligations.Service.ListObligations
parameters:
- name: Connect-Protocol-Version
in: header
@@ -22,7 +22,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.obligations.AddObligationTriggerRequest'
+ $ref: '#/components/schemas/policy.obligations.ListObligationsRequest'
required: true
responses:
default:
@@ -36,13 +36,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.obligations.AddObligationTriggerResponse'
- /policy.obligations.Service/CreateObligation:
+ $ref: '#/components/schemas/policy.obligations.ListObligationsResponse'
+ /policy.obligations.Service/GetObligation:
post:
tags:
- policy.obligations.Service
- summary: CreateObligation
- operationId: policy.obligations.Service.CreateObligation
+ summary: GetObligation
+ operationId: policy.obligations.Service.GetObligation
parameters:
- name: Connect-Protocol-Version
in: header
@@ -57,7 +57,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.obligations.CreateObligationRequest'
+ $ref: '#/components/schemas/policy.obligations.GetObligationRequest'
required: true
responses:
default:
@@ -71,13 +71,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.obligations.CreateObligationResponse'
- /policy.obligations.Service/CreateObligationValue:
+ $ref: '#/components/schemas/policy.obligations.GetObligationResponse'
+ /policy.obligations.Service/GetObligationsByFQNs:
post:
tags:
- policy.obligations.Service
- summary: CreateObligationValue
- operationId: policy.obligations.Service.CreateObligationValue
+ summary: GetObligationsByFQNs
+ operationId: policy.obligations.Service.GetObligationsByFQNs
parameters:
- name: Connect-Protocol-Version
in: header
@@ -92,7 +92,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.obligations.CreateObligationValueRequest'
+ $ref: '#/components/schemas/policy.obligations.GetObligationsByFQNsRequest'
required: true
responses:
default:
@@ -106,13 +106,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.obligations.CreateObligationValueResponse'
- /policy.obligations.Service/DeleteObligation:
+ $ref: '#/components/schemas/policy.obligations.GetObligationsByFQNsResponse'
+ /policy.obligations.Service/CreateObligation:
post:
tags:
- policy.obligations.Service
- summary: DeleteObligation
- operationId: policy.obligations.Service.DeleteObligation
+ summary: CreateObligation
+ operationId: policy.obligations.Service.CreateObligation
parameters:
- name: Connect-Protocol-Version
in: header
@@ -127,7 +127,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.obligations.DeleteObligationRequest'
+ $ref: '#/components/schemas/policy.obligations.CreateObligationRequest'
required: true
responses:
default:
@@ -141,13 +141,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.obligations.DeleteObligationResponse'
- /policy.obligations.Service/DeleteObligationValue:
+ $ref: '#/components/schemas/policy.obligations.CreateObligationResponse'
+ /policy.obligations.Service/UpdateObligation:
post:
tags:
- policy.obligations.Service
- summary: DeleteObligationValue
- operationId: policy.obligations.Service.DeleteObligationValue
+ summary: UpdateObligation
+ operationId: policy.obligations.Service.UpdateObligation
parameters:
- name: Connect-Protocol-Version
in: header
@@ -162,7 +162,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.obligations.DeleteObligationValueRequest'
+ $ref: '#/components/schemas/policy.obligations.UpdateObligationRequest'
required: true
responses:
default:
@@ -176,13 +176,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.obligations.DeleteObligationValueResponse'
- /policy.obligations.Service/GetObligation:
+ $ref: '#/components/schemas/policy.obligations.UpdateObligationResponse'
+ /policy.obligations.Service/DeleteObligation:
post:
tags:
- policy.obligations.Service
- summary: GetObligation
- operationId: policy.obligations.Service.GetObligation
+ summary: DeleteObligation
+ operationId: policy.obligations.Service.DeleteObligation
parameters:
- name: Connect-Protocol-Version
in: header
@@ -197,7 +197,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.obligations.GetObligationRequest'
+ $ref: '#/components/schemas/policy.obligations.DeleteObligationRequest'
required: true
responses:
default:
@@ -211,13 +211,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.obligations.GetObligationResponse'
- /policy.obligations.Service/GetObligationTrigger:
+ $ref: '#/components/schemas/policy.obligations.DeleteObligationResponse'
+ /policy.obligations.Service/GetObligationValue:
post:
tags:
- policy.obligations.Service
- summary: GetObligationTrigger
- operationId: policy.obligations.Service.GetObligationTrigger
+ summary: GetObligationValue
+ operationId: policy.obligations.Service.GetObligationValue
parameters:
- name: Connect-Protocol-Version
in: header
@@ -232,7 +232,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.obligations.GetObligationTriggerRequest'
+ $ref: '#/components/schemas/policy.obligations.GetObligationValueRequest'
required: true
responses:
default:
@@ -246,13 +246,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.obligations.GetObligationTriggerResponse'
- /policy.obligations.Service/GetObligationValue:
+ $ref: '#/components/schemas/policy.obligations.GetObligationValueResponse'
+ /policy.obligations.Service/GetObligationValuesByFQNs:
post:
tags:
- policy.obligations.Service
- summary: GetObligationValue
- operationId: policy.obligations.Service.GetObligationValue
+ summary: GetObligationValuesByFQNs
+ operationId: policy.obligations.Service.GetObligationValuesByFQNs
parameters:
- name: Connect-Protocol-Version
in: header
@@ -267,7 +267,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.obligations.GetObligationValueRequest'
+ $ref: '#/components/schemas/policy.obligations.GetObligationValuesByFQNsRequest'
required: true
responses:
default:
@@ -281,13 +281,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.obligations.GetObligationValueResponse'
- /policy.obligations.Service/GetObligationValuesByFQNs:
+ $ref: '#/components/schemas/policy.obligations.GetObligationValuesByFQNsResponse'
+ /policy.obligations.Service/CreateObligationValue:
post:
tags:
- policy.obligations.Service
- summary: GetObligationValuesByFQNs
- operationId: policy.obligations.Service.GetObligationValuesByFQNs
+ summary: CreateObligationValue
+ operationId: policy.obligations.Service.CreateObligationValue
parameters:
- name: Connect-Protocol-Version
in: header
@@ -302,7 +302,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.obligations.GetObligationValuesByFQNsRequest'
+ $ref: '#/components/schemas/policy.obligations.CreateObligationValueRequest'
required: true
responses:
default:
@@ -316,13 +316,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.obligations.GetObligationValuesByFQNsResponse'
- /policy.obligations.Service/GetObligationsByFQNs:
+ $ref: '#/components/schemas/policy.obligations.CreateObligationValueResponse'
+ /policy.obligations.Service/UpdateObligationValue:
post:
tags:
- policy.obligations.Service
- summary: GetObligationsByFQNs
- operationId: policy.obligations.Service.GetObligationsByFQNs
+ summary: UpdateObligationValue
+ operationId: policy.obligations.Service.UpdateObligationValue
parameters:
- name: Connect-Protocol-Version
in: header
@@ -337,7 +337,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.obligations.GetObligationsByFQNsRequest'
+ $ref: '#/components/schemas/policy.obligations.UpdateObligationValueRequest'
required: true
responses:
default:
@@ -351,13 +351,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.obligations.GetObligationsByFQNsResponse'
- /policy.obligations.Service/ListObligationTriggers:
+ $ref: '#/components/schemas/policy.obligations.UpdateObligationValueResponse'
+ /policy.obligations.Service/DeleteObligationValue:
post:
tags:
- policy.obligations.Service
- summary: ListObligationTriggers
- operationId: policy.obligations.Service.ListObligationTriggers
+ summary: DeleteObligationValue
+ operationId: policy.obligations.Service.DeleteObligationValue
parameters:
- name: Connect-Protocol-Version
in: header
@@ -372,7 +372,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.obligations.ListObligationTriggersRequest'
+ $ref: '#/components/schemas/policy.obligations.DeleteObligationValueRequest'
required: true
responses:
default:
@@ -386,13 +386,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.obligations.ListObligationTriggersResponse'
- /policy.obligations.Service/ListObligations:
+ $ref: '#/components/schemas/policy.obligations.DeleteObligationValueResponse'
+ /policy.obligations.Service/GetObligationTrigger:
post:
tags:
- policy.obligations.Service
- summary: ListObligations
- operationId: policy.obligations.Service.ListObligations
+ summary: GetObligationTrigger
+ operationId: policy.obligations.Service.GetObligationTrigger
parameters:
- name: Connect-Protocol-Version
in: header
@@ -407,7 +407,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.obligations.ListObligationsRequest'
+ $ref: '#/components/schemas/policy.obligations.GetObligationTriggerRequest'
required: true
responses:
default:
@@ -421,13 +421,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.obligations.ListObligationsResponse'
- /policy.obligations.Service/RemoveObligationTrigger:
+ $ref: '#/components/schemas/policy.obligations.GetObligationTriggerResponse'
+ /policy.obligations.Service/AddObligationTrigger:
post:
tags:
- policy.obligations.Service
- summary: RemoveObligationTrigger
- operationId: policy.obligations.Service.RemoveObligationTrigger
+ summary: AddObligationTrigger
+ operationId: policy.obligations.Service.AddObligationTrigger
parameters:
- name: Connect-Protocol-Version
in: header
@@ -442,7 +442,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.obligations.RemoveObligationTriggerRequest'
+ $ref: '#/components/schemas/policy.obligations.AddObligationTriggerRequest'
required: true
responses:
default:
@@ -456,13 +456,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.obligations.RemoveObligationTriggerResponse'
- /policy.obligations.Service/UpdateObligation:
+ $ref: '#/components/schemas/policy.obligations.AddObligationTriggerResponse'
+ /policy.obligations.Service/RemoveObligationTrigger:
post:
tags:
- policy.obligations.Service
- summary: UpdateObligation
- operationId: policy.obligations.Service.UpdateObligation
+ summary: RemoveObligationTrigger
+ operationId: policy.obligations.Service.RemoveObligationTrigger
parameters:
- name: Connect-Protocol-Version
in: header
@@ -477,7 +477,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.obligations.UpdateObligationRequest'
+ $ref: '#/components/schemas/policy.obligations.RemoveObligationTriggerRequest'
required: true
responses:
default:
@@ -491,13 +491,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.obligations.UpdateObligationResponse'
- /policy.obligations.Service/UpdateObligationValue:
+ $ref: '#/components/schemas/policy.obligations.RemoveObligationTriggerResponse'
+ /policy.obligations.Service/ListObligationTriggers:
post:
tags:
- policy.obligations.Service
- summary: UpdateObligationValue
- operationId: policy.obligations.Service.UpdateObligationValue
+ summary: ListObligationTriggers
+ operationId: policy.obligations.Service.ListObligationTriggers
parameters:
- name: Connect-Protocol-Version
in: header
@@ -512,7 +512,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.obligations.UpdateObligationValueRequest'
+ $ref: '#/components/schemas/policy.obligations.ListObligationTriggersRequest'
required: true
responses:
default:
@@ -526,17 +526,107 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.obligations.UpdateObligationValueResponse'
+ $ref: '#/components/schemas/policy.obligations.ListObligationTriggersResponse'
components:
schemas:
+ common.MetadataUpdateEnum:
+ type: string
+ title: MetadataUpdateEnum
+ enum:
+ - METADATA_UPDATE_ENUM_UNSPECIFIED
+ - METADATA_UPDATE_ENUM_EXTEND
+ - METADATA_UPDATE_ENUM_REPLACE
+ policy.Action.StandardAction:
+ type: string
+ title: StandardAction
+ enum:
+ - STANDARD_ACTION_UNSPECIFIED
+ - STANDARD_ACTION_DECRYPT
+ - STANDARD_ACTION_TRANSMIT
+ policy.Algorithm:
+ type: string
+ title: Algorithm
+ enum:
+ - ALGORITHM_UNSPECIFIED
+ - ALGORITHM_RSA_2048
+ - ALGORITHM_RSA_4096
+ - ALGORITHM_EC_P256
+ - ALGORITHM_EC_P384
+ - ALGORITHM_EC_P521
+ - ALGORITHM_HPQT_XWING
+ - ALGORITHM_HPQT_SECP256R1_MLKEM768
+ - ALGORITHM_HPQT_SECP384R1_MLKEM1024
+ description: Supported key algorithms.
+ policy.AttributeRuleTypeEnum:
+ type: string
+ title: AttributeRuleTypeEnum
+ enum:
+ - ATTRIBUTE_RULE_TYPE_ENUM_UNSPECIFIED
+ - ATTRIBUTE_RULE_TYPE_ENUM_ALL_OF
+ - ATTRIBUTE_RULE_TYPE_ENUM_ANY_OF
+ - ATTRIBUTE_RULE_TYPE_ENUM_HIERARCHY
+ policy.ConditionBooleanTypeEnum:
+ type: string
+ title: ConditionBooleanTypeEnum
+ enum:
+ - CONDITION_BOOLEAN_TYPE_ENUM_UNSPECIFIED
+ - CONDITION_BOOLEAN_TYPE_ENUM_AND
+ - CONDITION_BOOLEAN_TYPE_ENUM_OR
+ policy.KasPublicKeyAlgEnum:
+ type: string
+ title: KasPublicKeyAlgEnum
+ enum:
+ - KAS_PUBLIC_KEY_ALG_ENUM_UNSPECIFIED
+ - KAS_PUBLIC_KEY_ALG_ENUM_RSA_2048
+ - KAS_PUBLIC_KEY_ALG_ENUM_RSA_4096
+ - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP256R1
+ - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP384R1
+ - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP521R1
+ - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_XWING
+ - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP256R1_MLKEM768
+ - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP384R1_MLKEM1024
+ policy.SortDirection:
+ type: string
+ title: SortDirection
+ enum:
+ - SORT_DIRECTION_UNSPECIFIED
+ - SORT_DIRECTION_ASC
+ - SORT_DIRECTION_DESC
+ description: |-
+ Sorting direction shared across list APIs.
+ When the 'sort' field is omitted or the chosen sort 'field' is UNSPECIFIED,
+ the endpoint's request message defines the default ordering; see the
+ specific List* request docs.
+ policy.SourceType:
+ type: string
+ title: SourceType
+ enum:
+ - SOURCE_TYPE_UNSPECIFIED
+ - SOURCE_TYPE_INTERNAL
+ - SOURCE_TYPE_EXTERNAL
+ description: |-
+ Describes whether this kas is managed by the organization or if they imported
+ the kas information from an external party. These two modes are necessary in order
+ to encrypt a tdf dek with an external parties kas public key.
+ policy.SubjectMappingOperatorEnum:
+ type: string
+ title: SubjectMappingOperatorEnum
+ enum:
+ - SUBJECT_MAPPING_OPERATOR_ENUM_UNSPECIFIED
+ - SUBJECT_MAPPING_OPERATOR_ENUM_IN
+ - SUBJECT_MAPPING_OPERATOR_ENUM_NOT_IN
+ - SUBJECT_MAPPING_OPERATOR_ENUM_IN_CONTAINS
+ policy.obligations.SortObligationsType:
+ type: string
+ title: SortObligationsType
+ enum:
+ - SORT_OBLIGATIONS_TYPE_UNSPECIFIED
+ - SORT_OBLIGATIONS_TYPE_NAME
+ - SORT_OBLIGATIONS_TYPE_FQN
+ - SORT_OBLIGATIONS_TYPE_CREATED_AT
+ - SORT_OBLIGATIONS_TYPE_UPDATED_AT
common.IdFqnIdentifier:
type: object
- allOf:
- - oneOf:
- - required:
- - id
- - required:
- - fqn
properties:
id:
type: string
@@ -551,12 +641,6 @@ components:
additionalProperties: false
common.IdNameIdentifier:
type: object
- allOf:
- - oneOf:
- - required:
- - id
- - required:
- - name
properties:
id:
type: string
@@ -567,8 +651,12 @@ components:
title: name
maxLength: 253
minLength: 1
- description: |
- name_format // Name must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored name will be normalized to lower case.
+ description: |+
+ Name must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored name will be normalized to lower case.:
+ ```
+ this.matches('^[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?$')
+ ```
+
title: IdNameIdentifier
additionalProperties: false
common.Metadata:
@@ -626,82 +714,6 @@ components:
title: value
title: LabelsEntry
additionalProperties: false
- common.MetadataUpdateEnum:
- type: string
- title: MetadataUpdateEnum
- enum:
- - METADATA_UPDATE_ENUM_UNSPECIFIED
- - METADATA_UPDATE_ENUM_EXTEND
- - METADATA_UPDATE_ENUM_REPLACE
- connect-protocol-version:
- type: number
- title: Connect-Protocol-Version
- enum:
- - 1
- description: Define the version of the Connect protocol
- const: 1
- connect-timeout-header:
- type: number
- title: Connect-Timeout-Ms
- description: Define the timeout, in ms
- connect.error:
- type: object
- properties:
- code:
- type: string
- examples:
- - not_found
- enum:
- - canceled
- - unknown
- - invalid_argument
- - deadline_exceeded
- - not_found
- - already_exists
- - permission_denied
- - resource_exhausted
- - failed_precondition
- - aborted
- - out_of_range
- - unimplemented
- - internal
- - unavailable
- - data_loss
- - unauthenticated
- description: The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
- message:
- type: string
- description: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
- details:
- type: array
- items:
- $ref: '#/components/schemas/connect.error_details.Any'
- description: A list of messages that carry the error details. There is no limit on the number of messages.
- title: Connect Error
- additionalProperties: true
- description: 'Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation'
- connect.error_details.Any:
- type: object
- properties:
- type:
- type: string
- description: 'A URL that acts as a globally unique identifier for the type of the serialized message. For example: `type.googleapis.com/google.rpc.ErrorInfo`. This is used to determine the schema of the data in the `value` field and is the discriminator for the `debug` field.'
- value:
- type: string
- format: binary
- description: The Protobuf message, serialized as bytes and base64-encoded. The specific message type is identified by the `type` field.
- debug:
- oneOf:
- - type: object
- title: Any
- additionalProperties: true
- description: Detailed error information.
- discriminator:
- propertyName: type
- title: Debug
- description: Deserialized error detail payload. The 'type' field indicates the schema. This field is for easier debugging and should not be relied upon for application logic.
- additionalProperties: true
- description: Contains an arbitrary serialized message along with a @type that describes the type of the serialized message, with an additional debug field for ConnectRPC error details.
google.protobuf.BoolValue:
type: boolean
description: |-
@@ -714,8 +726,8 @@ components:
google.protobuf.Timestamp:
type: string
examples:
- - "2023-01-15T01:30:15.01Z"
- - "2024-12-25T12:00:00Z"
+ - 1s
+ - 1.000340012s
format: date-time
description: |-
A Timestamp represents a point in time independent of any time zone or local
@@ -809,65 +821,41 @@ components:
) to obtain a formatter capable of generating timestamps in this format.
policy.Action:
type: object
- allOf:
+ oneOf:
- properties:
- id:
+ custom:
type: string
- title: id
- description: Generated uuid in database
- name:
- type: string
- title: name
- namespace:
- title: namespace
- description: Namespace context for this action
- $ref: '#/components/schemas/policy.Namespace'
- metadata:
- title: metadata
- $ref: '#/components/schemas/common.Metadata'
- - oneOf:
- - type: object
- properties:
- custom:
- type: string
- title: custom
- description: Deprecated
title: custom
- required:
- - custom
- - type: object
- properties:
- standard:
- title: standard
- description: Deprecated
- $ref: '#/components/schemas/policy.Action.StandardAction'
+ description: Deprecated
+ title: custom
+ required:
+ - custom
+ - properties:
+ standard:
title: standard
- required:
- - standard
+ description: Deprecated
+ $ref: '#/components/schemas/policy.Action.StandardAction'
+ title: standard
+ required:
+ - standard
+ properties:
+ id:
+ type: string
+ title: id
+ description: Generated uuid in database
+ name:
+ type: string
+ title: name
+ namespace:
+ title: namespace
+ description: Namespace context for this action
+ $ref: '#/components/schemas/policy.Namespace'
+ metadata:
+ title: metadata
+ $ref: '#/components/schemas/common.Metadata'
title: Action
additionalProperties: false
description: An action an entity can take
- policy.Action.StandardAction:
- type: string
- title: StandardAction
- enum:
- - STANDARD_ACTION_UNSPECIFIED
- - STANDARD_ACTION_DECRYPT
- - STANDARD_ACTION_TRANSMIT
- policy.Algorithm:
- type: string
- title: Algorithm
- enum:
- - ALGORITHM_UNSPECIFIED
- - ALGORITHM_RSA_2048
- - ALGORITHM_RSA_4096
- - ALGORITHM_EC_P256
- - ALGORITHM_EC_P384
- - ALGORITHM_EC_P521
- - ALGORITHM_HPQT_XWING
- - ALGORITHM_HPQT_SECP256R1_MLKEM768
- - ALGORITHM_HPQT_SECP384R1_MLKEM1024
- description: Supported key algorithms.
policy.Attribute:
type: object
properties:
@@ -924,14 +912,6 @@ components:
required:
- rule
additionalProperties: false
- policy.AttributeRuleTypeEnum:
- type: string
- title: AttributeRuleTypeEnum
- enum:
- - ATTRIBUTE_RULE_TYPE_ENUM_UNSPECIFIED
- - ATTRIBUTE_RULE_TYPE_ENUM_ALL_OF
- - ATTRIBUTE_RULE_TYPE_ENUM_ANY_OF
- - ATTRIBUTE_RULE_TYPE_ENUM_HIERARCHY
policy.Condition:
type: object
properties:
@@ -949,6 +929,7 @@ components:
type: array
items:
type: string
+ minItems: 1
title: subject_external_values
minItems: 1
description: |-
@@ -964,13 +945,6 @@ components:
*
A Condition defines a rule of
- policy.ConditionBooleanTypeEnum:
- type: string
- title: ConditionBooleanTypeEnum
- enum:
- - CONDITION_BOOLEAN_TYPE_ENUM_UNSPECIFIED
- - CONDITION_BOOLEAN_TYPE_ENUM_AND
- - CONDITION_BOOLEAN_TYPE_ENUM_OR
policy.ConditionGroup:
type: object
properties:
@@ -1007,7 +981,7 @@ components:
alg:
not:
enum:
- - KAS_PUBLIC_KEY_ALG_ENUM_UNSPECIFIED
+ - 0
title: alg
description: |-
A known algorithm type with any additional parameters encoded.
@@ -1019,19 +993,6 @@ components:
description: |-
Deprecated
A KAS public key and some associated metadata for further identifcation
- policy.KasPublicKeyAlgEnum:
- type: string
- title: KasPublicKeyAlgEnum
- enum:
- - KAS_PUBLIC_KEY_ALG_ENUM_UNSPECIFIED
- - KAS_PUBLIC_KEY_ALG_ENUM_RSA_2048
- - KAS_PUBLIC_KEY_ALG_ENUM_RSA_4096
- - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP256R1
- - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP384R1
- - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP521R1
- - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_XWING
- - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP256R1_MLKEM768
- - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP384R1_MLKEM1024
policy.KasPublicKeySet:
type: object
properties:
@@ -1054,9 +1015,13 @@ components:
uri:
type: string
title: uri
- description: |
+ description: |+
Address of a KAS instance
- uri_format // URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.
+ URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.:
+ ```
+ this.matches('^https?://[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?)*(:[0-9]+)?(/.*)?$')
+ ```
+
publicKey:
title: public_key
description: 'Deprecated: KAS can have multiple key pairs'
@@ -1254,8 +1219,7 @@ components:
policy.PublicKey:
type: object
oneOf:
- - type: object
- properties:
+ - properties:
cached:
title: cached
description: public key with additional information. Current preferred version
@@ -1263,14 +1227,17 @@ components:
title: cached
required:
- cached
- - type: object
- properties:
+ - properties:
remote:
type: string
title: remote
- description: |
+ description: |+
kas public key url - optional since can also be retrieved via public key
- uri_format // URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.
+ URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.:
+ ```
+ this.matches('^https://[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?)*(/.*)?$')
+ ```
+
title: remote
required:
- remote
@@ -1347,6 +1314,14 @@ components:
description: |-
Resource Mapping Groups are namespaced collections of Resource Mappings
associated under a common group name.
+ policy.Search:
+ type: object
+ properties:
+ term:
+ type: string
+ title: term
+ title: Search
+ additionalProperties: false
policy.SimpleKasKey:
type: object
properties:
@@ -1378,29 +1353,6 @@ components:
title: pem
title: SimpleKasPublicKey
additionalProperties: false
- policy.SortDirection:
- type: string
- title: SortDirection
- enum:
- - SORT_DIRECTION_UNSPECIFIED
- - SORT_DIRECTION_ASC
- - SORT_DIRECTION_DESC
- description: |-
- Sorting direction shared across list APIs.
- When the 'sort' field is omitted or the chosen sort 'field' is UNSPECIFIED,
- the endpoint's request message defines the default ordering; see the
- specific List* request docs.
- policy.SourceType:
- type: string
- title: SourceType
- enum:
- - SOURCE_TYPE_UNSPECIFIED
- - SOURCE_TYPE_INTERNAL
- - SOURCE_TYPE_EXTERNAL
- description: |-
- Describes whether this kas is managed by the organization or if they imported
- the kas information from an external party. These two modes are necessary in order
- to encrypt a tdf dek with an external parties kas public key.
policy.SubjectConditionSet:
type: object
properties:
@@ -1466,14 +1418,6 @@ components:
description: |-
Subject Mapping: A Policy assigning Subject Set(s) to a permitted attribute
value + action(s) combination
- policy.SubjectMappingOperatorEnum:
- type: string
- title: SubjectMappingOperatorEnum
- enum:
- - SUBJECT_MAPPING_OPERATOR_ENUM_UNSPECIFIED
- - SUBJECT_MAPPING_OPERATOR_ENUM_IN
- - SUBJECT_MAPPING_OPERATOR_ENUM_NOT_IN
- - SUBJECT_MAPPING_OPERATOR_ENUM_IN_CONTAINS
policy.SubjectSet:
type: object
properties:
@@ -1587,12 +1531,6 @@ components:
additionalProperties: false
policy.obligations.CreateObligationRequest:
type: object
- allOf:
- - oneOf:
- - required:
- - namespaceId
- - required:
- - namespaceFqn
properties:
namespaceId:
type: string
@@ -1607,14 +1545,19 @@ components:
type: string
title: name
maxLength: 253
- description: |
- obligation_name_format // Obligation name must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored name will be normalized to lower case.
+ description: |+
+ Obligation name must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored name will be normalized to lower case.:
+ ```
+ this.matches('^[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?$')
+ ```
+
values:
type: array
items:
type: string
maxLength: 253
pattern: ^[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?$
+ uniqueItems: true
title: values
uniqueItems: true
description: Optional
@@ -1638,12 +1581,6 @@ components:
additionalProperties: false
policy.obligations.CreateObligationValueRequest:
type: object
- allOf:
- - oneOf:
- - required:
- - obligationId
- - required:
- - obligationFqn
properties:
obligationId:
type: string
@@ -1658,8 +1595,12 @@ components:
type: string
title: value
maxLength: 253
- description: |
- obligation_value_format // Obligation value must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored value will be normalized to lower case.
+ description: |+
+ Obligation value must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored value will be normalized to lower case.:
+ ```
+ this.matches('^[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?$')
+ ```
+
triggers:
type: array
items:
@@ -1688,12 +1629,6 @@ components:
additionalProperties: false
policy.obligations.DeleteObligationRequest:
type: object
- allOf:
- - oneOf:
- - required:
- - id
- - required:
- - fqn
properties:
id:
type: string
@@ -1716,12 +1651,6 @@ components:
additionalProperties: false
policy.obligations.DeleteObligationValueRequest:
type: object
- allOf:
- - oneOf:
- - required:
- - id
- - required:
- - fqn
properties:
id:
type: string
@@ -1744,12 +1673,6 @@ components:
additionalProperties: false
policy.obligations.GetObligationRequest:
type: object
- allOf:
- - oneOf:
- - required:
- - id
- - required:
- - fqn
properties:
id:
type: string
@@ -1791,12 +1714,6 @@ components:
additionalProperties: false
policy.obligations.GetObligationValueRequest:
type: object
- allOf:
- - oneOf:
- - required:
- - id
- - required:
- - fqn
properties:
id:
type: string
@@ -1827,6 +1744,9 @@ components:
type: string
minLength: 1
format: uri
+ maxItems: 250
+ minItems: 1
+ uniqueItems: true
title: fqns
maxItems: 250
minItems: 1
@@ -1864,6 +1784,9 @@ components:
type: string
minLength: 1
format: uri
+ maxItems: 250
+ minItems: 1
+ uniqueItems: true
title: fqns
maxItems: 250
minItems: 1
@@ -1908,6 +1831,10 @@ components:
title: pagination
description: Optional
$ref: '#/components/schemas/policy.PageRequest'
+ search:
+ title: search
+ description: Optional
+ $ref: '#/components/schemas/policy.Search'
title: ListObligationTriggersRequest
additionalProperties: false
policy.obligations.ListObligationTriggersResponse:
@@ -1951,6 +1878,10 @@ components:
- direction UNSPECIFIED defaults to DESC for the specified field
- field UNSPECIFIED defaults to created_at with the specified direction
- both UNSPECIFIED or sort omitted defaults to created_at DESC
+ search:
+ title: search
+ description: Optional
+ $ref: '#/components/schemas/policy.Search'
title: ListObligationsRequest
additionalProperties: false
policy.obligations.ListObligationsResponse:
@@ -1995,15 +1926,6 @@ components:
$ref: '#/components/schemas/policy.ObligationTrigger'
title: RemoveObligationTriggerResponse
additionalProperties: false
- policy.obligations.SortObligationsType:
- type: string
- title: SortObligationsType
- enum:
- - SORT_OBLIGATIONS_TYPE_UNSPECIFIED
- - SORT_OBLIGATIONS_TYPE_NAME
- - SORT_OBLIGATIONS_TYPE_FQN
- - SORT_OBLIGATIONS_TYPE_CREATED_AT
- - SORT_OBLIGATIONS_TYPE_UPDATED_AT
policy.obligations.UpdateObligationRequest:
type: object
properties:
@@ -2016,9 +1938,13 @@ components:
type: string
title: name
maxLength: 253
- description: |
+ description: |+
Optional
- obligation_name_format // Obligation name must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored name will be normalized to lower case.
+ Obligation name must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored name will be normalized to lower case.:
+ ```
+ size(this) > 0 ? this.matches('^[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?$') : true
+ ```
+
metadata:
title: metadata
$ref: '#/components/schemas/common.MetadataMutable'
@@ -2047,9 +1973,13 @@ components:
type: string
title: value
maxLength: 253
- description: |
+ description: |+
Optional
- obligation_value_format // Obligation value must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored value will be normalized to lower case.
+ Obligation value must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored value will be normalized to lower case.:
+ ```
+ size(this) > 0 ? this.matches('^[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?$') : true
+ ```
+
triggers:
type: array
items:
@@ -2097,6 +2027,63 @@ components:
- action
- attributeValue
additionalProperties: false
+ connect-protocol-version:
+ type: number
+ title: Connect-Protocol-Version
+ enum:
+ - 1
+ description: Define the version of the Connect protocol
+ const: 1
+ connect-timeout-header:
+ type: number
+ title: Connect-Timeout-Ms
+ description: Define the timeout, in ms
+ connect.error:
+ type: object
+ properties:
+ code:
+ type: string
+ examples:
+ - not_found
+ enum:
+ - canceled
+ - unknown
+ - invalid_argument
+ - deadline_exceeded
+ - not_found
+ - already_exists
+ - permission_denied
+ - resource_exhausted
+ - failed_precondition
+ - aborted
+ - out_of_range
+ - unimplemented
+ - internal
+ - unavailable
+ - data_loss
+ - unauthenticated
+ description: The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
+ message:
+ type: string
+ description: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
+ detail:
+ $ref: '#/components/schemas/google.protobuf.Any'
+ title: Connect Error
+ additionalProperties: true
+ description: 'Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation'
+ google.protobuf.Any:
+ type: object
+ properties:
+ type:
+ type: string
+ value:
+ type: string
+ format: binary
+ debug:
+ type: object
+ additionalProperties: true
+ additionalProperties: true
+ description: Contains an arbitrary serialized message along with a @type that describes the type of the serialized message.
security: []
tags:
- name: policy.obligations.Service
diff --git a/docs/openapi/policy/registeredresources/registered_resources.openapi.yaml b/docs/openapi/policy/registeredresources/registered_resources.openapi.yaml
index c22280f626..8613e5f855 100644
--- a/docs/openapi/policy/registeredresources/registered_resources.openapi.yaml
+++ b/docs/openapi/policy/registeredresources/registered_resources.openapi.yaml
@@ -37,12 +37,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/policy.registeredresources.CreateRegisteredResourceResponse'
- /policy.registeredresources.RegisteredResourcesService/CreateRegisteredResourceValue:
+ /policy.registeredresources.RegisteredResourcesService/GetRegisteredResource:
post:
tags:
- policy.registeredresources.RegisteredResourcesService
- summary: CreateRegisteredResourceValue
- operationId: policy.registeredresources.RegisteredResourcesService.CreateRegisteredResourceValue
+ summary: GetRegisteredResource
+ operationId: policy.registeredresources.RegisteredResourcesService.GetRegisteredResource
parameters:
- name: Connect-Protocol-Version
in: header
@@ -57,7 +57,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.registeredresources.CreateRegisteredResourceValueRequest'
+ $ref: '#/components/schemas/policy.registeredresources.GetRegisteredResourceRequest'
required: true
responses:
default:
@@ -71,13 +71,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.registeredresources.CreateRegisteredResourceValueResponse'
- /policy.registeredresources.RegisteredResourcesService/DeleteRegisteredResource:
+ $ref: '#/components/schemas/policy.registeredresources.GetRegisteredResourceResponse'
+ /policy.registeredresources.RegisteredResourcesService/ListRegisteredResources:
post:
tags:
- policy.registeredresources.RegisteredResourcesService
- summary: DeleteRegisteredResource
- operationId: policy.registeredresources.RegisteredResourcesService.DeleteRegisteredResource
+ summary: ListRegisteredResources
+ operationId: policy.registeredresources.RegisteredResourcesService.ListRegisteredResources
parameters:
- name: Connect-Protocol-Version
in: header
@@ -92,7 +92,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.registeredresources.DeleteRegisteredResourceRequest'
+ $ref: '#/components/schemas/policy.registeredresources.ListRegisteredResourcesRequest'
required: true
responses:
default:
@@ -106,13 +106,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.registeredresources.DeleteRegisteredResourceResponse'
- /policy.registeredresources.RegisteredResourcesService/DeleteRegisteredResourceValue:
+ $ref: '#/components/schemas/policy.registeredresources.ListRegisteredResourcesResponse'
+ /policy.registeredresources.RegisteredResourcesService/UpdateRegisteredResource:
post:
tags:
- policy.registeredresources.RegisteredResourcesService
- summary: DeleteRegisteredResourceValue
- operationId: policy.registeredresources.RegisteredResourcesService.DeleteRegisteredResourceValue
+ summary: UpdateRegisteredResource
+ operationId: policy.registeredresources.RegisteredResourcesService.UpdateRegisteredResource
parameters:
- name: Connect-Protocol-Version
in: header
@@ -127,7 +127,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.registeredresources.DeleteRegisteredResourceValueRequest'
+ $ref: '#/components/schemas/policy.registeredresources.UpdateRegisteredResourceRequest'
required: true
responses:
default:
@@ -141,13 +141,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.registeredresources.DeleteRegisteredResourceValueResponse'
- /policy.registeredresources.RegisteredResourcesService/GetRegisteredResource:
+ $ref: '#/components/schemas/policy.registeredresources.UpdateRegisteredResourceResponse'
+ /policy.registeredresources.RegisteredResourcesService/DeleteRegisteredResource:
post:
tags:
- policy.registeredresources.RegisteredResourcesService
- summary: GetRegisteredResource
- operationId: policy.registeredresources.RegisteredResourcesService.GetRegisteredResource
+ summary: DeleteRegisteredResource
+ operationId: policy.registeredresources.RegisteredResourcesService.DeleteRegisteredResource
parameters:
- name: Connect-Protocol-Version
in: header
@@ -162,7 +162,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.registeredresources.GetRegisteredResourceRequest'
+ $ref: '#/components/schemas/policy.registeredresources.DeleteRegisteredResourceRequest'
required: true
responses:
default:
@@ -176,13 +176,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.registeredresources.GetRegisteredResourceResponse'
- /policy.registeredresources.RegisteredResourcesService/GetRegisteredResourceValue:
+ $ref: '#/components/schemas/policy.registeredresources.DeleteRegisteredResourceResponse'
+ /policy.registeredresources.RegisteredResourcesService/CreateRegisteredResourceValue:
post:
tags:
- policy.registeredresources.RegisteredResourcesService
- summary: GetRegisteredResourceValue
- operationId: policy.registeredresources.RegisteredResourcesService.GetRegisteredResourceValue
+ summary: CreateRegisteredResourceValue
+ operationId: policy.registeredresources.RegisteredResourcesService.CreateRegisteredResourceValue
parameters:
- name: Connect-Protocol-Version
in: header
@@ -197,7 +197,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.registeredresources.GetRegisteredResourceValueRequest'
+ $ref: '#/components/schemas/policy.registeredresources.CreateRegisteredResourceValueRequest'
required: true
responses:
default:
@@ -211,13 +211,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.registeredresources.GetRegisteredResourceValueResponse'
- /policy.registeredresources.RegisteredResourcesService/GetRegisteredResourceValuesByFQNs:
+ $ref: '#/components/schemas/policy.registeredresources.CreateRegisteredResourceValueResponse'
+ /policy.registeredresources.RegisteredResourcesService/GetRegisteredResourceValue:
post:
tags:
- policy.registeredresources.RegisteredResourcesService
- summary: GetRegisteredResourceValuesByFQNs
- operationId: policy.registeredresources.RegisteredResourcesService.GetRegisteredResourceValuesByFQNs
+ summary: GetRegisteredResourceValue
+ operationId: policy.registeredresources.RegisteredResourcesService.GetRegisteredResourceValue
parameters:
- name: Connect-Protocol-Version
in: header
@@ -232,7 +232,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.registeredresources.GetRegisteredResourceValuesByFQNsRequest'
+ $ref: '#/components/schemas/policy.registeredresources.GetRegisteredResourceValueRequest'
required: true
responses:
default:
@@ -246,13 +246,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.registeredresources.GetRegisteredResourceValuesByFQNsResponse'
- /policy.registeredresources.RegisteredResourcesService/ListRegisteredResourceValues:
+ $ref: '#/components/schemas/policy.registeredresources.GetRegisteredResourceValueResponse'
+ /policy.registeredresources.RegisteredResourcesService/GetRegisteredResourceValuesByFQNs:
post:
tags:
- policy.registeredresources.RegisteredResourcesService
- summary: ListRegisteredResourceValues
- operationId: policy.registeredresources.RegisteredResourcesService.ListRegisteredResourceValues
+ summary: GetRegisteredResourceValuesByFQNs
+ operationId: policy.registeredresources.RegisteredResourcesService.GetRegisteredResourceValuesByFQNs
parameters:
- name: Connect-Protocol-Version
in: header
@@ -267,7 +267,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.registeredresources.ListRegisteredResourceValuesRequest'
+ $ref: '#/components/schemas/policy.registeredresources.GetRegisteredResourceValuesByFQNsRequest'
required: true
responses:
default:
@@ -281,13 +281,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.registeredresources.ListRegisteredResourceValuesResponse'
- /policy.registeredresources.RegisteredResourcesService/ListRegisteredResources:
+ $ref: '#/components/schemas/policy.registeredresources.GetRegisteredResourceValuesByFQNsResponse'
+ /policy.registeredresources.RegisteredResourcesService/ListRegisteredResourceValues:
post:
tags:
- policy.registeredresources.RegisteredResourcesService
- summary: ListRegisteredResources
- operationId: policy.registeredresources.RegisteredResourcesService.ListRegisteredResources
+ summary: ListRegisteredResourceValues
+ operationId: policy.registeredresources.RegisteredResourcesService.ListRegisteredResourceValues
parameters:
- name: Connect-Protocol-Version
in: header
@@ -302,7 +302,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.registeredresources.ListRegisteredResourcesRequest'
+ $ref: '#/components/schemas/policy.registeredresources.ListRegisteredResourceValuesRequest'
required: true
responses:
default:
@@ -316,13 +316,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.registeredresources.ListRegisteredResourcesResponse'
- /policy.registeredresources.RegisteredResourcesService/UpdateRegisteredResource:
+ $ref: '#/components/schemas/policy.registeredresources.ListRegisteredResourceValuesResponse'
+ /policy.registeredresources.RegisteredResourcesService/UpdateRegisteredResourceValue:
post:
tags:
- policy.registeredresources.RegisteredResourcesService
- summary: UpdateRegisteredResource
- operationId: policy.registeredresources.RegisteredResourcesService.UpdateRegisteredResource
+ summary: UpdateRegisteredResourceValue
+ operationId: policy.registeredresources.RegisteredResourcesService.UpdateRegisteredResourceValue
parameters:
- name: Connect-Protocol-Version
in: header
@@ -337,7 +337,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.registeredresources.UpdateRegisteredResourceRequest'
+ $ref: '#/components/schemas/policy.registeredresources.UpdateRegisteredResourceValueRequest'
required: true
responses:
default:
@@ -351,13 +351,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.registeredresources.UpdateRegisteredResourceResponse'
- /policy.registeredresources.RegisteredResourcesService/UpdateRegisteredResourceValue:
+ $ref: '#/components/schemas/policy.registeredresources.UpdateRegisteredResourceValueResponse'
+ /policy.registeredresources.RegisteredResourcesService/DeleteRegisteredResourceValue:
post:
tags:
- policy.registeredresources.RegisteredResourcesService
- summary: UpdateRegisteredResourceValue
- operationId: policy.registeredresources.RegisteredResourcesService.UpdateRegisteredResourceValue
+ summary: DeleteRegisteredResourceValue
+ operationId: policy.registeredresources.RegisteredResourcesService.DeleteRegisteredResourceValue
parameters:
- name: Connect-Protocol-Version
in: header
@@ -372,7 +372,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.registeredresources.UpdateRegisteredResourceValueRequest'
+ $ref: '#/components/schemas/policy.registeredresources.DeleteRegisteredResourceValueRequest'
required: true
responses:
default:
@@ -386,9 +386,104 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.registeredresources.UpdateRegisteredResourceValueResponse'
+ $ref: '#/components/schemas/policy.registeredresources.DeleteRegisteredResourceValueResponse'
components:
schemas:
+ common.MetadataUpdateEnum:
+ type: string
+ title: MetadataUpdateEnum
+ enum:
+ - METADATA_UPDATE_ENUM_UNSPECIFIED
+ - METADATA_UPDATE_ENUM_EXTEND
+ - METADATA_UPDATE_ENUM_REPLACE
+ policy.Action.StandardAction:
+ type: string
+ title: StandardAction
+ enum:
+ - STANDARD_ACTION_UNSPECIFIED
+ - STANDARD_ACTION_DECRYPT
+ - STANDARD_ACTION_TRANSMIT
+ policy.Algorithm:
+ type: string
+ title: Algorithm
+ enum:
+ - ALGORITHM_UNSPECIFIED
+ - ALGORITHM_RSA_2048
+ - ALGORITHM_RSA_4096
+ - ALGORITHM_EC_P256
+ - ALGORITHM_EC_P384
+ - ALGORITHM_EC_P521
+ - ALGORITHM_HPQT_XWING
+ - ALGORITHM_HPQT_SECP256R1_MLKEM768
+ - ALGORITHM_HPQT_SECP384R1_MLKEM1024
+ description: Supported key algorithms.
+ policy.AttributeRuleTypeEnum:
+ type: string
+ title: AttributeRuleTypeEnum
+ enum:
+ - ATTRIBUTE_RULE_TYPE_ENUM_UNSPECIFIED
+ - ATTRIBUTE_RULE_TYPE_ENUM_ALL_OF
+ - ATTRIBUTE_RULE_TYPE_ENUM_ANY_OF
+ - ATTRIBUTE_RULE_TYPE_ENUM_HIERARCHY
+ policy.ConditionBooleanTypeEnum:
+ type: string
+ title: ConditionBooleanTypeEnum
+ enum:
+ - CONDITION_BOOLEAN_TYPE_ENUM_UNSPECIFIED
+ - CONDITION_BOOLEAN_TYPE_ENUM_AND
+ - CONDITION_BOOLEAN_TYPE_ENUM_OR
+ policy.KasPublicKeyAlgEnum:
+ type: string
+ title: KasPublicKeyAlgEnum
+ enum:
+ - KAS_PUBLIC_KEY_ALG_ENUM_UNSPECIFIED
+ - KAS_PUBLIC_KEY_ALG_ENUM_RSA_2048
+ - KAS_PUBLIC_KEY_ALG_ENUM_RSA_4096
+ - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP256R1
+ - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP384R1
+ - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP521R1
+ - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_XWING
+ - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP256R1_MLKEM768
+ - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP384R1_MLKEM1024
+ policy.SortDirection:
+ type: string
+ title: SortDirection
+ enum:
+ - SORT_DIRECTION_UNSPECIFIED
+ - SORT_DIRECTION_ASC
+ - SORT_DIRECTION_DESC
+ description: |-
+ Sorting direction shared across list APIs.
+ When the 'sort' field is omitted or the chosen sort 'field' is UNSPECIFIED,
+ the endpoint's request message defines the default ordering; see the
+ specific List* request docs.
+ policy.SourceType:
+ type: string
+ title: SourceType
+ enum:
+ - SOURCE_TYPE_UNSPECIFIED
+ - SOURCE_TYPE_INTERNAL
+ - SOURCE_TYPE_EXTERNAL
+ description: |-
+ Describes whether this kas is managed by the organization or if they imported
+ the kas information from an external party. These two modes are necessary in order
+ to encrypt a tdf dek with an external parties kas public key.
+ policy.SubjectMappingOperatorEnum:
+ type: string
+ title: SubjectMappingOperatorEnum
+ enum:
+ - SUBJECT_MAPPING_OPERATOR_ENUM_UNSPECIFIED
+ - SUBJECT_MAPPING_OPERATOR_ENUM_IN
+ - SUBJECT_MAPPING_OPERATOR_ENUM_NOT_IN
+ - SUBJECT_MAPPING_OPERATOR_ENUM_IN_CONTAINS
+ policy.registeredresources.SortRegisteredResourcesType:
+ type: string
+ title: SortRegisteredResourcesType
+ enum:
+ - SORT_REGISTERED_RESOURCES_TYPE_UNSPECIFIED
+ - SORT_REGISTERED_RESOURCES_TYPE_NAME
+ - SORT_REGISTERED_RESOURCES_TYPE_CREATED_AT
+ - SORT_REGISTERED_RESOURCES_TYPE_UPDATED_AT
common.Metadata:
type: object
properties:
@@ -444,82 +539,6 @@ components:
title: value
title: LabelsEntry
additionalProperties: false
- common.MetadataUpdateEnum:
- type: string
- title: MetadataUpdateEnum
- enum:
- - METADATA_UPDATE_ENUM_UNSPECIFIED
- - METADATA_UPDATE_ENUM_EXTEND
- - METADATA_UPDATE_ENUM_REPLACE
- connect-protocol-version:
- type: number
- title: Connect-Protocol-Version
- enum:
- - 1
- description: Define the version of the Connect protocol
- const: 1
- connect-timeout-header:
- type: number
- title: Connect-Timeout-Ms
- description: Define the timeout, in ms
- connect.error:
- type: object
- properties:
- code:
- type: string
- examples:
- - not_found
- enum:
- - canceled
- - unknown
- - invalid_argument
- - deadline_exceeded
- - not_found
- - already_exists
- - permission_denied
- - resource_exhausted
- - failed_precondition
- - aborted
- - out_of_range
- - unimplemented
- - internal
- - unavailable
- - data_loss
- - unauthenticated
- description: The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
- message:
- type: string
- description: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
- details:
- type: array
- items:
- $ref: '#/components/schemas/connect.error_details.Any'
- description: A list of messages that carry the error details. There is no limit on the number of messages.
- title: Connect Error
- additionalProperties: true
- description: 'Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation'
- connect.error_details.Any:
- type: object
- properties:
- type:
- type: string
- description: 'A URL that acts as a globally unique identifier for the type of the serialized message. For example: `type.googleapis.com/google.rpc.ErrorInfo`. This is used to determine the schema of the data in the `value` field and is the discriminator for the `debug` field.'
- value:
- type: string
- format: binary
- description: The Protobuf message, serialized as bytes and base64-encoded. The specific message type is identified by the `type` field.
- debug:
- oneOf:
- - type: object
- title: Any
- additionalProperties: true
- description: Detailed error information.
- discriminator:
- propertyName: type
- title: Debug
- description: Deserialized error detail payload. The 'type' field indicates the schema. This field is for easier debugging and should not be relied upon for application logic.
- additionalProperties: true
- description: Contains an arbitrary serialized message along with a @type that describes the type of the serialized message, with an additional debug field for ConnectRPC error details.
google.protobuf.BoolValue:
type: boolean
description: |-
@@ -532,8 +551,8 @@ components:
google.protobuf.Timestamp:
type: string
examples:
- - "2023-01-15T01:30:15.01Z"
- - "2024-12-25T12:00:00Z"
+ - 1s
+ - 1.000340012s
format: date-time
description: |-
A Timestamp represents a point in time independent of any time zone or local
@@ -627,65 +646,41 @@ components:
) to obtain a formatter capable of generating timestamps in this format.
policy.Action:
type: object
- allOf:
+ oneOf:
- properties:
- id:
+ custom:
type: string
- title: id
- description: Generated uuid in database
- name:
- type: string
- title: name
- namespace:
- title: namespace
- description: Namespace context for this action
- $ref: '#/components/schemas/policy.Namespace'
- metadata:
- title: metadata
- $ref: '#/components/schemas/common.Metadata'
- - oneOf:
- - type: object
- properties:
- custom:
- type: string
- title: custom
- description: Deprecated
title: custom
- required:
- - custom
- - type: object
- properties:
- standard:
- title: standard
- description: Deprecated
- $ref: '#/components/schemas/policy.Action.StandardAction'
+ description: Deprecated
+ title: custom
+ required:
+ - custom
+ - properties:
+ standard:
title: standard
- required:
- - standard
+ description: Deprecated
+ $ref: '#/components/schemas/policy.Action.StandardAction'
+ title: standard
+ required:
+ - standard
+ properties:
+ id:
+ type: string
+ title: id
+ description: Generated uuid in database
+ name:
+ type: string
+ title: name
+ namespace:
+ title: namespace
+ description: Namespace context for this action
+ $ref: '#/components/schemas/policy.Namespace'
+ metadata:
+ title: metadata
+ $ref: '#/components/schemas/common.Metadata'
title: Action
additionalProperties: false
description: An action an entity can take
- policy.Action.StandardAction:
- type: string
- title: StandardAction
- enum:
- - STANDARD_ACTION_UNSPECIFIED
- - STANDARD_ACTION_DECRYPT
- - STANDARD_ACTION_TRANSMIT
- policy.Algorithm:
- type: string
- title: Algorithm
- enum:
- - ALGORITHM_UNSPECIFIED
- - ALGORITHM_RSA_2048
- - ALGORITHM_RSA_4096
- - ALGORITHM_EC_P256
- - ALGORITHM_EC_P384
- - ALGORITHM_EC_P521
- - ALGORITHM_HPQT_XWING
- - ALGORITHM_HPQT_SECP256R1_MLKEM768
- - ALGORITHM_HPQT_SECP384R1_MLKEM1024
- description: Supported key algorithms.
policy.Attribute:
type: object
properties:
@@ -742,14 +737,6 @@ components:
required:
- rule
additionalProperties: false
- policy.AttributeRuleTypeEnum:
- type: string
- title: AttributeRuleTypeEnum
- enum:
- - ATTRIBUTE_RULE_TYPE_ENUM_UNSPECIFIED
- - ATTRIBUTE_RULE_TYPE_ENUM_ALL_OF
- - ATTRIBUTE_RULE_TYPE_ENUM_ANY_OF
- - ATTRIBUTE_RULE_TYPE_ENUM_HIERARCHY
policy.Condition:
type: object
properties:
@@ -767,6 +754,7 @@ components:
type: array
items:
type: string
+ minItems: 1
title: subject_external_values
minItems: 1
description: |-
@@ -782,13 +770,6 @@ components:
*
A Condition defines a rule of
- policy.ConditionBooleanTypeEnum:
- type: string
- title: ConditionBooleanTypeEnum
- enum:
- - CONDITION_BOOLEAN_TYPE_ENUM_UNSPECIFIED
- - CONDITION_BOOLEAN_TYPE_ENUM_AND
- - CONDITION_BOOLEAN_TYPE_ENUM_OR
policy.ConditionGroup:
type: object
properties:
@@ -825,7 +806,7 @@ components:
alg:
not:
enum:
- - KAS_PUBLIC_KEY_ALG_ENUM_UNSPECIFIED
+ - 0
title: alg
description: |-
A known algorithm type with any additional parameters encoded.
@@ -837,19 +818,6 @@ components:
description: |-
Deprecated
A KAS public key and some associated metadata for further identifcation
- policy.KasPublicKeyAlgEnum:
- type: string
- title: KasPublicKeyAlgEnum
- enum:
- - KAS_PUBLIC_KEY_ALG_ENUM_UNSPECIFIED
- - KAS_PUBLIC_KEY_ALG_ENUM_RSA_2048
- - KAS_PUBLIC_KEY_ALG_ENUM_RSA_4096
- - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP256R1
- - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP384R1
- - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP521R1
- - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_XWING
- - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP256R1_MLKEM768
- - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP384R1_MLKEM1024
policy.KasPublicKeySet:
type: object
properties:
@@ -872,9 +840,13 @@ components:
uri:
type: string
title: uri
- description: |
+ description: |+
Address of a KAS instance
- uri_format // URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.
+ URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.:
+ ```
+ this.matches('^https?://[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?)*(:[0-9]+)?(/.*)?$')
+ ```
+
publicKey:
title: public_key
description: 'Deprecated: KAS can have multiple key pairs'
@@ -1072,8 +1044,7 @@ components:
policy.PublicKey:
type: object
oneOf:
- - type: object
- properties:
+ - properties:
cached:
title: cached
description: public key with additional information. Current preferred version
@@ -1081,14 +1052,17 @@ components:
title: cached
required:
- cached
- - type: object
- properties:
+ - properties:
remote:
type: string
title: remote
- description: |
+ description: |+
kas public key url - optional since can also be retrieved via public key
- uri_format // URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.
+ URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.:
+ ```
+ this.matches('^https://[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?)*(/.*)?$')
+ ```
+
title: remote
required:
- remote
@@ -1232,6 +1206,14 @@ components:
description: |-
Resource Mapping Groups are namespaced collections of Resource Mappings
associated under a common group name.
+ policy.Search:
+ type: object
+ properties:
+ term:
+ type: string
+ title: term
+ title: Search
+ additionalProperties: false
policy.SimpleKasKey:
type: object
properties:
@@ -1263,29 +1245,6 @@ components:
title: pem
title: SimpleKasPublicKey
additionalProperties: false
- policy.SortDirection:
- type: string
- title: SortDirection
- enum:
- - SORT_DIRECTION_UNSPECIFIED
- - SORT_DIRECTION_ASC
- - SORT_DIRECTION_DESC
- description: |-
- Sorting direction shared across list APIs.
- When the 'sort' field is omitted or the chosen sort 'field' is UNSPECIFIED,
- the endpoint's request message defines the default ordering; see the
- specific List* request docs.
- policy.SourceType:
- type: string
- title: SourceType
- enum:
- - SOURCE_TYPE_UNSPECIFIED
- - SOURCE_TYPE_INTERNAL
- - SOURCE_TYPE_EXTERNAL
- description: |-
- Describes whether this kas is managed by the organization or if they imported
- the kas information from an external party. These two modes are necessary in order
- to encrypt a tdf dek with an external parties kas public key.
policy.SubjectConditionSet:
type: object
properties:
@@ -1351,14 +1310,6 @@ components:
description: |-
Subject Mapping: A Policy assigning Subject Set(s) to a permitted attribute
value + action(s) combination
- policy.SubjectMappingOperatorEnum:
- type: string
- title: SubjectMappingOperatorEnum
- enum:
- - SUBJECT_MAPPING_OPERATOR_ENUM_UNSPECIFIED
- - SUBJECT_MAPPING_OPERATOR_ENUM_IN
- - SUBJECT_MAPPING_OPERATOR_ENUM_NOT_IN
- - SUBJECT_MAPPING_OPERATOR_ENUM_IN_CONTAINS
policy.SubjectSet:
type: object
properties:
@@ -1429,8 +1380,7 @@ components:
type: object
allOf:
- oneOf:
- - type: object
- properties:
+ - properties:
actionId:
type: string
title: action_id
@@ -1438,20 +1388,22 @@ components:
title: action_id
required:
- actionId
- - type: object
- properties:
+ - properties:
actionName:
type: string
title: action_name
maxLength: 253
- description: |
- action_name_format // Action name must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored action name will be normalized to lower case.
+ description: |+
+ Action name must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored action name will be normalized to lower case.:
+ ```
+ this.matches('^[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?$')
+ ```
+
title: action_name
required:
- actionName
- oneOf:
- - type: object
- properties:
+ - properties:
attributeValueFqn:
type: string
title: attribute_value_fqn
@@ -1460,8 +1412,7 @@ components:
title: attribute_value_fqn
required:
- attributeValueFqn
- - type: object
- properties:
+ - properties:
attributeValueId:
type: string
title: attribute_value_id
@@ -1478,15 +1429,20 @@ components:
type: string
title: name
maxLength: 253
- description: |
+ description: |+
Required
- rr_name_format // Registered Resource Name must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored name will be normalized to lower case.
+ Registered Resource Name must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored name will be normalized to lower case.:
+ ```
+ this.matches('^[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?$')
+ ```
+
values:
type: array
items:
type: string
maxLength: 253
pattern: ^[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?$
+ uniqueItems: true
title: values
uniqueItems: true
description: |-
@@ -1532,9 +1488,13 @@ components:
type: string
title: value
maxLength: 253
- description: |
+ description: |+
Required
- rr_value_format // Registered Resource Value must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored value will be normalized to lower case.
+ Registered Resource Value must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored value will be normalized to lower case.:
+ ```
+ this.matches('^[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?$')
+ ```
+
actionAttributeValues:
type: array
items:
@@ -1600,38 +1560,39 @@ components:
additionalProperties: false
policy.registeredresources.GetRegisteredResourceRequest:
type: object
- allOf:
+ oneOf:
- properties:
- namespaceFqn:
- type: string
- title: namespace_fqn
- minLength: 1
- format: uri
- namespaceId:
+ id:
type: string
- title: namespace_id
- format: uuid
- - oneOf:
- - type: object
- properties:
- id:
- type: string
- title: id
- format: uuid
title: id
- required:
- - id
- - type: object
- properties:
- name:
- type: string
- title: name
- maxLength: 253
- description: |
- rr_name_format // Registered Resource Name must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored name will be normalized to lower case.
+ format: uuid
+ title: id
+ required:
+ - id
+ - properties:
+ name:
+ type: string
title: name
- required:
- - name
+ maxLength: 253
+ description: |+
+ Registered Resource Name must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored name will be normalized to lower case.:
+ ```
+ size(this) > 0 ? this.matches('^[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?$') : true
+ ```
+
+ title: name
+ required:
+ - name
+ properties:
+ namespaceFqn:
+ type: string
+ title: namespace_fqn
+ minLength: 1
+ format: uri
+ namespaceId:
+ type: string
+ title: namespace_id
+ format: uuid
title: GetRegisteredResourceRequest
additionalProperties: false
policy.registeredresources.GetRegisteredResourceResponse:
@@ -1645,8 +1606,7 @@ components:
policy.registeredresources.GetRegisteredResourceValueRequest:
type: object
oneOf:
- - type: object
- properties:
+ - properties:
fqn:
type: string
title: fqn
@@ -1655,8 +1615,7 @@ components:
title: fqn
required:
- fqn
- - type: object
- properties:
+ - properties:
id:
type: string
title: id
@@ -1683,6 +1642,8 @@ components:
type: string
minLength: 1
format: uri
+ minItems: 1
+ uniqueItems: true
title: fqns
minItems: 1
uniqueItems: true
@@ -1717,13 +1678,21 @@ components:
resourceId:
type: string
title: resource_id
- description: |
+ description: |+
Optional
- optional_uuid_format // Optional field must be a valid UUID
+ Optional field must be a valid UUID:
+ ```
+ size(this) == 0 || this.matches('[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}')
+ ```
+
pagination:
title: pagination
description: Optional
$ref: '#/components/schemas/policy.PageRequest'
+ search:
+ title: search
+ description: Optional
+ $ref: '#/components/schemas/policy.Search'
title: ListRegisteredResourceValuesRequest
additionalProperties: false
policy.registeredresources.ListRegisteredResourceValuesResponse:
@@ -1767,6 +1736,10 @@ components:
- direction UNSPECIFIED defaults to DESC for the specified field
- field UNSPECIFIED defaults to created_at with the specified direction
- both UNSPECIFIED or sort omitted defaults to created_at DESC
+ search:
+ title: search
+ description: Optional
+ $ref: '#/components/schemas/policy.Search'
title: ListRegisteredResourcesRequest
additionalProperties: false
policy.registeredresources.ListRegisteredResourcesResponse:
@@ -1793,14 +1766,6 @@ components:
$ref: '#/components/schemas/policy.SortDirection'
title: RegisteredResourcesSort
additionalProperties: false
- policy.registeredresources.SortRegisteredResourcesType:
- type: string
- title: SortRegisteredResourcesType
- enum:
- - SORT_REGISTERED_RESOURCES_TYPE_UNSPECIFIED
- - SORT_REGISTERED_RESOURCES_TYPE_NAME
- - SORT_REGISTERED_RESOURCES_TYPE_CREATED_AT
- - SORT_REGISTERED_RESOURCES_TYPE_UPDATED_AT
policy.registeredresources.UpdateRegisteredResourceRequest:
type: object
properties:
@@ -1813,9 +1778,13 @@ components:
type: string
title: name
maxLength: 253
- description: |
+ description: |+
Optional
- rr_name_format // Registered Resource Name must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored name will be normalized to lower case.
+ Registered Resource Name must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored name will be normalized to lower case.:
+ ```
+ size(this) > 0 ? this.matches('^[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?$') : true
+ ```
+
metadata:
title: metadata
description: |-
@@ -1847,9 +1816,13 @@ components:
type: string
title: value
maxLength: 253
- description: |
+ description: |+
Optional
- rr_value_format // Registered Resource Value must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored value will be normalized to lower case.
+ Registered Resource Value must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored value will be normalized to lower case.:
+ ```
+ size(this) > 0 ? this.matches('^[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?$') : true
+ ```
+
actionAttributeValues:
type: array
items:
@@ -1877,6 +1850,63 @@ components:
$ref: '#/components/schemas/policy.RegisteredResourceValue'
title: UpdateRegisteredResourceValueResponse
additionalProperties: false
+ connect-protocol-version:
+ type: number
+ title: Connect-Protocol-Version
+ enum:
+ - 1
+ description: Define the version of the Connect protocol
+ const: 1
+ connect-timeout-header:
+ type: number
+ title: Connect-Timeout-Ms
+ description: Define the timeout, in ms
+ connect.error:
+ type: object
+ properties:
+ code:
+ type: string
+ examples:
+ - not_found
+ enum:
+ - canceled
+ - unknown
+ - invalid_argument
+ - deadline_exceeded
+ - not_found
+ - already_exists
+ - permission_denied
+ - resource_exhausted
+ - failed_precondition
+ - aborted
+ - out_of_range
+ - unimplemented
+ - internal
+ - unavailable
+ - data_loss
+ - unauthenticated
+ description: The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
+ message:
+ type: string
+ description: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
+ detail:
+ $ref: '#/components/schemas/google.protobuf.Any'
+ title: Connect Error
+ additionalProperties: true
+ description: 'Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation'
+ google.protobuf.Any:
+ type: object
+ properties:
+ type:
+ type: string
+ value:
+ type: string
+ format: binary
+ debug:
+ type: object
+ additionalProperties: true
+ additionalProperties: true
+ description: Contains an arbitrary serialized message along with a @type that describes the type of the serialized message.
security: []
tags:
- name: policy.registeredresources.RegisteredResourcesService
diff --git a/docs/openapi/policy/resourcemapping/resource_mapping.openapi.yaml b/docs/openapi/policy/resourcemapping/resource_mapping.openapi.yaml
index 7928a38a98..c49765740a 100644
--- a/docs/openapi/policy/resourcemapping/resource_mapping.openapi.yaml
+++ b/docs/openapi/policy/resourcemapping/resource_mapping.openapi.yaml
@@ -2,12 +2,12 @@ openapi: 3.1.0
info:
title: policy.resourcemapping
paths:
- /policy.resourcemapping.ResourceMappingService/CreateResourceMapping:
+ /policy.resourcemapping.ResourceMappingService/ListResourceMappingGroups:
post:
tags:
- policy.resourcemapping.ResourceMappingService
- summary: CreateResourceMapping
- operationId: policy.resourcemapping.ResourceMappingService.CreateResourceMapping
+ summary: ListResourceMappingGroups
+ operationId: policy.resourcemapping.ResourceMappingService.ListResourceMappingGroups
parameters:
- name: Connect-Protocol-Version
in: header
@@ -22,7 +22,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.resourcemapping.CreateResourceMappingRequest'
+ $ref: '#/components/schemas/policy.resourcemapping.ListResourceMappingGroupsRequest'
required: true
responses:
default:
@@ -36,13 +36,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.resourcemapping.CreateResourceMappingResponse'
- /policy.resourcemapping.ResourceMappingService/CreateResourceMappingGroup:
+ $ref: '#/components/schemas/policy.resourcemapping.ListResourceMappingGroupsResponse'
+ /policy.resourcemapping.ResourceMappingService/GetResourceMappingGroup:
post:
tags:
- policy.resourcemapping.ResourceMappingService
- summary: CreateResourceMappingGroup
- operationId: policy.resourcemapping.ResourceMappingService.CreateResourceMappingGroup
+ summary: GetResourceMappingGroup
+ operationId: policy.resourcemapping.ResourceMappingService.GetResourceMappingGroup
parameters:
- name: Connect-Protocol-Version
in: header
@@ -57,7 +57,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.resourcemapping.CreateResourceMappingGroupRequest'
+ $ref: '#/components/schemas/policy.resourcemapping.GetResourceMappingGroupRequest'
required: true
responses:
default:
@@ -71,13 +71,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.resourcemapping.CreateResourceMappingGroupResponse'
- /policy.resourcemapping.ResourceMappingService/DeleteResourceMapping:
+ $ref: '#/components/schemas/policy.resourcemapping.GetResourceMappingGroupResponse'
+ /policy.resourcemapping.ResourceMappingService/CreateResourceMappingGroup:
post:
tags:
- policy.resourcemapping.ResourceMappingService
- summary: DeleteResourceMapping
- operationId: policy.resourcemapping.ResourceMappingService.DeleteResourceMapping
+ summary: CreateResourceMappingGroup
+ operationId: policy.resourcemapping.ResourceMappingService.CreateResourceMappingGroup
parameters:
- name: Connect-Protocol-Version
in: header
@@ -92,7 +92,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.resourcemapping.DeleteResourceMappingRequest'
+ $ref: '#/components/schemas/policy.resourcemapping.CreateResourceMappingGroupRequest'
required: true
responses:
default:
@@ -106,13 +106,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.resourcemapping.DeleteResourceMappingResponse'
- /policy.resourcemapping.ResourceMappingService/DeleteResourceMappingGroup:
+ $ref: '#/components/schemas/policy.resourcemapping.CreateResourceMappingGroupResponse'
+ /policy.resourcemapping.ResourceMappingService/UpdateResourceMappingGroup:
post:
tags:
- policy.resourcemapping.ResourceMappingService
- summary: DeleteResourceMappingGroup
- operationId: policy.resourcemapping.ResourceMappingService.DeleteResourceMappingGroup
+ summary: UpdateResourceMappingGroup
+ operationId: policy.resourcemapping.ResourceMappingService.UpdateResourceMappingGroup
parameters:
- name: Connect-Protocol-Version
in: header
@@ -127,7 +127,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.resourcemapping.DeleteResourceMappingGroupRequest'
+ $ref: '#/components/schemas/policy.resourcemapping.UpdateResourceMappingGroupRequest'
required: true
responses:
default:
@@ -141,13 +141,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.resourcemapping.DeleteResourceMappingGroupResponse'
- /policy.resourcemapping.ResourceMappingService/GetResourceMapping:
+ $ref: '#/components/schemas/policy.resourcemapping.UpdateResourceMappingGroupResponse'
+ /policy.resourcemapping.ResourceMappingService/DeleteResourceMappingGroup:
post:
tags:
- policy.resourcemapping.ResourceMappingService
- summary: GetResourceMapping
- operationId: policy.resourcemapping.ResourceMappingService.GetResourceMapping
+ summary: DeleteResourceMappingGroup
+ operationId: policy.resourcemapping.ResourceMappingService.DeleteResourceMappingGroup
parameters:
- name: Connect-Protocol-Version
in: header
@@ -162,7 +162,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.resourcemapping.GetResourceMappingRequest'
+ $ref: '#/components/schemas/policy.resourcemapping.DeleteResourceMappingGroupRequest'
required: true
responses:
default:
@@ -176,13 +176,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.resourcemapping.GetResourceMappingResponse'
- /policy.resourcemapping.ResourceMappingService/GetResourceMappingGroup:
+ $ref: '#/components/schemas/policy.resourcemapping.DeleteResourceMappingGroupResponse'
+ /policy.resourcemapping.ResourceMappingService/ListResourceMappings:
post:
tags:
- policy.resourcemapping.ResourceMappingService
- summary: GetResourceMappingGroup
- operationId: policy.resourcemapping.ResourceMappingService.GetResourceMappingGroup
+ summary: ListResourceMappings
+ operationId: policy.resourcemapping.ResourceMappingService.ListResourceMappings
parameters:
- name: Connect-Protocol-Version
in: header
@@ -197,7 +197,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.resourcemapping.GetResourceMappingGroupRequest'
+ $ref: '#/components/schemas/policy.resourcemapping.ListResourceMappingsRequest'
required: true
responses:
default:
@@ -211,13 +211,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.resourcemapping.GetResourceMappingGroupResponse'
- /policy.resourcemapping.ResourceMappingService/ListResourceMappingGroups:
+ $ref: '#/components/schemas/policy.resourcemapping.ListResourceMappingsResponse'
+ /policy.resourcemapping.ResourceMappingService/ListResourceMappingsByGroupFqns:
post:
tags:
- policy.resourcemapping.ResourceMappingService
- summary: ListResourceMappingGroups
- operationId: policy.resourcemapping.ResourceMappingService.ListResourceMappingGroups
+ summary: ListResourceMappingsByGroupFqns
+ operationId: policy.resourcemapping.ResourceMappingService.ListResourceMappingsByGroupFqns
parameters:
- name: Connect-Protocol-Version
in: header
@@ -232,7 +232,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.resourcemapping.ListResourceMappingGroupsRequest'
+ $ref: '#/components/schemas/policy.resourcemapping.ListResourceMappingsByGroupFqnsRequest'
required: true
responses:
default:
@@ -246,13 +246,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.resourcemapping.ListResourceMappingGroupsResponse'
- /policy.resourcemapping.ResourceMappingService/ListResourceMappings:
+ $ref: '#/components/schemas/policy.resourcemapping.ListResourceMappingsByGroupFqnsResponse'
+ /policy.resourcemapping.ResourceMappingService/GetResourceMapping:
post:
tags:
- policy.resourcemapping.ResourceMappingService
- summary: ListResourceMappings
- operationId: policy.resourcemapping.ResourceMappingService.ListResourceMappings
+ summary: GetResourceMapping
+ operationId: policy.resourcemapping.ResourceMappingService.GetResourceMapping
parameters:
- name: Connect-Protocol-Version
in: header
@@ -267,7 +267,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.resourcemapping.ListResourceMappingsRequest'
+ $ref: '#/components/schemas/policy.resourcemapping.GetResourceMappingRequest'
required: true
responses:
default:
@@ -281,13 +281,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.resourcemapping.ListResourceMappingsResponse'
- /policy.resourcemapping.ResourceMappingService/ListResourceMappingsByGroupFqns:
+ $ref: '#/components/schemas/policy.resourcemapping.GetResourceMappingResponse'
+ /policy.resourcemapping.ResourceMappingService/CreateResourceMapping:
post:
tags:
- policy.resourcemapping.ResourceMappingService
- summary: ListResourceMappingsByGroupFqns
- operationId: policy.resourcemapping.ResourceMappingService.ListResourceMappingsByGroupFqns
+ summary: CreateResourceMapping
+ operationId: policy.resourcemapping.ResourceMappingService.CreateResourceMapping
parameters:
- name: Connect-Protocol-Version
in: header
@@ -302,7 +302,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.resourcemapping.ListResourceMappingsByGroupFqnsRequest'
+ $ref: '#/components/schemas/policy.resourcemapping.CreateResourceMappingRequest'
required: true
responses:
default:
@@ -316,7 +316,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.resourcemapping.ListResourceMappingsByGroupFqnsResponse'
+ $ref: '#/components/schemas/policy.resourcemapping.CreateResourceMappingResponse'
/policy.resourcemapping.ResourceMappingService/UpdateResourceMapping:
post:
tags:
@@ -352,12 +352,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/policy.resourcemapping.UpdateResourceMappingResponse'
- /policy.resourcemapping.ResourceMappingService/UpdateResourceMappingGroup:
+ /policy.resourcemapping.ResourceMappingService/DeleteResourceMapping:
post:
tags:
- policy.resourcemapping.ResourceMappingService
- summary: UpdateResourceMappingGroup
- operationId: policy.resourcemapping.ResourceMappingService.UpdateResourceMappingGroup
+ summary: DeleteResourceMapping
+ operationId: policy.resourcemapping.ResourceMappingService.DeleteResourceMapping
parameters:
- name: Connect-Protocol-Version
in: header
@@ -372,7 +372,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.resourcemapping.UpdateResourceMappingGroupRequest'
+ $ref: '#/components/schemas/policy.resourcemapping.DeleteResourceMappingRequest'
required: true
responses:
default:
@@ -386,9 +386,84 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.resourcemapping.UpdateResourceMappingGroupResponse'
+ $ref: '#/components/schemas/policy.resourcemapping.DeleteResourceMappingResponse'
components:
schemas:
+ common.MetadataUpdateEnum:
+ type: string
+ title: MetadataUpdateEnum
+ enum:
+ - METADATA_UPDATE_ENUM_UNSPECIFIED
+ - METADATA_UPDATE_ENUM_EXTEND
+ - METADATA_UPDATE_ENUM_REPLACE
+ policy.Action.StandardAction:
+ type: string
+ title: StandardAction
+ enum:
+ - STANDARD_ACTION_UNSPECIFIED
+ - STANDARD_ACTION_DECRYPT
+ - STANDARD_ACTION_TRANSMIT
+ policy.Algorithm:
+ type: string
+ title: Algorithm
+ enum:
+ - ALGORITHM_UNSPECIFIED
+ - ALGORITHM_RSA_2048
+ - ALGORITHM_RSA_4096
+ - ALGORITHM_EC_P256
+ - ALGORITHM_EC_P384
+ - ALGORITHM_EC_P521
+ - ALGORITHM_HPQT_XWING
+ - ALGORITHM_HPQT_SECP256R1_MLKEM768
+ - ALGORITHM_HPQT_SECP384R1_MLKEM1024
+ description: Supported key algorithms.
+ policy.AttributeRuleTypeEnum:
+ type: string
+ title: AttributeRuleTypeEnum
+ enum:
+ - ATTRIBUTE_RULE_TYPE_ENUM_UNSPECIFIED
+ - ATTRIBUTE_RULE_TYPE_ENUM_ALL_OF
+ - ATTRIBUTE_RULE_TYPE_ENUM_ANY_OF
+ - ATTRIBUTE_RULE_TYPE_ENUM_HIERARCHY
+ policy.ConditionBooleanTypeEnum:
+ type: string
+ title: ConditionBooleanTypeEnum
+ enum:
+ - CONDITION_BOOLEAN_TYPE_ENUM_UNSPECIFIED
+ - CONDITION_BOOLEAN_TYPE_ENUM_AND
+ - CONDITION_BOOLEAN_TYPE_ENUM_OR
+ policy.KasPublicKeyAlgEnum:
+ type: string
+ title: KasPublicKeyAlgEnum
+ enum:
+ - KAS_PUBLIC_KEY_ALG_ENUM_UNSPECIFIED
+ - KAS_PUBLIC_KEY_ALG_ENUM_RSA_2048
+ - KAS_PUBLIC_KEY_ALG_ENUM_RSA_4096
+ - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP256R1
+ - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP384R1
+ - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP521R1
+ - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_XWING
+ - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP256R1_MLKEM768
+ - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP384R1_MLKEM1024
+ policy.SourceType:
+ type: string
+ title: SourceType
+ enum:
+ - SOURCE_TYPE_UNSPECIFIED
+ - SOURCE_TYPE_INTERNAL
+ - SOURCE_TYPE_EXTERNAL
+ description: |-
+ Describes whether this kas is managed by the organization or if they imported
+ the kas information from an external party. These two modes are necessary in order
+ to encrypt a tdf dek with an external parties kas public key.
+ policy.SubjectMappingOperatorEnum:
+ type: string
+ title: SubjectMappingOperatorEnum
+ enum:
+ - SUBJECT_MAPPING_OPERATOR_ENUM_UNSPECIFIED
+ - SUBJECT_MAPPING_OPERATOR_ENUM_IN
+ - SUBJECT_MAPPING_OPERATOR_ENUM_NOT_IN
+ - SUBJECT_MAPPING_OPERATOR_ENUM_IN_CONTAINS
common.Metadata:
type: object
properties:
@@ -444,82 +519,6 @@ components:
title: value
title: LabelsEntry
additionalProperties: false
- common.MetadataUpdateEnum:
- type: string
- title: MetadataUpdateEnum
- enum:
- - METADATA_UPDATE_ENUM_UNSPECIFIED
- - METADATA_UPDATE_ENUM_EXTEND
- - METADATA_UPDATE_ENUM_REPLACE
- connect-protocol-version:
- type: number
- title: Connect-Protocol-Version
- enum:
- - 1
- description: Define the version of the Connect protocol
- const: 1
- connect-timeout-header:
- type: number
- title: Connect-Timeout-Ms
- description: Define the timeout, in ms
- connect.error:
- type: object
- properties:
- code:
- type: string
- examples:
- - not_found
- enum:
- - canceled
- - unknown
- - invalid_argument
- - deadline_exceeded
- - not_found
- - already_exists
- - permission_denied
- - resource_exhausted
- - failed_precondition
- - aborted
- - out_of_range
- - unimplemented
- - internal
- - unavailable
- - data_loss
- - unauthenticated
- description: The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
- message:
- type: string
- description: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
- details:
- type: array
- items:
- $ref: '#/components/schemas/connect.error_details.Any'
- description: A list of messages that carry the error details. There is no limit on the number of messages.
- title: Connect Error
- additionalProperties: true
- description: 'Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation'
- connect.error_details.Any:
- type: object
- properties:
- type:
- type: string
- description: 'A URL that acts as a globally unique identifier for the type of the serialized message. For example: `type.googleapis.com/google.rpc.ErrorInfo`. This is used to determine the schema of the data in the `value` field and is the discriminator for the `debug` field.'
- value:
- type: string
- format: binary
- description: The Protobuf message, serialized as bytes and base64-encoded. The specific message type is identified by the `type` field.
- debug:
- oneOf:
- - type: object
- title: Any
- additionalProperties: true
- description: Detailed error information.
- discriminator:
- propertyName: type
- title: Debug
- description: Deserialized error detail payload. The 'type' field indicates the schema. This field is for easier debugging and should not be relied upon for application logic.
- additionalProperties: true
- description: Contains an arbitrary serialized message along with a @type that describes the type of the serialized message, with an additional debug field for ConnectRPC error details.
google.protobuf.BoolValue:
type: boolean
description: |-
@@ -532,8 +531,8 @@ components:
google.protobuf.Timestamp:
type: string
examples:
- - "2023-01-15T01:30:15.01Z"
- - "2024-12-25T12:00:00Z"
+ - 1s
+ - 1.000340012s
format: date-time
description: |-
A Timestamp represents a point in time independent of any time zone or local
@@ -627,65 +626,41 @@ components:
) to obtain a formatter capable of generating timestamps in this format.
policy.Action:
type: object
- allOf:
+ oneOf:
- properties:
- id:
- type: string
- title: id
- description: Generated uuid in database
- name:
+ custom:
type: string
- title: name
- namespace:
- title: namespace
- description: Namespace context for this action
- $ref: '#/components/schemas/policy.Namespace'
- metadata:
- title: metadata
- $ref: '#/components/schemas/common.Metadata'
- - oneOf:
- - type: object
- properties:
- custom:
- type: string
- title: custom
- description: Deprecated
title: custom
- required:
- - custom
- - type: object
- properties:
- standard:
- title: standard
- description: Deprecated
- $ref: '#/components/schemas/policy.Action.StandardAction'
+ description: Deprecated
+ title: custom
+ required:
+ - custom
+ - properties:
+ standard:
title: standard
- required:
- - standard
+ description: Deprecated
+ $ref: '#/components/schemas/policy.Action.StandardAction'
+ title: standard
+ required:
+ - standard
+ properties:
+ id:
+ type: string
+ title: id
+ description: Generated uuid in database
+ name:
+ type: string
+ title: name
+ namespace:
+ title: namespace
+ description: Namespace context for this action
+ $ref: '#/components/schemas/policy.Namespace'
+ metadata:
+ title: metadata
+ $ref: '#/components/schemas/common.Metadata'
title: Action
additionalProperties: false
description: An action an entity can take
- policy.Action.StandardAction:
- type: string
- title: StandardAction
- enum:
- - STANDARD_ACTION_UNSPECIFIED
- - STANDARD_ACTION_DECRYPT
- - STANDARD_ACTION_TRANSMIT
- policy.Algorithm:
- type: string
- title: Algorithm
- enum:
- - ALGORITHM_UNSPECIFIED
- - ALGORITHM_RSA_2048
- - ALGORITHM_RSA_4096
- - ALGORITHM_EC_P256
- - ALGORITHM_EC_P384
- - ALGORITHM_EC_P521
- - ALGORITHM_HPQT_XWING
- - ALGORITHM_HPQT_SECP256R1_MLKEM768
- - ALGORITHM_HPQT_SECP384R1_MLKEM1024
- description: Supported key algorithms.
policy.Attribute:
type: object
properties:
@@ -742,14 +717,6 @@ components:
required:
- rule
additionalProperties: false
- policy.AttributeRuleTypeEnum:
- type: string
- title: AttributeRuleTypeEnum
- enum:
- - ATTRIBUTE_RULE_TYPE_ENUM_UNSPECIFIED
- - ATTRIBUTE_RULE_TYPE_ENUM_ALL_OF
- - ATTRIBUTE_RULE_TYPE_ENUM_ANY_OF
- - ATTRIBUTE_RULE_TYPE_ENUM_HIERARCHY
policy.Condition:
type: object
properties:
@@ -767,6 +734,7 @@ components:
type: array
items:
type: string
+ minItems: 1
title: subject_external_values
minItems: 1
description: |-
@@ -782,13 +750,6 @@ components:
*
A Condition defines a rule of
- policy.ConditionBooleanTypeEnum:
- type: string
- title: ConditionBooleanTypeEnum
- enum:
- - CONDITION_BOOLEAN_TYPE_ENUM_UNSPECIFIED
- - CONDITION_BOOLEAN_TYPE_ENUM_AND
- - CONDITION_BOOLEAN_TYPE_ENUM_OR
policy.ConditionGroup:
type: object
properties:
@@ -825,7 +786,7 @@ components:
alg:
not:
enum:
- - KAS_PUBLIC_KEY_ALG_ENUM_UNSPECIFIED
+ - 0
title: alg
description: |-
A known algorithm type with any additional parameters encoded.
@@ -837,19 +798,6 @@ components:
description: |-
Deprecated
A KAS public key and some associated metadata for further identifcation
- policy.KasPublicKeyAlgEnum:
- type: string
- title: KasPublicKeyAlgEnum
- enum:
- - KAS_PUBLIC_KEY_ALG_ENUM_UNSPECIFIED
- - KAS_PUBLIC_KEY_ALG_ENUM_RSA_2048
- - KAS_PUBLIC_KEY_ALG_ENUM_RSA_4096
- - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP256R1
- - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP384R1
- - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP521R1
- - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_XWING
- - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP256R1_MLKEM768
- - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP384R1_MLKEM1024
policy.KasPublicKeySet:
type: object
properties:
@@ -872,9 +820,13 @@ components:
uri:
type: string
title: uri
- description: |
+ description: |+
Address of a KAS instance
- uri_format // URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.
+ URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.:
+ ```
+ this.matches('^https?://[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?)*(:[0-9]+)?(/.*)?$')
+ ```
+
publicKey:
title: public_key
description: 'Deprecated: KAS can have multiple key pairs'
@@ -1072,8 +1024,7 @@ components:
policy.PublicKey:
type: object
oneOf:
- - type: object
- properties:
+ - properties:
cached:
title: cached
description: public key with additional information. Current preferred version
@@ -1081,14 +1032,17 @@ components:
title: cached
required:
- cached
- - type: object
- properties:
+ - properties:
remote:
type: string
title: remote
- description: |
+ description: |+
kas public key url - optional since can also be retrieved via public key
- uri_format // URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.
+ URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.:
+ ```
+ this.matches('^https://[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?)*(/.*)?$')
+ ```
+
title: remote
required:
- remote
@@ -1196,17 +1150,6 @@ components:
title: pem
title: SimpleKasPublicKey
additionalProperties: false
- policy.SourceType:
- type: string
- title: SourceType
- enum:
- - SOURCE_TYPE_UNSPECIFIED
- - SOURCE_TYPE_INTERNAL
- - SOURCE_TYPE_EXTERNAL
- description: |-
- Describes whether this kas is managed by the organization or if they imported
- the kas information from an external party. These two modes are necessary in order
- to encrypt a tdf dek with an external parties kas public key.
policy.SubjectConditionSet:
type: object
properties:
@@ -1272,14 +1215,6 @@ components:
description: |-
Subject Mapping: A Policy assigning Subject Set(s) to a permitted attribute
value + action(s) combination
- policy.SubjectMappingOperatorEnum:
- type: string
- title: SubjectMappingOperatorEnum
- enum:
- - SUBJECT_MAPPING_OPERATOR_ENUM_UNSPECIFIED
- - SUBJECT_MAPPING_OPERATOR_ENUM_IN
- - SUBJECT_MAPPING_OPERATOR_ENUM_NOT_IN
- - SUBJECT_MAPPING_OPERATOR_ENUM_IN_CONTAINS
policy.SubjectSet:
type: object
properties:
@@ -1386,6 +1321,8 @@ components:
type: array
items:
type: string
+ maxItems: 1000
+ minItems: 1
title: terms
maxItems: 1000
minItems: 1
@@ -1393,9 +1330,13 @@ components:
groupId:
type: string
title: group_id
- description: |
+ description: |+
Optional
- optional_uuid_format // Optional field must be a valid UUID
+ Optional field must be a valid UUID:
+ ```
+ size(this) == 0 || this.matches('[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}')
+ ```
+
metadata:
title: metadata
description: Optional
@@ -1488,9 +1429,13 @@ components:
namespaceId:
type: string
title: namespace_id
- description: |
+ description: |+
Optional
- optional_uuid_format // Optional field must be a valid UUID
+ Optional field must be a valid UUID:
+ ```
+ size(this) == 0 || this.matches('[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}')
+ ```
+
pagination:
title: pagination
description: Optional
@@ -1517,6 +1462,7 @@ components:
type: array
items:
type: string
+ minItems: 1
title: fqns
minItems: 1
description: |-
@@ -1552,9 +1498,13 @@ components:
groupId:
type: string
title: group_id
- description: |
+ description: |+
Optional
- optional_uuid_format // Optional field must be a valid UUID
+ Optional field must be a valid UUID:
+ ```
+ size(this) == 0 || this.matches('[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}')
+ ```
+
pagination:
title: pagination
description: Optional
@@ -1598,16 +1548,24 @@ components:
namespaceId:
type: string
title: namespace_id
- description: |
+ description: |+
Optional
- optional_uuid_format // Optional field must be a valid UUID
+ Optional field must be a valid UUID:
+ ```
+ size(this) == 0 || this.matches('[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}')
+ ```
+
name:
type: string
title: name
maxLength: 253
- description: |
+ description: |+
Optional
- optional_name_format // Optional field must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored group name will be normalized to lower case.
+ Optional field must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored group name will be normalized to lower case.:
+ ```
+ size(this) == 0 || this.matches('^[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?$')
+ ```
+
metadata:
title: metadata
description: Common metadata
@@ -1636,22 +1594,31 @@ components:
attributeValueId:
type: string
title: attribute_value_id
- description: |
+ description: |+
Optional
- optional_uuid_format // Optional field must be a valid UUID
+ Optional field must be a valid UUID:
+ ```
+ size(this) == 0 || this.matches('[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}')
+ ```
+
terms:
type: array
items:
type: string
+ maxItems: 1000
title: terms
maxItems: 1000
description: Optional
groupId:
type: string
title: group_id
- description: |
+ description: |+
Optional
- optional_uuid_format // Optional field must be a valid UUID
+ Optional field must be a valid UUID:
+ ```
+ size(this) == 0 || this.matches('[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}')
+ ```
+
metadata:
title: metadata
description: |-
@@ -1671,6 +1638,63 @@ components:
$ref: '#/components/schemas/policy.ResourceMapping'
title: UpdateResourceMappingResponse
additionalProperties: false
+ connect-protocol-version:
+ type: number
+ title: Connect-Protocol-Version
+ enum:
+ - 1
+ description: Define the version of the Connect protocol
+ const: 1
+ connect-timeout-header:
+ type: number
+ title: Connect-Timeout-Ms
+ description: Define the timeout, in ms
+ connect.error:
+ type: object
+ properties:
+ code:
+ type: string
+ examples:
+ - not_found
+ enum:
+ - canceled
+ - unknown
+ - invalid_argument
+ - deadline_exceeded
+ - not_found
+ - already_exists
+ - permission_denied
+ - resource_exhausted
+ - failed_precondition
+ - aborted
+ - out_of_range
+ - unimplemented
+ - internal
+ - unavailable
+ - data_loss
+ - unauthenticated
+ description: The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
+ message:
+ type: string
+ description: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
+ detail:
+ $ref: '#/components/schemas/google.protobuf.Any'
+ title: Connect Error
+ additionalProperties: true
+ description: 'Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation'
+ google.protobuf.Any:
+ type: object
+ properties:
+ type:
+ type: string
+ value:
+ type: string
+ format: binary
+ debug:
+ type: object
+ additionalProperties: true
+ additionalProperties: true
+ description: Contains an arbitrary serialized message along with a @type that describes the type of the serialized message.
security: []
tags:
- name: policy.resourcemapping.ResourceMappingService
diff --git a/docs/openapi/policy/selectors.openapi.yaml b/docs/openapi/policy/selectors.openapi.yaml
index 65cc330d4a..89eb2a094b 100644
--- a/docs/openapi/policy/selectors.openapi.yaml
+++ b/docs/openapi/policy/selectors.openapi.yaml
@@ -4,6 +4,18 @@ info:
paths: {}
components:
schemas:
+ policy.SortDirection:
+ type: string
+ title: SortDirection
+ enum:
+ - SORT_DIRECTION_UNSPECIFIED
+ - SORT_DIRECTION_ASC
+ - SORT_DIRECTION_DESC
+ description: |-
+ Sorting direction shared across list APIs.
+ When the 'sort' field is omitted or the chosen sort 'field' is UNSPECIFIED,
+ the endpoint's request message defines the default ordering; see the
+ specific List* request docs.
policy.AttributeDefinitionSelector:
type: object
properties:
@@ -152,16 +164,12 @@ components:
description: Total count of entire list
title: PageResponse
additionalProperties: false
- policy.SortDirection:
- type: string
- title: SortDirection
- enum:
- - SORT_DIRECTION_UNSPECIFIED
- - SORT_DIRECTION_ASC
- - SORT_DIRECTION_DESC
- description: |-
- Sorting direction shared across list APIs.
- When the 'sort' field is omitted or the chosen sort 'field' is UNSPECIFIED,
- the endpoint's request message defines the default ordering; see the
- specific List* request docs.
+ policy.Search:
+ type: object
+ properties:
+ term:
+ type: string
+ title: term
+ title: Search
+ additionalProperties: false
security: []
diff --git a/docs/openapi/policy/subjectmapping/subject_mapping.openapi.yaml b/docs/openapi/policy/subjectmapping/subject_mapping.openapi.yaml
index 10e2ebeb84..32a6fe61c2 100644
--- a/docs/openapi/policy/subjectmapping/subject_mapping.openapi.yaml
+++ b/docs/openapi/policy/subjectmapping/subject_mapping.openapi.yaml
@@ -2,12 +2,13 @@ openapi: 3.1.0
info:
title: policy.subjectmapping
paths:
- /policy.subjectmapping.SubjectMappingService/CreateSubjectConditionSet:
+ /policy.subjectmapping.SubjectMappingService/MatchSubjectMappings:
post:
tags:
- policy.subjectmapping.SubjectMappingService
- summary: CreateSubjectConditionSet
- operationId: policy.subjectmapping.SubjectMappingService.CreateSubjectConditionSet
+ summary: MatchSubjectMappings
+ description: Find matching Subject Mappings for a given Subject
+ operationId: policy.subjectmapping.SubjectMappingService.MatchSubjectMappings
parameters:
- name: Connect-Protocol-Version
in: header
@@ -22,7 +23,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.subjectmapping.CreateSubjectConditionSetRequest'
+ $ref: '#/components/schemas/policy.subjectmapping.MatchSubjectMappingsRequest'
required: true
responses:
default:
@@ -36,13 +37,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.subjectmapping.CreateSubjectConditionSetResponse'
- /policy.subjectmapping.SubjectMappingService/CreateSubjectMapping:
+ $ref: '#/components/schemas/policy.subjectmapping.MatchSubjectMappingsResponse'
+ /policy.subjectmapping.SubjectMappingService/ListSubjectMappings:
post:
tags:
- policy.subjectmapping.SubjectMappingService
- summary: CreateSubjectMapping
- operationId: policy.subjectmapping.SubjectMappingService.CreateSubjectMapping
+ summary: ListSubjectMappings
+ operationId: policy.subjectmapping.SubjectMappingService.ListSubjectMappings
parameters:
- name: Connect-Protocol-Version
in: header
@@ -57,7 +58,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.subjectmapping.CreateSubjectMappingRequest'
+ $ref: '#/components/schemas/policy.subjectmapping.ListSubjectMappingsRequest'
required: true
responses:
default:
@@ -71,13 +72,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.subjectmapping.CreateSubjectMappingResponse'
- /policy.subjectmapping.SubjectMappingService/DeleteAllUnmappedSubjectConditionSets:
+ $ref: '#/components/schemas/policy.subjectmapping.ListSubjectMappingsResponse'
+ /policy.subjectmapping.SubjectMappingService/GetSubjectMapping:
post:
tags:
- policy.subjectmapping.SubjectMappingService
- summary: DeleteAllUnmappedSubjectConditionSets
- operationId: policy.subjectmapping.SubjectMappingService.DeleteAllUnmappedSubjectConditionSets
+ summary: GetSubjectMapping
+ operationId: policy.subjectmapping.SubjectMappingService.GetSubjectMapping
parameters:
- name: Connect-Protocol-Version
in: header
@@ -92,7 +93,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.subjectmapping.DeleteAllUnmappedSubjectConditionSetsRequest'
+ $ref: '#/components/schemas/policy.subjectmapping.GetSubjectMappingRequest'
required: true
responses:
default:
@@ -106,13 +107,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.subjectmapping.DeleteAllUnmappedSubjectConditionSetsResponse'
- /policy.subjectmapping.SubjectMappingService/DeleteSubjectConditionSet:
+ $ref: '#/components/schemas/policy.subjectmapping.GetSubjectMappingResponse'
+ /policy.subjectmapping.SubjectMappingService/CreateSubjectMapping:
post:
tags:
- policy.subjectmapping.SubjectMappingService
- summary: DeleteSubjectConditionSet
- operationId: policy.subjectmapping.SubjectMappingService.DeleteSubjectConditionSet
+ summary: CreateSubjectMapping
+ operationId: policy.subjectmapping.SubjectMappingService.CreateSubjectMapping
parameters:
- name: Connect-Protocol-Version
in: header
@@ -127,7 +128,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.subjectmapping.DeleteSubjectConditionSetRequest'
+ $ref: '#/components/schemas/policy.subjectmapping.CreateSubjectMappingRequest'
required: true
responses:
default:
@@ -141,13 +142,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.subjectmapping.DeleteSubjectConditionSetResponse'
- /policy.subjectmapping.SubjectMappingService/DeleteSubjectMapping:
+ $ref: '#/components/schemas/policy.subjectmapping.CreateSubjectMappingResponse'
+ /policy.subjectmapping.SubjectMappingService/UpdateSubjectMapping:
post:
tags:
- policy.subjectmapping.SubjectMappingService
- summary: DeleteSubjectMapping
- operationId: policy.subjectmapping.SubjectMappingService.DeleteSubjectMapping
+ summary: UpdateSubjectMapping
+ operationId: policy.subjectmapping.SubjectMappingService.UpdateSubjectMapping
parameters:
- name: Connect-Protocol-Version
in: header
@@ -162,7 +163,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.subjectmapping.DeleteSubjectMappingRequest'
+ $ref: '#/components/schemas/policy.subjectmapping.UpdateSubjectMappingRequest'
required: true
responses:
default:
@@ -176,13 +177,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.subjectmapping.DeleteSubjectMappingResponse'
- /policy.subjectmapping.SubjectMappingService/GetSubjectConditionSet:
+ $ref: '#/components/schemas/policy.subjectmapping.UpdateSubjectMappingResponse'
+ /policy.subjectmapping.SubjectMappingService/DeleteSubjectMapping:
post:
tags:
- policy.subjectmapping.SubjectMappingService
- summary: GetSubjectConditionSet
- operationId: policy.subjectmapping.SubjectMappingService.GetSubjectConditionSet
+ summary: DeleteSubjectMapping
+ operationId: policy.subjectmapping.SubjectMappingService.DeleteSubjectMapping
parameters:
- name: Connect-Protocol-Version
in: header
@@ -197,7 +198,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.subjectmapping.GetSubjectConditionSetRequest'
+ $ref: '#/components/schemas/policy.subjectmapping.DeleteSubjectMappingRequest'
required: true
responses:
default:
@@ -211,13 +212,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.subjectmapping.GetSubjectConditionSetResponse'
- /policy.subjectmapping.SubjectMappingService/GetSubjectMapping:
+ $ref: '#/components/schemas/policy.subjectmapping.DeleteSubjectMappingResponse'
+ /policy.subjectmapping.SubjectMappingService/ListSubjectConditionSets:
post:
tags:
- policy.subjectmapping.SubjectMappingService
- summary: GetSubjectMapping
- operationId: policy.subjectmapping.SubjectMappingService.GetSubjectMapping
+ summary: ListSubjectConditionSets
+ operationId: policy.subjectmapping.SubjectMappingService.ListSubjectConditionSets
parameters:
- name: Connect-Protocol-Version
in: header
@@ -232,7 +233,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.subjectmapping.GetSubjectMappingRequest'
+ $ref: '#/components/schemas/policy.subjectmapping.ListSubjectConditionSetsRequest'
required: true
responses:
default:
@@ -246,13 +247,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.subjectmapping.GetSubjectMappingResponse'
- /policy.subjectmapping.SubjectMappingService/ListSubjectConditionSets:
+ $ref: '#/components/schemas/policy.subjectmapping.ListSubjectConditionSetsResponse'
+ /policy.subjectmapping.SubjectMappingService/GetSubjectConditionSet:
post:
tags:
- policy.subjectmapping.SubjectMappingService
- summary: ListSubjectConditionSets
- operationId: policy.subjectmapping.SubjectMappingService.ListSubjectConditionSets
+ summary: GetSubjectConditionSet
+ operationId: policy.subjectmapping.SubjectMappingService.GetSubjectConditionSet
parameters:
- name: Connect-Protocol-Version
in: header
@@ -267,7 +268,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.subjectmapping.ListSubjectConditionSetsRequest'
+ $ref: '#/components/schemas/policy.subjectmapping.GetSubjectConditionSetRequest'
required: true
responses:
default:
@@ -281,13 +282,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.subjectmapping.ListSubjectConditionSetsResponse'
- /policy.subjectmapping.SubjectMappingService/ListSubjectMappings:
+ $ref: '#/components/schemas/policy.subjectmapping.GetSubjectConditionSetResponse'
+ /policy.subjectmapping.SubjectMappingService/CreateSubjectConditionSet:
post:
tags:
- policy.subjectmapping.SubjectMappingService
- summary: ListSubjectMappings
- operationId: policy.subjectmapping.SubjectMappingService.ListSubjectMappings
+ summary: CreateSubjectConditionSet
+ operationId: policy.subjectmapping.SubjectMappingService.CreateSubjectConditionSet
parameters:
- name: Connect-Protocol-Version
in: header
@@ -302,7 +303,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.subjectmapping.ListSubjectMappingsRequest'
+ $ref: '#/components/schemas/policy.subjectmapping.CreateSubjectConditionSetRequest'
required: true
responses:
default:
@@ -316,14 +317,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.subjectmapping.ListSubjectMappingsResponse'
- /policy.subjectmapping.SubjectMappingService/MatchSubjectMappings:
+ $ref: '#/components/schemas/policy.subjectmapping.CreateSubjectConditionSetResponse'
+ /policy.subjectmapping.SubjectMappingService/UpdateSubjectConditionSet:
post:
tags:
- policy.subjectmapping.SubjectMappingService
- summary: MatchSubjectMappings
- description: Find matching Subject Mappings for a given Subject
- operationId: policy.subjectmapping.SubjectMappingService.MatchSubjectMappings
+ summary: UpdateSubjectConditionSet
+ operationId: policy.subjectmapping.SubjectMappingService.UpdateSubjectConditionSet
parameters:
- name: Connect-Protocol-Version
in: header
@@ -338,7 +338,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.subjectmapping.MatchSubjectMappingsRequest'
+ $ref: '#/components/schemas/policy.subjectmapping.UpdateSubjectConditionSetRequest'
required: true
responses:
default:
@@ -352,13 +352,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.subjectmapping.MatchSubjectMappingsResponse'
- /policy.subjectmapping.SubjectMappingService/UpdateSubjectConditionSet:
+ $ref: '#/components/schemas/policy.subjectmapping.UpdateSubjectConditionSetResponse'
+ /policy.subjectmapping.SubjectMappingService/DeleteSubjectConditionSet:
post:
tags:
- policy.subjectmapping.SubjectMappingService
- summary: UpdateSubjectConditionSet
- operationId: policy.subjectmapping.SubjectMappingService.UpdateSubjectConditionSet
+ summary: DeleteSubjectConditionSet
+ operationId: policy.subjectmapping.SubjectMappingService.DeleteSubjectConditionSet
parameters:
- name: Connect-Protocol-Version
in: header
@@ -373,7 +373,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.subjectmapping.UpdateSubjectConditionSetRequest'
+ $ref: '#/components/schemas/policy.subjectmapping.DeleteSubjectConditionSetRequest'
required: true
responses:
default:
@@ -387,13 +387,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.subjectmapping.UpdateSubjectConditionSetResponse'
- /policy.subjectmapping.SubjectMappingService/UpdateSubjectMapping:
+ $ref: '#/components/schemas/policy.subjectmapping.DeleteSubjectConditionSetResponse'
+ /policy.subjectmapping.SubjectMappingService/DeleteAllUnmappedSubjectConditionSets:
post:
tags:
- policy.subjectmapping.SubjectMappingService
- summary: UpdateSubjectMapping
- operationId: policy.subjectmapping.SubjectMappingService.UpdateSubjectMapping
+ summary: DeleteAllUnmappedSubjectConditionSets
+ operationId: policy.subjectmapping.SubjectMappingService.DeleteAllUnmappedSubjectConditionSets
parameters:
- name: Connect-Protocol-Version
in: header
@@ -408,7 +408,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.subjectmapping.UpdateSubjectMappingRequest'
+ $ref: '#/components/schemas/policy.subjectmapping.DeleteAllUnmappedSubjectConditionSetsRequest'
required: true
responses:
default:
@@ -422,9 +422,110 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.subjectmapping.UpdateSubjectMappingResponse'
+ $ref: '#/components/schemas/policy.subjectmapping.DeleteAllUnmappedSubjectConditionSetsResponse'
components:
schemas:
+ common.MetadataUpdateEnum:
+ type: string
+ title: MetadataUpdateEnum
+ enum:
+ - METADATA_UPDATE_ENUM_UNSPECIFIED
+ - METADATA_UPDATE_ENUM_EXTEND
+ - METADATA_UPDATE_ENUM_REPLACE
+ policy.Action.StandardAction:
+ type: string
+ title: StandardAction
+ enum:
+ - STANDARD_ACTION_UNSPECIFIED
+ - STANDARD_ACTION_DECRYPT
+ - STANDARD_ACTION_TRANSMIT
+ policy.Algorithm:
+ type: string
+ title: Algorithm
+ enum:
+ - ALGORITHM_UNSPECIFIED
+ - ALGORITHM_RSA_2048
+ - ALGORITHM_RSA_4096
+ - ALGORITHM_EC_P256
+ - ALGORITHM_EC_P384
+ - ALGORITHM_EC_P521
+ - ALGORITHM_HPQT_XWING
+ - ALGORITHM_HPQT_SECP256R1_MLKEM768
+ - ALGORITHM_HPQT_SECP384R1_MLKEM1024
+ description: Supported key algorithms.
+ policy.AttributeRuleTypeEnum:
+ type: string
+ title: AttributeRuleTypeEnum
+ enum:
+ - ATTRIBUTE_RULE_TYPE_ENUM_UNSPECIFIED
+ - ATTRIBUTE_RULE_TYPE_ENUM_ALL_OF
+ - ATTRIBUTE_RULE_TYPE_ENUM_ANY_OF
+ - ATTRIBUTE_RULE_TYPE_ENUM_HIERARCHY
+ policy.ConditionBooleanTypeEnum:
+ type: string
+ title: ConditionBooleanTypeEnum
+ enum:
+ - CONDITION_BOOLEAN_TYPE_ENUM_UNSPECIFIED
+ - CONDITION_BOOLEAN_TYPE_ENUM_AND
+ - CONDITION_BOOLEAN_TYPE_ENUM_OR
+ policy.KasPublicKeyAlgEnum:
+ type: string
+ title: KasPublicKeyAlgEnum
+ enum:
+ - KAS_PUBLIC_KEY_ALG_ENUM_UNSPECIFIED
+ - KAS_PUBLIC_KEY_ALG_ENUM_RSA_2048
+ - KAS_PUBLIC_KEY_ALG_ENUM_RSA_4096
+ - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP256R1
+ - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP384R1
+ - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP521R1
+ - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_XWING
+ - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP256R1_MLKEM768
+ - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP384R1_MLKEM1024
+ policy.SortDirection:
+ type: string
+ title: SortDirection
+ enum:
+ - SORT_DIRECTION_UNSPECIFIED
+ - SORT_DIRECTION_ASC
+ - SORT_DIRECTION_DESC
+ description: |-
+ Sorting direction shared across list APIs.
+ When the 'sort' field is omitted or the chosen sort 'field' is UNSPECIFIED,
+ the endpoint's request message defines the default ordering; see the
+ specific List* request docs.
+ policy.SourceType:
+ type: string
+ title: SourceType
+ enum:
+ - SOURCE_TYPE_UNSPECIFIED
+ - SOURCE_TYPE_INTERNAL
+ - SOURCE_TYPE_EXTERNAL
+ description: |-
+ Describes whether this kas is managed by the organization or if they imported
+ the kas information from an external party. These two modes are necessary in order
+ to encrypt a tdf dek with an external parties kas public key.
+ policy.SubjectMappingOperatorEnum:
+ type: string
+ title: SubjectMappingOperatorEnum
+ enum:
+ - SUBJECT_MAPPING_OPERATOR_ENUM_UNSPECIFIED
+ - SUBJECT_MAPPING_OPERATOR_ENUM_IN
+ - SUBJECT_MAPPING_OPERATOR_ENUM_NOT_IN
+ - SUBJECT_MAPPING_OPERATOR_ENUM_IN_CONTAINS
+ policy.subjectmapping.SortSubjectConditionSetsType:
+ type: string
+ title: SortSubjectConditionSetsType
+ enum:
+ - SORT_SUBJECT_CONDITION_SETS_TYPE_UNSPECIFIED
+ - SORT_SUBJECT_CONDITION_SETS_TYPE_CREATED_AT
+ - SORT_SUBJECT_CONDITION_SETS_TYPE_UPDATED_AT
+ policy.subjectmapping.SortSubjectMappingsType:
+ type: string
+ title: SortSubjectMappingsType
+ enum:
+ - SORT_SUBJECT_MAPPINGS_TYPE_UNSPECIFIED
+ - SORT_SUBJECT_MAPPINGS_TYPE_CREATED_AT
+ - SORT_SUBJECT_MAPPINGS_TYPE_UPDATED_AT
common.Metadata:
type: object
properties:
@@ -480,82 +581,6 @@ components:
title: value
title: LabelsEntry
additionalProperties: false
- common.MetadataUpdateEnum:
- type: string
- title: MetadataUpdateEnum
- enum:
- - METADATA_UPDATE_ENUM_UNSPECIFIED
- - METADATA_UPDATE_ENUM_EXTEND
- - METADATA_UPDATE_ENUM_REPLACE
- connect-protocol-version:
- type: number
- title: Connect-Protocol-Version
- enum:
- - 1
- description: Define the version of the Connect protocol
- const: 1
- connect-timeout-header:
- type: number
- title: Connect-Timeout-Ms
- description: Define the timeout, in ms
- connect.error:
- type: object
- properties:
- code:
- type: string
- examples:
- - not_found
- enum:
- - canceled
- - unknown
- - invalid_argument
- - deadline_exceeded
- - not_found
- - already_exists
- - permission_denied
- - resource_exhausted
- - failed_precondition
- - aborted
- - out_of_range
- - unimplemented
- - internal
- - unavailable
- - data_loss
- - unauthenticated
- description: The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
- message:
- type: string
- description: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
- details:
- type: array
- items:
- $ref: '#/components/schemas/connect.error_details.Any'
- description: A list of messages that carry the error details. There is no limit on the number of messages.
- title: Connect Error
- additionalProperties: true
- description: 'Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation'
- connect.error_details.Any:
- type: object
- properties:
- type:
- type: string
- description: 'A URL that acts as a globally unique identifier for the type of the serialized message. For example: `type.googleapis.com/google.rpc.ErrorInfo`. This is used to determine the schema of the data in the `value` field and is the discriminator for the `debug` field.'
- value:
- type: string
- format: binary
- description: The Protobuf message, serialized as bytes and base64-encoded. The specific message type is identified by the `type` field.
- debug:
- oneOf:
- - type: object
- title: Any
- additionalProperties: true
- description: Detailed error information.
- discriminator:
- propertyName: type
- title: Debug
- description: Deserialized error detail payload. The 'type' field indicates the schema. This field is for easier debugging and should not be relied upon for application logic.
- additionalProperties: true
- description: Contains an arbitrary serialized message along with a @type that describes the type of the serialized message, with an additional debug field for ConnectRPC error details.
google.protobuf.BoolValue:
type: boolean
description: |-
@@ -568,8 +593,8 @@ components:
google.protobuf.Timestamp:
type: string
examples:
- - "2023-01-15T01:30:15.01Z"
- - "2024-12-25T12:00:00Z"
+ - 1s
+ - 1.000340012s
format: date-time
description: |-
A Timestamp represents a point in time independent of any time zone or local
@@ -663,65 +688,41 @@ components:
) to obtain a formatter capable of generating timestamps in this format.
policy.Action:
type: object
- allOf:
+ oneOf:
- properties:
- id:
+ custom:
type: string
- title: id
- description: Generated uuid in database
- name:
- type: string
- title: name
- namespace:
- title: namespace
- description: Namespace context for this action
- $ref: '#/components/schemas/policy.Namespace'
- metadata:
- title: metadata
- $ref: '#/components/schemas/common.Metadata'
- - oneOf:
- - type: object
- properties:
- custom:
- type: string
- title: custom
- description: Deprecated
title: custom
- required:
- - custom
- - type: object
- properties:
- standard:
- title: standard
- description: Deprecated
- $ref: '#/components/schemas/policy.Action.StandardAction'
+ description: Deprecated
+ title: custom
+ required:
+ - custom
+ - properties:
+ standard:
title: standard
- required:
- - standard
+ description: Deprecated
+ $ref: '#/components/schemas/policy.Action.StandardAction'
+ title: standard
+ required:
+ - standard
+ properties:
+ id:
+ type: string
+ title: id
+ description: Generated uuid in database
+ name:
+ type: string
+ title: name
+ namespace:
+ title: namespace
+ description: Namespace context for this action
+ $ref: '#/components/schemas/policy.Namespace'
+ metadata:
+ title: metadata
+ $ref: '#/components/schemas/common.Metadata'
title: Action
additionalProperties: false
description: An action an entity can take
- policy.Action.StandardAction:
- type: string
- title: StandardAction
- enum:
- - STANDARD_ACTION_UNSPECIFIED
- - STANDARD_ACTION_DECRYPT
- - STANDARD_ACTION_TRANSMIT
- policy.Algorithm:
- type: string
- title: Algorithm
- enum:
- - ALGORITHM_UNSPECIFIED
- - ALGORITHM_RSA_2048
- - ALGORITHM_RSA_4096
- - ALGORITHM_EC_P256
- - ALGORITHM_EC_P384
- - ALGORITHM_EC_P521
- - ALGORITHM_HPQT_XWING
- - ALGORITHM_HPQT_SECP256R1_MLKEM768
- - ALGORITHM_HPQT_SECP384R1_MLKEM1024
- description: Supported key algorithms.
policy.Attribute:
type: object
properties:
@@ -778,14 +779,6 @@ components:
required:
- rule
additionalProperties: false
- policy.AttributeRuleTypeEnum:
- type: string
- title: AttributeRuleTypeEnum
- enum:
- - ATTRIBUTE_RULE_TYPE_ENUM_UNSPECIFIED
- - ATTRIBUTE_RULE_TYPE_ENUM_ALL_OF
- - ATTRIBUTE_RULE_TYPE_ENUM_ANY_OF
- - ATTRIBUTE_RULE_TYPE_ENUM_HIERARCHY
policy.Condition:
type: object
properties:
@@ -803,6 +796,7 @@ components:
type: array
items:
type: string
+ minItems: 1
title: subject_external_values
minItems: 1
description: |-
@@ -818,13 +812,6 @@ components:
*
A Condition defines a rule of
- policy.ConditionBooleanTypeEnum:
- type: string
- title: ConditionBooleanTypeEnum
- enum:
- - CONDITION_BOOLEAN_TYPE_ENUM_UNSPECIFIED
- - CONDITION_BOOLEAN_TYPE_ENUM_AND
- - CONDITION_BOOLEAN_TYPE_ENUM_OR
policy.ConditionGroup:
type: object
properties:
@@ -861,7 +848,7 @@ components:
alg:
not:
enum:
- - KAS_PUBLIC_KEY_ALG_ENUM_UNSPECIFIED
+ - 0
title: alg
description: |-
A known algorithm type with any additional parameters encoded.
@@ -873,19 +860,6 @@ components:
description: |-
Deprecated
A KAS public key and some associated metadata for further identifcation
- policy.KasPublicKeyAlgEnum:
- type: string
- title: KasPublicKeyAlgEnum
- enum:
- - KAS_PUBLIC_KEY_ALG_ENUM_UNSPECIFIED
- - KAS_PUBLIC_KEY_ALG_ENUM_RSA_2048
- - KAS_PUBLIC_KEY_ALG_ENUM_RSA_4096
- - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP256R1
- - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP384R1
- - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP521R1
- - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_XWING
- - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP256R1_MLKEM768
- - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP384R1_MLKEM1024
policy.KasPublicKeySet:
type: object
properties:
@@ -908,9 +882,13 @@ components:
uri:
type: string
title: uri
- description: |
+ description: |+
Address of a KAS instance
- uri_format // URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.
+ URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.:
+ ```
+ this.matches('^https?://[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?)*(:[0-9]+)?(/.*)?$')
+ ```
+
publicKey:
title: public_key
description: 'Deprecated: KAS can have multiple key pairs'
@@ -1108,8 +1086,7 @@ components:
policy.PublicKey:
type: object
oneOf:
- - type: object
- properties:
+ - properties:
cached:
title: cached
description: public key with additional information. Current preferred version
@@ -1117,14 +1094,17 @@ components:
title: cached
required:
- cached
- - type: object
- properties:
+ - properties:
remote:
type: string
title: remote
- description: |
+ description: |+
kas public key url - optional since can also be retrieved via public key
- uri_format // URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.
+ URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.:
+ ```
+ this.matches('^https://[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?)*(/.*)?$')
+ ```
+
title: remote
required:
- remote
@@ -1201,6 +1181,14 @@ components:
description: |-
Resource Mapping Groups are namespaced collections of Resource Mappings
associated under a common group name.
+ policy.Search:
+ type: object
+ properties:
+ term:
+ type: string
+ title: term
+ title: Search
+ additionalProperties: false
policy.SimpleKasKey:
type: object
properties:
@@ -1232,29 +1220,6 @@ components:
title: pem
title: SimpleKasPublicKey
additionalProperties: false
- policy.SortDirection:
- type: string
- title: SortDirection
- enum:
- - SORT_DIRECTION_UNSPECIFIED
- - SORT_DIRECTION_ASC
- - SORT_DIRECTION_DESC
- description: |-
- Sorting direction shared across list APIs.
- When the 'sort' field is omitted or the chosen sort 'field' is UNSPECIFIED,
- the endpoint's request message defines the default ordering; see the
- specific List* request docs.
- policy.SourceType:
- type: string
- title: SourceType
- enum:
- - SOURCE_TYPE_UNSPECIFIED
- - SOURCE_TYPE_INTERNAL
- - SOURCE_TYPE_EXTERNAL
- description: |-
- Describes whether this kas is managed by the organization or if they imported
- the kas information from an external party. These two modes are necessary in order
- to encrypt a tdf dek with an external parties kas public key.
policy.SubjectConditionSet:
type: object
properties:
@@ -1320,14 +1285,6 @@ components:
description: |-
Subject Mapping: A Policy assigning Subject Set(s) to a permitted attribute
value + action(s) combination
- policy.SubjectMappingOperatorEnum:
- type: string
- title: SubjectMappingOperatorEnum
- enum:
- - SUBJECT_MAPPING_OPERATOR_ENUM_UNSPECIFIED
- - SUBJECT_MAPPING_OPERATOR_ENUM_IN
- - SUBJECT_MAPPING_OPERATOR_ENUM_NOT_IN
- - SUBJECT_MAPPING_OPERATOR_ENUM_IN_CONTAINS
policy.SubjectProperty:
type: object
properties:
@@ -1348,6 +1305,7 @@ components:
authoritative source such as an IDP (Identity Provider) or User Store.
Examples include such ADFS/LDAP, OKTA, etc. For now, a valid property must
contain both a selector expression & a resulting value.
+
The external_selector_value is a specifier to select a value from a flattened
external representation of an Entity (such as from idP/LDAP), and the
external_value is the value selected by the external_selector_value on that
@@ -1461,17 +1419,25 @@ components:
$ref: '#/components/schemas/policy.Action'
title: actions
minItems: 1
- description: |
+ description: |+
Required
The actions permitted by subjects in this mapping
- action_name_or_id_not_empty // Action name or ID must not be empty if provided
+ Action name or ID must not be empty if provided:
+ ```
+ this.all(item, item.name != '' || item.id != '')
+ ```
+
existingSubjectConditionSetId:
type: string
title: existing_subject_condition_set_id
- description: |
+ description: |+
Either of the following:
Reuse existing SubjectConditionSet (NOTE: prioritized over new_subject_condition_set)
- optional_uuid_format // Optional field must be a valid UUID
+ Optional field must be a valid UUID:
+ ```
+ size(this) == 0 || this.matches('[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}')
+ ```
+
newSubjectConditionSet:
title: new_subject_condition_set
description: 'Create new SubjectConditionSet (NOTE: ignored if existing_subject_condition_set_id is provided)'
@@ -1626,6 +1592,10 @@ components:
- direction UNSPECIFIED defaults to DESC for the specified field
- field UNSPECIFIED defaults to created_at with the specified direction
- both UNSPECIFIED or sort omitted defaults to created_at DESC
+ search:
+ title: search
+ description: Optional
+ $ref: '#/components/schemas/policy.Search'
title: ListSubjectConditionSetsRequest
additionalProperties: false
policy.subjectmapping.ListSubjectConditionSetsResponse:
@@ -1669,6 +1639,10 @@ components:
- direction UNSPECIFIED defaults to DESC for the specified field
- field UNSPECIFIED defaults to created_at with the specified direction
- both UNSPECIFIED or sort omitted defaults to created_at DESC
+ search:
+ title: search
+ description: Optional
+ $ref: '#/components/schemas/policy.Search'
title: ListSubjectMappingsRequest
additionalProperties: false
policy.subjectmapping.ListSubjectMappingsResponse:
@@ -1708,20 +1682,6 @@ components:
title: subject_mappings
title: MatchSubjectMappingsResponse
additionalProperties: false
- policy.subjectmapping.SortSubjectConditionSetsType:
- type: string
- title: SortSubjectConditionSetsType
- enum:
- - SORT_SUBJECT_CONDITION_SETS_TYPE_UNSPECIFIED
- - SORT_SUBJECT_CONDITION_SETS_TYPE_CREATED_AT
- - SORT_SUBJECT_CONDITION_SETS_TYPE_UPDATED_AT
- policy.subjectmapping.SortSubjectMappingsType:
- type: string
- title: SortSubjectMappingsType
- enum:
- - SORT_SUBJECT_MAPPINGS_TYPE_UNSPECIFIED
- - SORT_SUBJECT_MAPPINGS_TYPE_CREATED_AT
- - SORT_SUBJECT_MAPPINGS_TYPE_UPDATED_AT
policy.subjectmapping.SubjectConditionSetCreate:
type: object
properties:
@@ -1807,19 +1767,27 @@ components:
subjectConditionSetId:
type: string
title: subject_condition_set_id
- description: |
+ description: |+
Optional
Replaces the existing SubjectConditionSet id with a new one
- optional_uuid_format // Optional field must be a valid UUID
+ Optional field must be a valid UUID:
+ ```
+ size(this) == 0 || this.matches('[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}')
+ ```
+
actions:
type: array
items:
$ref: '#/components/schemas/policy.Action'
title: actions
- description: |
+ description: |+
Optional
Replaces entire list of actions permitted by subjects
- action_name_or_id_not_empty // Action name or ID must not be empty if provided
+ Action name or ID must not be empty if provided:
+ ```
+ this.size() == 0 || this.all(item, item.name != '' || item.id != '')
+ ```
+
metadata:
title: metadata
description: Common metadata
@@ -1838,6 +1806,63 @@ components:
$ref: '#/components/schemas/policy.SubjectMapping'
title: UpdateSubjectMappingResponse
additionalProperties: false
+ connect-protocol-version:
+ type: number
+ title: Connect-Protocol-Version
+ enum:
+ - 1
+ description: Define the version of the Connect protocol
+ const: 1
+ connect-timeout-header:
+ type: number
+ title: Connect-Timeout-Ms
+ description: Define the timeout, in ms
+ connect.error:
+ type: object
+ properties:
+ code:
+ type: string
+ examples:
+ - not_found
+ enum:
+ - canceled
+ - unknown
+ - invalid_argument
+ - deadline_exceeded
+ - not_found
+ - already_exists
+ - permission_denied
+ - resource_exhausted
+ - failed_precondition
+ - aborted
+ - out_of_range
+ - unimplemented
+ - internal
+ - unavailable
+ - data_loss
+ - unauthenticated
+ description: The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
+ message:
+ type: string
+ description: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
+ detail:
+ $ref: '#/components/schemas/google.protobuf.Any'
+ title: Connect Error
+ additionalProperties: true
+ description: 'Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation'
+ google.protobuf.Any:
+ type: object
+ properties:
+ type:
+ type: string
+ value:
+ type: string
+ format: binary
+ debug:
+ type: object
+ additionalProperties: true
+ additionalProperties: true
+ description: Contains an arbitrary serialized message along with a @type that describes the type of the serialized message.
security: []
tags:
- name: policy.subjectmapping.SubjectMappingService
diff --git a/docs/openapi/policy/unsafe/unsafe.openapi.yaml b/docs/openapi/policy/unsafe/unsafe.openapi.yaml
index 168c60f735..279b0154a6 100644
--- a/docs/openapi/policy/unsafe/unsafe.openapi.yaml
+++ b/docs/openapi/policy/unsafe/unsafe.openapi.yaml
@@ -2,12 +2,16 @@ openapi: 3.1.0
info:
title: policy.unsafe
paths:
- /policy.unsafe.UnsafeService/UnsafeDeleteAttribute:
+ /policy.unsafe.UnsafeService/UnsafeUpdateNamespace:
post:
tags:
- policy.unsafe.UnsafeService
- summary: UnsafeDeleteAttribute
- operationId: policy.unsafe.UnsafeService.UnsafeDeleteAttribute
+ summary: UnsafeUpdateNamespace
+ description: |-
+ --------------------------------------*
+ Namespace RPCs
+ ---------------------------------------
+ operationId: policy.unsafe.UnsafeService.UnsafeUpdateNamespace
parameters:
- name: Connect-Protocol-Version
in: header
@@ -22,7 +26,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.unsafe.UnsafeDeleteAttributeRequest'
+ $ref: '#/components/schemas/policy.unsafe.UnsafeUpdateNamespaceRequest'
required: true
responses:
default:
@@ -36,13 +40,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.unsafe.UnsafeDeleteAttributeResponse'
- /policy.unsafe.UnsafeService/UnsafeDeleteAttributeValue:
+ $ref: '#/components/schemas/policy.unsafe.UnsafeUpdateNamespaceResponse'
+ /policy.unsafe.UnsafeService/UnsafeReactivateNamespace:
post:
tags:
- policy.unsafe.UnsafeService
- summary: UnsafeDeleteAttributeValue
- operationId: policy.unsafe.UnsafeService.UnsafeDeleteAttributeValue
+ summary: UnsafeReactivateNamespace
+ operationId: policy.unsafe.UnsafeService.UnsafeReactivateNamespace
parameters:
- name: Connect-Protocol-Version
in: header
@@ -57,7 +61,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.unsafe.UnsafeDeleteAttributeValueRequest'
+ $ref: '#/components/schemas/policy.unsafe.UnsafeReactivateNamespaceRequest'
required: true
responses:
default:
@@ -71,17 +75,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.unsafe.UnsafeDeleteAttributeValueResponse'
- /policy.unsafe.UnsafeService/UnsafeDeleteKasKey:
+ $ref: '#/components/schemas/policy.unsafe.UnsafeReactivateNamespaceResponse'
+ /policy.unsafe.UnsafeService/UnsafeDeleteNamespace:
post:
tags:
- policy.unsafe.UnsafeService
- summary: UnsafeDeleteKasKey
- description: |-
- --------------------------------------*
- Kas Key RPCs
- ---------------------------------------
- operationId: policy.unsafe.UnsafeService.UnsafeDeleteKasKey
+ summary: UnsafeDeleteNamespace
+ operationId: policy.unsafe.UnsafeService.UnsafeDeleteNamespace
parameters:
- name: Connect-Protocol-Version
in: header
@@ -96,7 +96,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.unsafe.UnsafeDeleteKasKeyRequest'
+ $ref: '#/components/schemas/policy.unsafe.UnsafeDeleteNamespaceRequest'
required: true
responses:
default:
@@ -110,13 +110,17 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.unsafe.UnsafeDeleteKasKeyResponse'
- /policy.unsafe.UnsafeService/UnsafeDeleteNamespace:
+ $ref: '#/components/schemas/policy.unsafe.UnsafeDeleteNamespaceResponse'
+ /policy.unsafe.UnsafeService/UnsafeUpdateAttribute:
post:
tags:
- policy.unsafe.UnsafeService
- summary: UnsafeDeleteNamespace
- operationId: policy.unsafe.UnsafeService.UnsafeDeleteNamespace
+ summary: UnsafeUpdateAttribute
+ description: |-
+ --------------------------------------*
+ Attribute RPCs
+ ---------------------------------------
+ operationId: policy.unsafe.UnsafeService.UnsafeUpdateAttribute
parameters:
- name: Connect-Protocol-Version
in: header
@@ -131,7 +135,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.unsafe.UnsafeDeleteNamespaceRequest'
+ $ref: '#/components/schemas/policy.unsafe.UnsafeUpdateAttributeRequest'
required: true
responses:
default:
@@ -145,7 +149,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.unsafe.UnsafeDeleteNamespaceResponse'
+ $ref: '#/components/schemas/policy.unsafe.UnsafeUpdateAttributeResponse'
/policy.unsafe.UnsafeService/UnsafeReactivateAttribute:
post:
tags:
@@ -181,12 +185,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/policy.unsafe.UnsafeReactivateAttributeResponse'
- /policy.unsafe.UnsafeService/UnsafeReactivateAttributeValue:
+ /policy.unsafe.UnsafeService/UnsafeDeleteAttribute:
post:
tags:
- policy.unsafe.UnsafeService
- summary: UnsafeReactivateAttributeValue
- operationId: policy.unsafe.UnsafeService.UnsafeReactivateAttributeValue
+ summary: UnsafeDeleteAttribute
+ operationId: policy.unsafe.UnsafeService.UnsafeDeleteAttribute
parameters:
- name: Connect-Protocol-Version
in: header
@@ -201,7 +205,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.unsafe.UnsafeReactivateAttributeValueRequest'
+ $ref: '#/components/schemas/policy.unsafe.UnsafeDeleteAttributeRequest'
required: true
responses:
default:
@@ -215,13 +219,17 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.unsafe.UnsafeReactivateAttributeValueResponse'
- /policy.unsafe.UnsafeService/UnsafeReactivateNamespace:
+ $ref: '#/components/schemas/policy.unsafe.UnsafeDeleteAttributeResponse'
+ /policy.unsafe.UnsafeService/UnsafeUpdateAttributeValue:
post:
tags:
- policy.unsafe.UnsafeService
- summary: UnsafeReactivateNamespace
- operationId: policy.unsafe.UnsafeService.UnsafeReactivateNamespace
+ summary: UnsafeUpdateAttributeValue
+ description: |-
+ --------------------------------------*
+ Value RPCs
+ ---------------------------------------
+ operationId: policy.unsafe.UnsafeService.UnsafeUpdateAttributeValue
parameters:
- name: Connect-Protocol-Version
in: header
@@ -236,7 +244,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.unsafe.UnsafeReactivateNamespaceRequest'
+ $ref: '#/components/schemas/policy.unsafe.UnsafeUpdateAttributeValueRequest'
required: true
responses:
default:
@@ -250,17 +258,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.unsafe.UnsafeReactivateNamespaceResponse'
- /policy.unsafe.UnsafeService/UnsafeUpdateAttribute:
+ $ref: '#/components/schemas/policy.unsafe.UnsafeUpdateAttributeValueResponse'
+ /policy.unsafe.UnsafeService/UnsafeReactivateAttributeValue:
post:
tags:
- policy.unsafe.UnsafeService
- summary: UnsafeUpdateAttribute
- description: |-
- --------------------------------------*
- Attribute RPCs
- ---------------------------------------
- operationId: policy.unsafe.UnsafeService.UnsafeUpdateAttribute
+ summary: UnsafeReactivateAttributeValue
+ operationId: policy.unsafe.UnsafeService.UnsafeReactivateAttributeValue
parameters:
- name: Connect-Protocol-Version
in: header
@@ -275,7 +279,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.unsafe.UnsafeUpdateAttributeRequest'
+ $ref: '#/components/schemas/policy.unsafe.UnsafeReactivateAttributeValueRequest'
required: true
responses:
default:
@@ -289,17 +293,13 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.unsafe.UnsafeUpdateAttributeResponse'
- /policy.unsafe.UnsafeService/UnsafeUpdateAttributeValue:
+ $ref: '#/components/schemas/policy.unsafe.UnsafeReactivateAttributeValueResponse'
+ /policy.unsafe.UnsafeService/UnsafeDeleteAttributeValue:
post:
tags:
- policy.unsafe.UnsafeService
- summary: UnsafeUpdateAttributeValue
- description: |-
- --------------------------------------*
- Value RPCs
- ---------------------------------------
- operationId: policy.unsafe.UnsafeService.UnsafeUpdateAttributeValue
+ summary: UnsafeDeleteAttributeValue
+ operationId: policy.unsafe.UnsafeService.UnsafeDeleteAttributeValue
parameters:
- name: Connect-Protocol-Version
in: header
@@ -314,7 +314,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.unsafe.UnsafeUpdateAttributeValueRequest'
+ $ref: '#/components/schemas/policy.unsafe.UnsafeDeleteAttributeValueRequest'
required: true
responses:
default:
@@ -328,17 +328,17 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.unsafe.UnsafeUpdateAttributeValueResponse'
- /policy.unsafe.UnsafeService/UnsafeUpdateNamespace:
+ $ref: '#/components/schemas/policy.unsafe.UnsafeDeleteAttributeValueResponse'
+ /policy.unsafe.UnsafeService/UnsafeDeleteKasKey:
post:
tags:
- policy.unsafe.UnsafeService
- summary: UnsafeUpdateNamespace
+ summary: UnsafeDeleteKasKey
description: |-
--------------------------------------*
- Namespace RPCs
+ Kas Key RPCs
---------------------------------------
- operationId: policy.unsafe.UnsafeService.UnsafeUpdateNamespace
+ operationId: policy.unsafe.UnsafeService.UnsafeDeleteKasKey
parameters:
- name: Connect-Protocol-Version
in: header
@@ -353,7 +353,7 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.unsafe.UnsafeUpdateNamespaceRequest'
+ $ref: '#/components/schemas/policy.unsafe.UnsafeDeleteKasKeyRequest'
required: true
responses:
default:
@@ -367,9 +367,95 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/policy.unsafe.UnsafeUpdateNamespaceResponse'
+ $ref: '#/components/schemas/policy.unsafe.UnsafeDeleteKasKeyResponse'
components:
schemas:
+ policy.Action.StandardAction:
+ type: string
+ title: StandardAction
+ enum:
+ - STANDARD_ACTION_UNSPECIFIED
+ - STANDARD_ACTION_DECRYPT
+ - STANDARD_ACTION_TRANSMIT
+ policy.Algorithm:
+ type: string
+ title: Algorithm
+ enum:
+ - ALGORITHM_UNSPECIFIED
+ - ALGORITHM_RSA_2048
+ - ALGORITHM_RSA_4096
+ - ALGORITHM_EC_P256
+ - ALGORITHM_EC_P384
+ - ALGORITHM_EC_P521
+ - ALGORITHM_HPQT_XWING
+ - ALGORITHM_HPQT_SECP256R1_MLKEM768
+ - ALGORITHM_HPQT_SECP384R1_MLKEM1024
+ description: Supported key algorithms.
+ policy.AttributeRuleTypeEnum:
+ type: string
+ title: AttributeRuleTypeEnum
+ enum:
+ - ATTRIBUTE_RULE_TYPE_ENUM_UNSPECIFIED
+ - ATTRIBUTE_RULE_TYPE_ENUM_ALL_OF
+ - ATTRIBUTE_RULE_TYPE_ENUM_ANY_OF
+ - ATTRIBUTE_RULE_TYPE_ENUM_HIERARCHY
+ policy.ConditionBooleanTypeEnum:
+ type: string
+ title: ConditionBooleanTypeEnum
+ enum:
+ - CONDITION_BOOLEAN_TYPE_ENUM_UNSPECIFIED
+ - CONDITION_BOOLEAN_TYPE_ENUM_AND
+ - CONDITION_BOOLEAN_TYPE_ENUM_OR
+ policy.KasPublicKeyAlgEnum:
+ type: string
+ title: KasPublicKeyAlgEnum
+ enum:
+ - KAS_PUBLIC_KEY_ALG_ENUM_UNSPECIFIED
+ - KAS_PUBLIC_KEY_ALG_ENUM_RSA_2048
+ - KAS_PUBLIC_KEY_ALG_ENUM_RSA_4096
+ - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP256R1
+ - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP384R1
+ - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP521R1
+ - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_XWING
+ - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP256R1_MLKEM768
+ - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP384R1_MLKEM1024
+ policy.KeyMode:
+ type: string
+ title: KeyMode
+ enum:
+ - KEY_MODE_UNSPECIFIED
+ - KEY_MODE_CONFIG_ROOT_KEY
+ - KEY_MODE_PROVIDER_ROOT_KEY
+ - KEY_MODE_REMOTE
+ - KEY_MODE_PUBLIC_KEY_ONLY
+ description: Describes the management and operational mode of a cryptographic key.
+ policy.KeyStatus:
+ type: string
+ title: KeyStatus
+ enum:
+ - KEY_STATUS_UNSPECIFIED
+ - KEY_STATUS_ACTIVE
+ - KEY_STATUS_ROTATED
+ description: The status of the key
+ policy.SourceType:
+ type: string
+ title: SourceType
+ enum:
+ - SOURCE_TYPE_UNSPECIFIED
+ - SOURCE_TYPE_INTERNAL
+ - SOURCE_TYPE_EXTERNAL
+ description: |-
+ Describes whether this kas is managed by the organization or if they imported
+ the kas information from an external party. These two modes are necessary in order
+ to encrypt a tdf dek with an external parties kas public key.
+ policy.SubjectMappingOperatorEnum:
+ type: string
+ title: SubjectMappingOperatorEnum
+ enum:
+ - SUBJECT_MAPPING_OPERATOR_ENUM_UNSPECIFIED
+ - SUBJECT_MAPPING_OPERATOR_ENUM_IN
+ - SUBJECT_MAPPING_OPERATOR_ENUM_NOT_IN
+ - SUBJECT_MAPPING_OPERATOR_ENUM_IN_CONTAINS
common.Metadata:
type: object
properties:
@@ -402,75 +488,6 @@ components:
title: value
title: LabelsEntry
additionalProperties: false
- connect-protocol-version:
- type: number
- title: Connect-Protocol-Version
- enum:
- - 1
- description: Define the version of the Connect protocol
- const: 1
- connect-timeout-header:
- type: number
- title: Connect-Timeout-Ms
- description: Define the timeout, in ms
- connect.error:
- type: object
- properties:
- code:
- type: string
- examples:
- - not_found
- enum:
- - canceled
- - unknown
- - invalid_argument
- - deadline_exceeded
- - not_found
- - already_exists
- - permission_denied
- - resource_exhausted
- - failed_precondition
- - aborted
- - out_of_range
- - unimplemented
- - internal
- - unavailable
- - data_loss
- - unauthenticated
- description: The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
- message:
- type: string
- description: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
- details:
- type: array
- items:
- $ref: '#/components/schemas/connect.error_details.Any'
- description: A list of messages that carry the error details. There is no limit on the number of messages.
- title: Connect Error
- additionalProperties: true
- description: 'Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation'
- connect.error_details.Any:
- type: object
- properties:
- type:
- type: string
- description: 'A URL that acts as a globally unique identifier for the type of the serialized message. For example: `type.googleapis.com/google.rpc.ErrorInfo`. This is used to determine the schema of the data in the `value` field and is the discriminator for the `debug` field.'
- value:
- type: string
- format: binary
- description: The Protobuf message, serialized as bytes and base64-encoded. The specific message type is identified by the `type` field.
- debug:
- oneOf:
- - type: object
- title: Any
- additionalProperties: true
- description: Detailed error information.
- discriminator:
- propertyName: type
- title: Debug
- description: Deserialized error detail payload. The 'type' field indicates the schema. This field is for easier debugging and should not be relied upon for application logic.
- additionalProperties: true
- description: Contains an arbitrary serialized message along with a @type that describes the type of the serialized message, with an additional debug field for ConnectRPC error details.
google.protobuf.BoolValue:
type: boolean
description: |-
@@ -483,8 +500,8 @@ components:
google.protobuf.Timestamp:
type: string
examples:
- - "2023-01-15T01:30:15.01Z"
- - "2024-12-25T12:00:00Z"
+ - 1s
+ - 1.000340012s
format: date-time
description: |-
A Timestamp represents a point in time independent of any time zone or local
@@ -578,65 +595,41 @@ components:
) to obtain a formatter capable of generating timestamps in this format.
policy.Action:
type: object
- allOf:
+ oneOf:
- properties:
- id:
+ custom:
type: string
- title: id
- description: Generated uuid in database
- name:
- type: string
- title: name
- namespace:
- title: namespace
- description: Namespace context for this action
- $ref: '#/components/schemas/policy.Namespace'
- metadata:
- title: metadata
- $ref: '#/components/schemas/common.Metadata'
- - oneOf:
- - type: object
- properties:
- custom:
- type: string
- title: custom
- description: Deprecated
title: custom
- required:
- - custom
- - type: object
- properties:
- standard:
- title: standard
- description: Deprecated
- $ref: '#/components/schemas/policy.Action.StandardAction'
+ description: Deprecated
+ title: custom
+ required:
+ - custom
+ - properties:
+ standard:
title: standard
- required:
- - standard
+ description: Deprecated
+ $ref: '#/components/schemas/policy.Action.StandardAction'
+ title: standard
+ required:
+ - standard
+ properties:
+ id:
+ type: string
+ title: id
+ description: Generated uuid in database
+ name:
+ type: string
+ title: name
+ namespace:
+ title: namespace
+ description: Namespace context for this action
+ $ref: '#/components/schemas/policy.Namespace'
+ metadata:
+ title: metadata
+ $ref: '#/components/schemas/common.Metadata'
title: Action
additionalProperties: false
description: An action an entity can take
- policy.Action.StandardAction:
- type: string
- title: StandardAction
- enum:
- - STANDARD_ACTION_UNSPECIFIED
- - STANDARD_ACTION_DECRYPT
- - STANDARD_ACTION_TRANSMIT
- policy.Algorithm:
- type: string
- title: Algorithm
- enum:
- - ALGORITHM_UNSPECIFIED
- - ALGORITHM_RSA_2048
- - ALGORITHM_RSA_4096
- - ALGORITHM_EC_P256
- - ALGORITHM_EC_P384
- - ALGORITHM_EC_P521
- - ALGORITHM_HPQT_XWING
- - ALGORITHM_HPQT_SECP256R1_MLKEM768
- - ALGORITHM_HPQT_SECP384R1_MLKEM1024
- description: Supported key algorithms.
policy.AsymmetricKey:
type: object
properties:
@@ -738,14 +731,6 @@ components:
required:
- rule
additionalProperties: false
- policy.AttributeRuleTypeEnum:
- type: string
- title: AttributeRuleTypeEnum
- enum:
- - ATTRIBUTE_RULE_TYPE_ENUM_UNSPECIFIED
- - ATTRIBUTE_RULE_TYPE_ENUM_ALL_OF
- - ATTRIBUTE_RULE_TYPE_ENUM_ANY_OF
- - ATTRIBUTE_RULE_TYPE_ENUM_HIERARCHY
policy.Condition:
type: object
properties:
@@ -763,6 +748,7 @@ components:
type: array
items:
type: string
+ minItems: 1
title: subject_external_values
minItems: 1
description: |-
@@ -778,13 +764,6 @@ components:
*
A Condition defines a rule of
- policy.ConditionBooleanTypeEnum:
- type: string
- title: ConditionBooleanTypeEnum
- enum:
- - CONDITION_BOOLEAN_TYPE_ENUM_UNSPECIFIED
- - CONDITION_BOOLEAN_TYPE_ENUM_AND
- - CONDITION_BOOLEAN_TYPE_ENUM_OR
policy.ConditionGroup:
type: object
properties:
@@ -835,7 +814,7 @@ components:
alg:
not:
enum:
- - KAS_PUBLIC_KEY_ALG_ENUM_UNSPECIFIED
+ - 0
title: alg
description: |-
A known algorithm type with any additional parameters encoded.
@@ -847,19 +826,6 @@ components:
description: |-
Deprecated
A KAS public key and some associated metadata for further identifcation
- policy.KasPublicKeyAlgEnum:
- type: string
- title: KasPublicKeyAlgEnum
- enum:
- - KAS_PUBLIC_KEY_ALG_ENUM_UNSPECIFIED
- - KAS_PUBLIC_KEY_ALG_ENUM_RSA_2048
- - KAS_PUBLIC_KEY_ALG_ENUM_RSA_4096
- - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP256R1
- - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP384R1
- - KAS_PUBLIC_KEY_ALG_ENUM_EC_SECP521R1
- - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_XWING
- - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP256R1_MLKEM768
- - KAS_PUBLIC_KEY_ALG_ENUM_HPQT_SECP384R1_MLKEM1024
policy.KasPublicKeySet:
type: object
properties:
@@ -882,9 +848,13 @@ components:
uri:
type: string
title: uri
- description: |
+ description: |+
Address of a KAS instance
- uri_format // URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.
+ URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.:
+ ```
+ this.matches('^https?://[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?)*(:[0-9]+)?(/.*)?$')
+ ```
+
publicKey:
title: public_key
description: 'Deprecated: KAS can have multiple key pairs'
@@ -912,16 +882,6 @@ components:
title: KeyAccessServer
additionalProperties: false
description: Key Access Server Registry
- policy.KeyMode:
- type: string
- title: KeyMode
- enum:
- - KEY_MODE_UNSPECIFIED
- - KEY_MODE_CONFIG_ROOT_KEY
- - KEY_MODE_PROVIDER_ROOT_KEY
- - KEY_MODE_REMOTE
- - KEY_MODE_PUBLIC_KEY_ONLY
- description: Describes the management and operational mode of a cryptographic key.
policy.KeyProviderConfig:
type: object
properties:
@@ -944,14 +904,6 @@ components:
$ref: '#/components/schemas/common.Metadata'
title: KeyProviderConfig
additionalProperties: false
- policy.KeyStatus:
- type: string
- title: KeyStatus
- enum:
- - KEY_STATUS_UNSPECIFIED
- - KEY_STATUS_ACTIVE
- - KEY_STATUS_ROTATED
- description: The status of the key
policy.Namespace:
type: object
properties:
@@ -1094,8 +1046,7 @@ components:
policy.PublicKey:
type: object
oneOf:
- - type: object
- properties:
+ - properties:
cached:
title: cached
description: public key with additional information. Current preferred version
@@ -1103,14 +1054,17 @@ components:
title: cached
required:
- cached
- - type: object
- properties:
+ - properties:
remote:
type: string
title: remote
- description: |
+ description: |+
kas public key url - optional since can also be retrieved via public key
- uri_format // URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.
+ URI must be a valid URL (e.g., 'https://demo.com/') followed by additional segments. Each segment must start and end with an alphanumeric character, can contain hyphens, alphanumeric characters, and slashes.:
+ ```
+ this.matches('^https://[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?)*(/.*)?$')
+ ```
+
title: remote
required:
- remote
@@ -1228,17 +1182,6 @@ components:
title: pem
title: SimpleKasPublicKey
additionalProperties: false
- policy.SourceType:
- type: string
- title: SourceType
- enum:
- - SOURCE_TYPE_UNSPECIFIED
- - SOURCE_TYPE_INTERNAL
- - SOURCE_TYPE_EXTERNAL
- description: |-
- Describes whether this kas is managed by the organization or if they imported
- the kas information from an external party. These two modes are necessary in order
- to encrypt a tdf dek with an external parties kas public key.
policy.SubjectConditionSet:
type: object
properties:
@@ -1304,14 +1247,6 @@ components:
description: |-
Subject Mapping: A Policy assigning Subject Set(s) to a permitted attribute
value + action(s) combination
- policy.SubjectMappingOperatorEnum:
- type: string
- title: SubjectMappingOperatorEnum
- enum:
- - SUBJECT_MAPPING_OPERATOR_ENUM_UNSPECIFIED
- - SUBJECT_MAPPING_OPERATOR_ENUM_IN
- - SUBJECT_MAPPING_OPERATOR_ENUM_NOT_IN
- - SUBJECT_MAPPING_OPERATOR_ENUM_IN_CONTAINS
policy.SubjectSet:
type: object
properties:
@@ -1590,11 +1525,15 @@ components:
type: string
title: name
maxLength: 253
- description: |
+ description: |+
Optional
WARNING!!
Updating the name of an Attribute will retroactively alter access to existing TDFs of the old and new Attribute name.
- attribute_name_format // Attribute name must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored attribute name will be normalized to lower case.
+ Attribute name must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored attribute name will be normalized to lower case.:
+ ```
+ size(this) > 0 ? this.matches('^[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?$') : true
+ ```
+
rule:
title: rule
description: |-
@@ -1647,9 +1586,13 @@ components:
type: string
title: value
maxLength: 253
- description: |
+ description: |+
Required
- value_format // Attribute Value must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored attribute value will be normalized to lower case.
+ Attribute Value must be an alphanumeric string, allowing hyphens and underscores but not as the first or last character. The stored attribute value will be normalized to lower case.:
+ ```
+ this.matches('^[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?$')
+ ```
+
title: UnsafeUpdateAttributeValueRequest
additionalProperties: false
description: |-
@@ -1675,9 +1618,13 @@ components:
type: string
title: name
maxLength: 253
- description: |
+ description: |+
Required
- namespace_name_format // Namespace must be a valid hostname. It should include at least one dot, with each segment (label) starting and ending with an alphanumeric character. Each label must be 1 to 63 characters long, allowing hyphens but not as the first or last character. The top-level domain (the last segment after the final dot) must consist of at least two alphabetic characters. The stored namespace will be normalized to lower case.
+ Namespace must be a valid hostname. It should include at least one dot, with each segment (label) starting and ending with an alphanumeric character. Each label must be 1 to 63 characters long, allowing hyphens but not as the first or last character. The top-level domain (the last segment after the final dot) must consist of at least two alphabetic characters. The stored namespace will be normalized to lower case.:
+ ```
+ this.matches('^([a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}$')
+ ```
+
title: UnsafeUpdateNamespaceRequest
additionalProperties: false
description: |-
@@ -1692,6 +1639,63 @@ components:
$ref: '#/components/schemas/policy.Namespace'
title: UnsafeUpdateNamespaceResponse
additionalProperties: false
+ connect-protocol-version:
+ type: number
+ title: Connect-Protocol-Version
+ enum:
+ - 1
+ description: Define the version of the Connect protocol
+ const: 1
+ connect-timeout-header:
+ type: number
+ title: Connect-Timeout-Ms
+ description: Define the timeout, in ms
+ connect.error:
+ type: object
+ properties:
+ code:
+ type: string
+ examples:
+ - not_found
+ enum:
+ - canceled
+ - unknown
+ - invalid_argument
+ - deadline_exceeded
+ - not_found
+ - already_exists
+ - permission_denied
+ - resource_exhausted
+ - failed_precondition
+ - aborted
+ - out_of_range
+ - unimplemented
+ - internal
+ - unavailable
+ - data_loss
+ - unauthenticated
+ description: The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
+ message:
+ type: string
+ description: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
+ detail:
+ $ref: '#/components/schemas/google.protobuf.Any'
+ title: Connect Error
+ additionalProperties: true
+ description: 'Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation'
+ google.protobuf.Any:
+ type: object
+ properties:
+ type:
+ type: string
+ value:
+ type: string
+ format: binary
+ debug:
+ type: object
+ additionalProperties: true
+ additionalProperties: true
+ description: Contains an arbitrary serialized message along with a @type that describes the type of the serialized message.
security: []
tags:
- name: policy.unsafe.UnsafeService
diff --git a/docs/openapi/wellknownconfiguration/wellknown_configuration.openapi.yaml b/docs/openapi/wellknownconfiguration/wellknown_configuration.openapi.yaml
index 203cf0b27e..ad18ddfa64 100644
--- a/docs/openapi/wellknownconfiguration/wellknown_configuration.openapi.yaml
+++ b/docs/openapi/wellknownconfiguration/wellknown_configuration.openapi.yaml
@@ -39,75 +39,16 @@ paths:
$ref: '#/components/schemas/wellknownconfiguration.GetWellKnownConfigurationResponse'
components:
schemas:
- connect-protocol-version:
- type: number
- title: Connect-Protocol-Version
+ google.protobuf.NullValue:
+ type: string
+ title: NullValue
enum:
- - 1
- description: Define the version of the Connect protocol
- const: 1
- connect-timeout-header:
- type: number
- title: Connect-Timeout-Ms
- description: Define the timeout, in ms
- connect.error:
- type: object
- properties:
- code:
- type: string
- examples:
- - not_found
- enum:
- - canceled
- - unknown
- - invalid_argument
- - deadline_exceeded
- - not_found
- - already_exists
- - permission_denied
- - resource_exhausted
- - failed_precondition
- - aborted
- - out_of_range
- - unimplemented
- - internal
- - unavailable
- - data_loss
- - unauthenticated
- description: The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
- message:
- type: string
- description: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
- details:
- type: array
- items:
- $ref: '#/components/schemas/connect.error_details.Any'
- description: A list of messages that carry the error details. There is no limit on the number of messages.
- title: Connect Error
- additionalProperties: true
- description: 'Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation'
- connect.error_details.Any:
- type: object
- properties:
- type:
- type: string
- description: 'A URL that acts as a globally unique identifier for the type of the serialized message. For example: `type.googleapis.com/google.rpc.ErrorInfo`. This is used to determine the schema of the data in the `value` field and is the discriminator for the `debug` field.'
- value:
- type: string
- format: binary
- description: The Protobuf message, serialized as bytes and base64-encoded. The specific message type is identified by the `type` field.
- debug:
- oneOf:
- - type: object
- title: Any
- additionalProperties: true
- description: Detailed error information.
- discriminator:
- propertyName: type
- title: Debug
- description: Deserialized error detail payload. The 'type' field indicates the schema. This field is for easier debugging and should not be relied upon for application logic.
- additionalProperties: true
- description: Contains an arbitrary serialized message along with a @type that describes the type of the serialized message, with an additional debug field for ConnectRPC error details.
+ - NULL_VALUE
+ description: |-
+ `NullValue` is a singleton enumeration to represent the null value for the
+ `Value` type union.
+
+ The JSON representation for `NullValue` is JSON `null`.
google.protobuf.ListValue:
type: object
properties:
@@ -123,16 +64,6 @@ components:
`ListValue` is a wrapper around a repeated field of values.
The JSON representation for `ListValue` is JSON array.
- google.protobuf.NullValue:
- type: string
- title: NullValue
- enum:
- - NULL_VALUE
- description: |-
- `NullValue` is a singleton enumeration to represent the null value for the
- `Value` type union.
-
- The JSON representation for `NullValue` is JSON `null`.
google.protobuf.Struct:
type: object
additionalProperties:
@@ -207,6 +138,63 @@ components:
$ref: '#/components/schemas/google.protobuf.Struct'
title: ConfigurationEntry
additionalProperties: false
+ connect-protocol-version:
+ type: number
+ title: Connect-Protocol-Version
+ enum:
+ - 1
+ description: Define the version of the Connect protocol
+ const: 1
+ connect-timeout-header:
+ type: number
+ title: Connect-Timeout-Ms
+ description: Define the timeout, in ms
+ connect.error:
+ type: object
+ properties:
+ code:
+ type: string
+ examples:
+ - not_found
+ enum:
+ - canceled
+ - unknown
+ - invalid_argument
+ - deadline_exceeded
+ - not_found
+ - already_exists
+ - permission_denied
+ - resource_exhausted
+ - failed_precondition
+ - aborted
+ - out_of_range
+ - unimplemented
+ - internal
+ - unavailable
+ - data_loss
+ - unauthenticated
+ description: The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
+ message:
+ type: string
+ description: A developer-facing error message, which should be in English. Any user-facing error message should be localized and sent in the [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
+ detail:
+ $ref: '#/components/schemas/google.protobuf.Any'
+ title: Connect Error
+ additionalProperties: true
+ description: 'Error type returned by Connect: https://connectrpc.com/docs/go/errors/#http-representation'
+ google.protobuf.Any:
+ type: object
+ properties:
+ type:
+ type: string
+ value:
+ type: string
+ format: binary
+ debug:
+ type: object
+ additionalProperties: true
+ additionalProperties: true
+ description: Contains an arbitrary serialized message along with a @type that describes the type of the serialized message.
security: []
tags:
- name: wellknownconfiguration.WellKnownService
diff --git a/protocol/go/policy/attributes/attributes.pb.go b/protocol/go/policy/attributes/attributes.pb.go
index 5eea52a0a9..23da96ca11 100644
--- a/protocol/go/policy/attributes/attributes.pb.go
+++ b/protocol/go/policy/attributes/attributes.pb.go
@@ -382,6 +382,8 @@ type ListAttributesRequest struct {
// - field UNSPECIFIED defaults to created_at with the specified direction
// - both UNSPECIFIED or sort omitted defaults to created_at DESC
Sort []*AttributesSort `protobuf:"bytes,11,rep,name=sort,proto3" json:"sort,omitempty"`
+ // Optional
+ Search *policy.Search `protobuf:"bytes,12,opt,name=search,proto3" json:"search,omitempty"`
}
func (x *ListAttributesRequest) Reset() {
@@ -444,6 +446,13 @@ func (x *ListAttributesRequest) GetSort() []*AttributesSort {
return nil
}
+func (x *ListAttributesRequest) GetSearch() *policy.Search {
+ if x != nil {
+ return x.Search
+ }
+ return nil
+}
+
type ListAttributesResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -2651,7 +2660,7 @@ var file_policy_attributes_attributes_proto_rawDesc = []byte{
0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x53,
0x6f, 0x72, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x08, 0xba, 0x48,
0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f,
- 0x6e, 0x22, 0xda, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62,
+ 0x6e, 0x22, 0x82, 0x02, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62,
0x75, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x05, 0x73,
0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d,
0x6d, 0x6f, 0x6e, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x45,
@@ -2664,195 +2673,59 @@ var file_policy_attributes_attributes_proto_rawDesc = []byte{
0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x6f,
0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e,
0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x53, 0x6f, 0x72, 0x74, 0x42, 0x08,
- 0xba, 0x48, 0x05, 0x92, 0x01, 0x02, 0x10, 0x01, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x22, 0x81,
- 0x01, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
- 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x0a, 0x61, 0x74, 0x74,
- 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e,
- 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
- 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x34, 0x0a, 0x0a,
- 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b,
- 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x22, 0xbe, 0x03, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62,
- 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0d, 0xba, 0x48, 0x08, 0xd8, 0x01, 0x01, 0x72, 0x03,
- 0xb0, 0x01, 0x01, 0x18, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2d, 0x0a, 0x0c, 0x61, 0x74, 0x74,
- 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42,
- 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x0b, 0x61, 0x74, 0x74,
- 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x03, 0x66, 0x71, 0x6e, 0x18,
- 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x10, 0x01, 0x88, 0x01,
- 0x01, 0x48, 0x00, 0x52, 0x03, 0x66, 0x71, 0x6e, 0x3a, 0xaa, 0x02, 0xba, 0x48, 0xa6, 0x02, 0x1a,
- 0xa2, 0x01, 0x0a, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x66, 0x69,
- 0x65, 0x6c, 0x64, 0x73, 0x12, 0x50, 0x45, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x75, 0x73, 0x65,
- 0x20, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x20, 0x27, 0x69, 0x64, 0x27,
- 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x6f, 0x72, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x66,
- 0x20, 0x27, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x27, 0x20,
- 0x6f, 0x72, 0x20, 0x27, 0x66, 0x71, 0x6e, 0x27, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x6e, 0x6f,
- 0x74, 0x20, 0x62, 0x6f, 0x74, 0x68, 0x1a, 0x3c, 0x21, 0x28, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68,
- 0x69, 0x73, 0x2e, 0x69, 0x64, 0x29, 0x20, 0x26, 0x26, 0x20, 0x28, 0x68, 0x61, 0x73, 0x28, 0x74,
- 0x68, 0x69, 0x73, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x69, 0x64,
- 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x66, 0x71,
- 0x6e, 0x29, 0x29, 0x29, 0x1a, 0x7f, 0x0a, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64,
- 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x33, 0x45, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20,
- 0x69, 0x64, 0x20, 0x6f, 0x72, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x74, 0x74,
- 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x20, 0x6f, 0x72, 0x20, 0x66, 0x71, 0x6e,
- 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x73, 0x65, 0x74, 0x1a, 0x37, 0x68, 0x61,
- 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x69, 0x64, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x68, 0x61,
- 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
- 0x5f, 0x69, 0x64, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73,
- 0x2e, 0x66, 0x71, 0x6e, 0x29, 0x42, 0x0c, 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66,
- 0x69, 0x65, 0x72, 0x22, 0x47, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62,
- 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x09, 0x61,
- 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11,
- 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
- 0x65, 0x52, 0x09, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x22, 0x89, 0x05, 0x0a,
- 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73,
- 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba,
- 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x0b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61,
- 0x63, 0x65, 0x49, 0x64, 0x12, 0xaf, 0x02, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x09, 0x42, 0x9a, 0x02, 0xba, 0x48, 0x96, 0x02, 0xba, 0x01, 0x8a, 0x02, 0x0a, 0x15,
- 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x66,
- 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0xb3, 0x01, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
- 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61,
- 0x6e, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x73,
- 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20,
- 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x75, 0x6e, 0x64, 0x65,
- 0x72, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x20, 0x62, 0x75, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20,
- 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x6f, 0x72, 0x20,
- 0x6c, 0x61, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x2e, 0x20,
- 0x54, 0x68, 0x65, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69,
- 0x62, 0x75, 0x74, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62,
- 0x65, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20,
- 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x20, 0x63, 0x61, 0x73, 0x65, 0x2e, 0x1a, 0x3b, 0x74, 0x68, 0x69,
- 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x5b, 0x61, 0x2d, 0x7a,
- 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x3f, 0x3a, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d,
- 0x5a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2a, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30,
- 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x24, 0x27, 0x29, 0xc8, 0x01, 0x01, 0x72, 0x03, 0x18, 0xfd, 0x01,
- 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3e, 0x0a, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x03,
- 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x74,
- 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x75, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x45,
- 0x6e, 0x75, 0x6d, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x01, 0x82, 0x01, 0x02, 0x10, 0x01,
- 0x52, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x12, 0x56, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73,
- 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x42, 0x3e, 0xba, 0x48, 0x3b, 0x92, 0x01, 0x38, 0x08, 0x00,
- 0x18, 0x01, 0x22, 0x32, 0x72, 0x30, 0x18, 0xfd, 0x01, 0x32, 0x2b, 0x5e, 0x5b, 0x61, 0x2d, 0x7a,
- 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x3f, 0x3a, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d,
- 0x5a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2a, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30,
- 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x24, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x43,
- 0x0a, 0x0f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x74, 0x72, 0x61, 0x76, 0x65, 0x72, 0x73, 0x61,
- 0x6c, 0x18, 0x05, 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, 0x0e, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x54, 0x72, 0x61, 0x76, 0x65, 0x72,
- 0x73, 0x61, 0x6c, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18,
- 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d,
- 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x08,
- 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x4a, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61,
- 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0xba, 0x48, 0x05, 0x92, 0x01, 0x02, 0x10, 0x01, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x12, 0x26,
+ 0x0a, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e,
+ 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x06,
+ 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x22, 0x81, 0x01, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x41,
+ 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x12, 0x31, 0x0a, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18,
+ 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41,
+ 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x0a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62,
+ 0x75, 0x74, 0x65, 0x73, 0x12, 0x34, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63,
+ 0x79, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a,
+ 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xbe, 0x03, 0x0a, 0x13, 0x47,
+ 0x65, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0d,
+ 0xba, 0x48, 0x08, 0xd8, 0x01, 0x01, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x18, 0x01, 0x52, 0x02, 0x69,
+ 0x64, 0x12, 0x2d, 0x0a, 0x0c, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x69,
+ 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01,
+ 0x01, 0x48, 0x00, 0x52, 0x0b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x49, 0x64,
+ 0x12, 0x1e, 0x0a, 0x03, 0x66, 0x71, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba,
+ 0x48, 0x07, 0x72, 0x05, 0x10, 0x01, 0x88, 0x01, 0x01, 0x48, 0x00, 0x52, 0x03, 0x66, 0x71, 0x6e,
+ 0x3a, 0xaa, 0x02, 0xba, 0x48, 0xa6, 0x02, 0x1a, 0xa2, 0x01, 0x0a, 0x10, 0x65, 0x78, 0x63, 0x6c,
+ 0x75, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x50, 0x45, 0x69,
+ 0x74, 0x68, 0x65, 0x72, 0x20, 0x75, 0x73, 0x65, 0x20, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61,
+ 0x74, 0x65, 0x64, 0x20, 0x27, 0x69, 0x64, 0x27, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x6f,
+ 0x72, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x27, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62,
+ 0x75, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x27, 0x20, 0x6f, 0x72, 0x20, 0x27, 0x66, 0x71, 0x6e, 0x27,
+ 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x6f, 0x74, 0x68, 0x1a, 0x3c,
+ 0x21, 0x28, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x69, 0x64, 0x29, 0x20, 0x26,
+ 0x26, 0x20, 0x28, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x61, 0x74, 0x74, 0x72,
+ 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x68, 0x61, 0x73,
+ 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x66, 0x71, 0x6e, 0x29, 0x29, 0x29, 0x1a, 0x7f, 0x0a, 0x0f,
+ 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12,
+ 0x33, 0x45, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x69, 0x64, 0x20, 0x6f, 0x72, 0x20, 0x6f, 0x6e,
+ 0x65, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x69,
+ 0x64, 0x20, 0x6f, 0x72, 0x20, 0x66, 0x71, 0x6e, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65,
+ 0x20, 0x73, 0x65, 0x74, 0x1a, 0x37, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x69,
+ 0x64, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x61,
+ 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x29, 0x20, 0x7c, 0x7c, 0x20,
+ 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x66, 0x71, 0x6e, 0x29, 0x42, 0x0c, 0x0a,
+ 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x22, 0x47, 0x0a, 0x14, 0x47,
+ 0x65, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x09, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e,
0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x09, 0x61, 0x74, 0x74, 0x72, 0x69,
- 0x62, 0x75, 0x74, 0x65, 0x22, 0xbd, 0x01, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41,
+ 0x62, 0x75, 0x74, 0x65, 0x22, 0x89, 0x05, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41,
0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
- 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05,
- 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74,
- 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f,
- 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x75, 0x74,
- 0x61, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x54,
- 0x0a, 0x18, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74,
- 0x65, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x18, 0x65, 0x20, 0x01, 0x28, 0x0e,
- 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61,
- 0x74, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x16, 0x6d, 0x65,
- 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x65, 0x68, 0x61,
- 0x76, 0x69, 0x6f, 0x72, 0x22, 0x4a, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x74,
- 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
- 0x2f, 0x0a, 0x09, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x74, 0x74, 0x72,
- 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x09, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
- 0x22, 0x36, 0x0a, 0x1a, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x41, 0x74,
- 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18,
- 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72,
- 0x03, 0xb0, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x4e, 0x0a, 0x1b, 0x44, 0x65, 0x61, 0x63,
- 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52,
- 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x09, 0x61, 0x74, 0x74, 0x72, 0x69,
- 0x62, 0x75, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c,
- 0x69, 0x63, 0x79, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x09, 0x61,
- 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x22, 0xab, 0x03, 0x0a, 0x18, 0x47, 0x65, 0x74,
- 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x09, 0x42, 0x0d, 0xba, 0x48, 0x08, 0xd8, 0x01, 0x01, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x18, 0x01,
- 0x52, 0x02, 0x69, 0x64, 0x12, 0x25, 0x0a, 0x08, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x69, 0x64,
- 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01,
- 0x48, 0x00, 0x52, 0x07, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x03, 0x66,
- 0x71, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x10,
- 0x01, 0x88, 0x01, 0x01, 0x48, 0x00, 0x52, 0x03, 0x66, 0x71, 0x6e, 0x3a, 0x9a, 0x02, 0xba, 0x48,
- 0x96, 0x02, 0x1a, 0x9a, 0x01, 0x0a, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65,
- 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x4c, 0x45, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20,
- 0x75, 0x73, 0x65, 0x20, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x20, 0x27,
- 0x69, 0x64, 0x27, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x6f, 0x72, 0x20, 0x6f, 0x6e, 0x65,
- 0x20, 0x6f, 0x66, 0x20, 0x27, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x69, 0x64, 0x27, 0x20, 0x6f,
- 0x72, 0x20, 0x27, 0x66, 0x71, 0x6e, 0x27, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x6e, 0x6f, 0x74,
- 0x20, 0x62, 0x6f, 0x74, 0x68, 0x1a, 0x38, 0x21, 0x28, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69,
- 0x73, 0x2e, 0x69, 0x64, 0x29, 0x20, 0x26, 0x26, 0x20, 0x28, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68,
- 0x69, 0x73, 0x2e, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x69, 0x64, 0x29, 0x20, 0x7c, 0x7c, 0x20,
- 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x66, 0x71, 0x6e, 0x29, 0x29, 0x29, 0x1a,
- 0x77, 0x0a, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x65, 0x6c,
- 0x64, 0x73, 0x12, 0x2f, 0x45, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x69, 0x64, 0x20, 0x6f, 0x72,
- 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x69, 0x64,
- 0x20, 0x6f, 0x72, 0x20, 0x66, 0x71, 0x6e, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20,
- 0x73, 0x65, 0x74, 0x1a, 0x33, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x69, 0x64,
- 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x76, 0x61,
- 0x6c, 0x75, 0x65, 0x5f, 0x69, 0x64, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x68, 0x61, 0x73, 0x28, 0x74,
- 0x68, 0x69, 0x73, 0x2e, 0x66, 0x71, 0x6e, 0x29, 0x42, 0x0c, 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e,
- 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x22, 0x40, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x41, 0x74, 0x74,
- 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x56, 0x61, 0x6c, 0x75,
- 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xad, 0x01, 0x0a, 0x1a, 0x4c, 0x69, 0x73,
- 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x0c, 0x61, 0x74, 0x74, 0x72, 0x69,
- 0x62, 0x75, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba,
- 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x0b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
- 0x74, 0x65, 0x49, 0x64, 0x12, 0x2d, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x41, 0x63, 0x74,
- 0x69, 0x76, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x73, 0x74,
- 0x61, 0x74, 0x65, 0x12, 0x33, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
- 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61,
- 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x7a, 0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74,
- 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52,
- 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65,
- 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
- 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x34,
- 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01,
- 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x61, 0x67, 0x65,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x95, 0x02, 0x0a, 0x26, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
- 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
- 0x4a, 0x0a, 0x10, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x61,
- 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
- 0x6f, 0x6e, 0x2e, 0x49, 0x64, 0x46, 0x71, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69,
- 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x0f, 0x6f, 0x62, 0x6c, 0x69,
- 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x38, 0x0a, 0x06, 0x61,
- 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f,
- 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x49, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74,
- 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x61,
- 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x30, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74,
- 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x07,
- 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64,
- 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
- 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x75, 0x74, 0x61, 0x62,
- 0x6c, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0xb1, 0x04, 0x0a,
- 0x1b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
- 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x0c,
- 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x0b, 0x61, 0x74,
- 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x49, 0x64, 0x12, 0xb4, 0x02, 0x0a, 0x05, 0x76, 0x61,
- 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x9d, 0x02, 0xba, 0x48, 0x99, 0x02,
- 0xba, 0x01, 0x8d, 0x02, 0x0a, 0x16, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f,
- 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0xb5, 0x01, 0x41,
- 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6d,
+ 0x2b, 0x0a, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52,
+ 0x0b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0xaf, 0x02, 0x0a,
+ 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x9a, 0x02, 0xba, 0x48,
+ 0x96, 0x02, 0xba, 0x01, 0x8a, 0x02, 0x0a, 0x15, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+ 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0xb3, 0x01,
+ 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d,
0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e,
0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x61,
0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e, 0x73, 0x20,
@@ -2860,395 +2733,534 @@ var file_policy_attributes_attributes_proto_rawDesc = []byte{
0x62, 0x75, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66,
0x69, 0x72, 0x73, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61,
0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x73, 0x74, 0x6f, 0x72,
- 0x65, 0x64, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x76, 0x61, 0x6c,
- 0x75, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61,
- 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x20, 0x63,
- 0x61, 0x73, 0x65, 0x2e, 0x1a, 0x3b, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68,
- 0x65, 0x73, 0x28, 0x27, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d,
- 0x28, 0x3f, 0x3a, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d,
- 0x2a, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x24, 0x27,
- 0x29, 0xc8, 0x01, 0x01, 0x72, 0x03, 0x18, 0xfd, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
- 0x12, 0x6a, 0x0a, 0x13, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74,
- 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e,
- 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
- 0x73, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65,
- 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65,
- 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x12, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x73, 0x12, 0x33, 0x0a, 0x08,
- 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17,
- 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
- 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
- 0x61, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73,
- 0x22, 0x43, 0x0a, 0x1c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62,
- 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x12, 0x23, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x0d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05,
- 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xd1, 0x01, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
- 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12,
+ 0x65, 0x64, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x20, 0x6e, 0x61, 0x6d,
+ 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c,
+ 0x69, 0x7a, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x20, 0x63, 0x61,
+ 0x73, 0x65, 0x2e, 0x1a, 0x3b, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65,
+ 0x73, 0x28, 0x27, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28,
+ 0x3f, 0x3a, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2a,
+ 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x24, 0x27, 0x29,
+ 0xc8, 0x01, 0x01, 0x72, 0x03, 0x18, 0xfd, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3e,
+ 0x0a, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x70,
+ 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52,
+ 0x75, 0x6c, 0x65, 0x54, 0x79, 0x70, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x42, 0x0b, 0xba, 0x48, 0x08,
+ 0xc8, 0x01, 0x01, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x12, 0x56,
+ 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x42, 0x3e,
+ 0xba, 0x48, 0x3b, 0x92, 0x01, 0x38, 0x08, 0x00, 0x18, 0x01, 0x22, 0x32, 0x72, 0x30, 0x18, 0xfd,
+ 0x01, 0x32, 0x2b, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28,
+ 0x3f, 0x3a, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2a,
+ 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x24, 0x52, 0x06,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x43, 0x0a, 0x0f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f,
+ 0x74, 0x72, 0x61, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x18, 0x05, 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, 0x0e, 0x61, 0x6c, 0x6c,
+ 0x6f, 0x77, 0x54, 0x72, 0x61, 0x76, 0x65, 0x72, 0x73, 0x61, 0x6c, 0x12, 0x33, 0x0a, 0x08, 0x6d,
+ 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e,
+ 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d,
+ 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
+ 0x22, 0x4a, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62,
+ 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x09, 0x61,
+ 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11,
+ 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+ 0x65, 0x52, 0x09, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x22, 0xbd, 0x01, 0x0a,
+ 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x02, 0x69,
+ 0x64, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74,
+ 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x6d, 0x65,
+ 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x54, 0x0a, 0x18, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61,
+ 0x74, 0x61, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69,
+ 0x6f, 0x72, 0x18, 0x65, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f,
+ 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
+ 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x16, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x55, 0x70,
+ 0x64, 0x61, 0x74, 0x65, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x22, 0x4a, 0x0a, 0x17,
+ 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x09, 0x61, 0x74, 0x74, 0x72, 0x69,
+ 0x62, 0x75, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c,
+ 0x69, 0x63, 0x79, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x09, 0x61,
+ 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x22, 0x36, 0x0a, 0x1a, 0x44, 0x65, 0x61, 0x63,
+ 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64,
+ 0x22, 0x4e, 0x0a, 0x1b, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x41, 0x74,
+ 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
+ 0x2f, 0x0a, 0x09, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x74, 0x74, 0x72,
+ 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x09, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
+ 0x22, 0xab, 0x03, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+ 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a,
+ 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0d, 0xba, 0x48, 0x08, 0xd8, 0x01,
+ 0x01, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x18, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x25, 0x0a, 0x08,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08,
+ 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x07, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x03, 0x66, 0x71, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
+ 0x42, 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x10, 0x01, 0x88, 0x01, 0x01, 0x48, 0x00, 0x52, 0x03,
+ 0x66, 0x71, 0x6e, 0x3a, 0x9a, 0x02, 0xba, 0x48, 0x96, 0x02, 0x1a, 0x9a, 0x01, 0x0a, 0x10, 0x65,
+ 0x78, 0x63, 0x6c, 0x75, 0x73, 0x69, 0x76, 0x65, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12,
+ 0x4c, 0x45, 0x69, 0x74, 0x68, 0x65, 0x72, 0x20, 0x75, 0x73, 0x65, 0x20, 0x64, 0x65, 0x70, 0x72,
+ 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x20, 0x27, 0x69, 0x64, 0x27, 0x20, 0x66, 0x69, 0x65, 0x6c,
+ 0x64, 0x20, 0x6f, 0x72, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x27, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x5f, 0x69, 0x64, 0x27, 0x20, 0x6f, 0x72, 0x20, 0x27, 0x66, 0x71, 0x6e, 0x27, 0x2c,
+ 0x20, 0x62, 0x75, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x6f, 0x74, 0x68, 0x1a, 0x38, 0x21,
+ 0x28, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x69, 0x64, 0x29, 0x20, 0x26, 0x26,
+ 0x20, 0x28, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x5f, 0x69, 0x64, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73,
+ 0x2e, 0x66, 0x71, 0x6e, 0x29, 0x29, 0x29, 0x1a, 0x77, 0x0a, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x69,
+ 0x72, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x2f, 0x45, 0x69, 0x74, 0x68,
+ 0x65, 0x72, 0x20, 0x69, 0x64, 0x20, 0x6f, 0x72, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x20,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x69, 0x64, 0x20, 0x6f, 0x72, 0x20, 0x66, 0x71, 0x6e, 0x20,
+ 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x73, 0x65, 0x74, 0x1a, 0x33, 0x68, 0x61, 0x73,
+ 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x69, 0x64, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x68, 0x61, 0x73,
+ 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x69, 0x64, 0x29, 0x20,
+ 0x7c, 0x7c, 0x20, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x66, 0x71, 0x6e, 0x29,
+ 0x42, 0x0c, 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x22, 0x40,
+ 0x0a, 0x19, 0x47, 0x65, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61,
+ 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x05, 0x76,
+ 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x6f, 0x6c,
+ 0x69, 0x63, 0x79, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x22, 0xad, 0x01, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
+ 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+ 0x2b, 0x0a, 0x0c, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52,
+ 0x0b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x49, 0x64, 0x12, 0x2d, 0x0a, 0x05,
+ 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x63, 0x6f,
+ 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65,
+ 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x33, 0x0a, 0x0a, 0x70,
+ 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x13, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+ 0x22, 0x7a, 0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+ 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
+ 0x25, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32,
+ 0x0d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x34, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c,
+ 0x69, 0x63, 0x79, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x95, 0x02, 0x0a,
+ 0x26, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f,
+ 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4a, 0x0a, 0x10, 0x6f, 0x62, 0x6c, 0x69, 0x67,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x49, 0x64, 0x46, 0x71, 0x6e,
+ 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8,
+ 0x01, 0x01, 0x52, 0x0f, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61,
+ 0x6c, 0x75, 0x65, 0x12, 0x38, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x49, 0x64, 0x4e,
+ 0x61, 0x6d, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba,
+ 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x30, 0x0a,
+ 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16,
+ 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x43,
+ 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12,
0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28,
0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64,
0x61, 0x74, 0x61, 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61,
- 0x64, 0x61, 0x74, 0x61, 0x12, 0x54, 0x0a, 0x18, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
- 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72,
- 0x18, 0x65, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e,
- 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x6e,
- 0x75, 0x6d, 0x52, 0x16, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x55, 0x70, 0x64, 0x61,
- 0x74, 0x65, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05,
- 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0x43, 0x0a, 0x1c, 0x55, 0x70, 0x64,
- 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75,
- 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x05, 0x76, 0x61, 0x6c,
- 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63,
- 0x79, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3b,
- 0x0a, 0x1f, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72,
- 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba,
- 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x47, 0x0a, 0x20, 0x44,
- 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
- 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
- 0x23, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d,
- 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76,
- 0x61, 0x6c, 0x75, 0x65, 0x22, 0x54, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69,
- 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x79, 0x46, 0x71, 0x6e, 0x73,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x04, 0x66, 0x71, 0x6e, 0x73, 0x18,
- 0x01, 0x20, 0x03, 0x28, 0x09, 0x42, 0x0b, 0xba, 0x48, 0x08, 0x92, 0x01, 0x05, 0x08, 0x01, 0x10,
- 0xfa, 0x01, 0x52, 0x04, 0x66, 0x71, 0x6e, 0x73, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x52, 0x0a,
- 0x77, 0x69, 0x74, 0x68, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x9b, 0x03, 0x0a, 0x20, 0x47,
- 0x65, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65,
- 0x73, 0x42, 0x79, 0x46, 0x71, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
- 0x7d, 0x0a, 0x14, 0x66, 0x71, 0x6e, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
- 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4b, 0x2e,
- 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
- 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61,
- 0x6c, 0x75, 0x65, 0x73, 0x42, 0x79, 0x46, 0x71, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x2e, 0x46, 0x71, 0x6e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56,
- 0x61, 0x6c, 0x75, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x12, 0x66, 0x71, 0x6e, 0x41,
- 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x1a, 0x69,
- 0x0a, 0x11, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x56, 0x61,
- 0x6c, 0x75, 0x65, 0x12, 0x2f, 0x0a, 0x09, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e,
- 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x09, 0x61, 0x74, 0x74, 0x72, 0x69,
- 0x62, 0x75, 0x74, 0x65, 0x12, 0x23, 0x0a, 0x05, 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, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x8c, 0x01, 0x0a, 0x17, 0x46, 0x71,
- 0x6e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73,
- 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x5b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
- 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e,
- 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x74,
- 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x79, 0x46,
- 0x71, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x41, 0x74, 0x74, 0x72,
- 0x69, 0x62, 0x75, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76,
- 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x99, 0x01, 0x0a, 0x27, 0x41, 0x73, 0x73,
- 0x69, 0x67, 0x6e, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76,
- 0x65, 0x72, 0x54, 0x6f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x12, 0x6a, 0x0a, 0x1b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
- 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x73, 0x65, 0x72,
- 0x76, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x6f, 0x6c, 0x69,
- 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x41, 0x74,
- 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73,
- 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x18, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
- 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72,
- 0x3a, 0x02, 0x18, 0x01, 0x22, 0x9a, 0x01, 0x0a, 0x28, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x4b,
- 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x6f,
- 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x12, 0x6a, 0x0a, 0x1b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x6b,
- 0x65, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e,
- 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69,
- 0x62, 0x75, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72,
- 0x76, 0x65, 0x72, 0x52, 0x18, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x4b, 0x65,
- 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x3a, 0x02, 0x18,
- 0x01, 0x22, 0x9b, 0x01, 0x0a, 0x29, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4b, 0x65, 0x79, 0x41,
- 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x46, 0x72, 0x6f, 0x6d, 0x41,
- 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
- 0x6a, 0x0a, 0x1b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79,
- 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74,
- 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
- 0x74, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65,
- 0x72, 0x52, 0x18, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x41,
- 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x3a, 0x02, 0x18, 0x01, 0x22,
- 0x9c, 0x01, 0x0a, 0x2a, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63,
- 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x46, 0x72, 0x6f, 0x6d, 0x41, 0x74, 0x74,
- 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6a,
- 0x0a, 0x1b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x5f,
- 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74,
- 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
- 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72,
- 0x52, 0x18, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63,
- 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x89,
- 0x01, 0x0a, 0x23, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65,
- 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x6f, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5e, 0x0a, 0x17, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f,
- 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65,
- 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
- 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75,
- 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72,
- 0x52, 0x14, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73,
- 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x8a, 0x01, 0x0a, 0x24, 0x41,
- 0x73, 0x73, 0x69, 0x67, 0x6e, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65,
- 0x72, 0x76, 0x65, 0x72, 0x54, 0x6f, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x17, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x6b, 0x65, 0x79,
- 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74,
- 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4b, 0x65,
- 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x14, 0x76,
- 0x61, 0x6c, 0x75, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72,
- 0x76, 0x65, 0x72, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x8b, 0x01, 0x0a, 0x25, 0x52, 0x65, 0x6d, 0x6f,
- 0x76, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65,
- 0x72, 0x46, 0x72, 0x6f, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x12, 0x5e, 0x0a, 0x17, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x61,
- 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72,
- 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4b, 0x65, 0x79, 0x41,
- 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x14, 0x76, 0x61, 0x6c,
- 0x75, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65,
- 0x72, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x8c, 0x01, 0x0a, 0x26, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65,
- 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x46,
- 0x72, 0x6f, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x12, 0x5e, 0x0a, 0x17, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x63,
+ 0x64, 0x61, 0x74, 0x61, 0x22, 0xb1, 0x04, 0x0a, 0x1b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41,
+ 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x0c, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+ 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72,
+ 0x03, 0xb0, 0x01, 0x01, 0x52, 0x0b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x49,
+ 0x64, 0x12, 0xb4, 0x02, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x09, 0x42, 0x9d, 0x02, 0xba, 0x48, 0x99, 0x02, 0xba, 0x01, 0x8d, 0x02, 0x0a, 0x16, 0x61, 0x74,
+ 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x6f,
+ 0x72, 0x6d, 0x61, 0x74, 0x12, 0xb5, 0x01, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
+ 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61,
+ 0x6e, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x73,
+ 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20,
+ 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x75, 0x6e, 0x64, 0x65,
+ 0x72, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x20, 0x62, 0x75, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20,
+ 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x6f, 0x72, 0x20,
+ 0x6c, 0x61, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x2e, 0x20,
+ 0x54, 0x68, 0x65, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x61, 0x74, 0x74, 0x72, 0x69,
+ 0x62, 0x75, 0x74, 0x65, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20,
+ 0x62, 0x65, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x74, 0x6f,
+ 0x20, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x20, 0x63, 0x61, 0x73, 0x65, 0x2e, 0x1a, 0x3b, 0x74, 0x68,
+ 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x5b, 0x61, 0x2d,
+ 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x3f, 0x3a, 0x5b, 0x61, 0x2d, 0x7a, 0x41,
+ 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2a, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a,
+ 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x24, 0x27, 0x29, 0xc8, 0x01, 0x01, 0x72, 0x03, 0x18, 0xfd,
+ 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x6a, 0x0a, 0x13, 0x6f, 0x62, 0x6c, 0x69,
+ 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x73, 0x18,
+ 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61,
+ 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62,
+ 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x52, 0x12, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67,
+ 0x67, 0x65, 0x72, 0x73, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
+ 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e,
+ 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52,
+ 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x52,
+ 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0x43, 0x0a, 0x1c, 0x43, 0x72, 0x65, 0x61,
+ 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
+ 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xd1, 0x01,
+ 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+ 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a,
+ 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03,
+ 0xb0, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64,
+ 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
+ 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x75, 0x74, 0x61, 0x62,
+ 0x6c, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x54, 0x0a, 0x18,
+ 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f,
+ 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x18, 0x65, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a,
+ 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
+ 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x16, 0x6d, 0x65, 0x74, 0x61,
+ 0x64, 0x61, 0x74, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69,
+ 0x6f, 0x72, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72,
+ 0x73, 0x22, 0x43, 0x0a, 0x1c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69,
+ 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x12, 0x23, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x0d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52,
+ 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3b, 0x0a, 0x1f, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69,
+ 0x76, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c,
+ 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52,
+ 0x02, 0x69, 0x64, 0x22, 0x47, 0x0a, 0x20, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74,
+ 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e,
+ 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x54, 0x0a, 0x1f,
+ 0x47, 0x65, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75,
+ 0x65, 0x73, 0x42, 0x79, 0x46, 0x71, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+ 0x1f, 0x0a, 0x04, 0x66, 0x71, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x42, 0x0b, 0xba,
+ 0x48, 0x08, 0x92, 0x01, 0x05, 0x08, 0x01, 0x10, 0xfa, 0x01, 0x52, 0x04, 0x66, 0x71, 0x6e, 0x73,
+ 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x52, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x22, 0x9b, 0x03, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62,
+ 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x79, 0x46, 0x71, 0x6e, 0x73, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7d, 0x0a, 0x14, 0x66, 0x71, 0x6e, 0x5f, 0x61,
+ 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18,
+ 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x4b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61,
+ 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x74, 0x74,
+ 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x79, 0x46, 0x71,
+ 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x46, 0x71, 0x6e, 0x41, 0x74,
+ 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x45, 0x6e, 0x74,
+ 0x72, 0x79, 0x52, 0x12, 0x66, 0x71, 0x6e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
+ 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x1a, 0x69, 0x0a, 0x11, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62,
+ 0x75, 0x74, 0x65, 0x41, 0x6e, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2f, 0x0a, 0x09, 0x61,
+ 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11,
+ 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+ 0x65, 0x52, 0x09, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x23, 0x0a, 0x05,
+ 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, 0x05, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x1a, 0x8c, 0x01, 0x0a, 0x17, 0x46, 0x71, 0x6e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
+ 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,
+ 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
+ 0x5b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x45,
+ 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+ 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56,
+ 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x79, 0x46, 0x71, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x41, 0x6e, 0x64,
+ 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01,
+ 0x22, 0x99, 0x01, 0x0a, 0x27, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x4b, 0x65, 0x79, 0x41, 0x63,
+ 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x6f, 0x41, 0x74, 0x74, 0x72,
+ 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6a, 0x0a, 0x1b,
+ 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x63,
0x63, 0x65, 0x73, 0x73, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69,
- 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63,
- 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x14, 0x76, 0x61, 0x6c, 0x75,
- 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72,
- 0x3a, 0x02, 0x18, 0x01, 0x22, 0x71, 0x0a, 0x21, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x50, 0x75,
- 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x54, 0x6f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
- 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x0d, 0x61, 0x74, 0x74,
- 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
- 0x32, 0x1f, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62,
- 0x75, 0x74, 0x65, 0x73, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x4b, 0x65,
- 0x79, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x0c, 0x61, 0x74, 0x74, 0x72, 0x69,
- 0x62, 0x75, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x22, 0x6a, 0x0a, 0x22, 0x41, 0x73, 0x73, 0x69, 0x67,
- 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x54, 0x6f, 0x41, 0x74, 0x74, 0x72,
- 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a,
- 0x0d, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74,
- 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
- 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x0c, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
- 0x4b, 0x65, 0x79, 0x22, 0x73, 0x0a, 0x23, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x75, 0x62,
- 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62,
- 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x0d, 0x61, 0x74,
- 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69,
+ 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69,
0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x4b,
- 0x65, 0x79, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x0c, 0x61, 0x74, 0x74, 0x72,
- 0x69, 0x62, 0x75, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x22, 0x6c, 0x0a, 0x24, 0x52, 0x65, 0x6d, 0x6f,
- 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x41,
- 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x12, 0x44, 0x0a, 0x0d, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x6b, 0x65,
- 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
- 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x41, 0x74, 0x74, 0x72,
- 0x69, 0x62, 0x75, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x0c, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62,
- 0x75, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x22, 0x61, 0x0a, 0x1d, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e,
- 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x54, 0x6f, 0x56, 0x61, 0x6c, 0x75, 0x65,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x09, 0x76, 0x61, 0x6c, 0x75, 0x65,
- 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x6f, 0x6c,
- 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x56,
- 0x61, 0x6c, 0x75, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52,
- 0x08, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x4b, 0x65, 0x79, 0x22, 0x5a, 0x0a, 0x1e, 0x41, 0x73, 0x73,
- 0x69, 0x67, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x54, 0x6f, 0x56, 0x61,
- 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x76,
- 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b,
+ 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x18,
+ 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65,
+ 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x9a, 0x01, 0x0a,
+ 0x28, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73,
+ 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x6f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+ 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6a, 0x0a, 0x1b, 0x61, 0x74, 0x74,
+ 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73,
+ 0x73, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b,
0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
- 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x08, 0x76, 0x61, 0x6c,
- 0x75, 0x65, 0x4b, 0x65, 0x79, 0x22, 0x63, 0x0a, 0x1f, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50,
- 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x56, 0x61, 0x6c, 0x75,
- 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x09, 0x76, 0x61, 0x6c, 0x75,
- 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x6f,
+ 0x65, 0x73, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x41,
+ 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x18, 0x61, 0x74, 0x74,
+ 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53,
+ 0x65, 0x72, 0x76, 0x65, 0x72, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x9b, 0x01, 0x0a, 0x29, 0x52, 0x65,
+ 0x6d, 0x6f, 0x76, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72,
+ 0x76, 0x65, 0x72, 0x46, 0x72, 0x6f, 0x6d, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6a, 0x0a, 0x1b, 0x61, 0x74, 0x74, 0x72, 0x69,
+ 0x62, 0x75, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f,
+ 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70,
+ 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73,
+ 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63,
+ 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x18, 0x61, 0x74, 0x74, 0x72, 0x69,
+ 0x62, 0x75, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72,
+ 0x76, 0x65, 0x72, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x9c, 0x01, 0x0a, 0x2a, 0x52, 0x65, 0x6d, 0x6f,
+ 0x76, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65,
+ 0x72, 0x46, 0x72, 0x6f, 0x6d, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6a, 0x0a, 0x1b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62,
+ 0x75, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x73,
+ 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x6f,
0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e,
- 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01,
- 0x52, 0x08, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x4b, 0x65, 0x79, 0x22, 0x5c, 0x0a, 0x20, 0x52, 0x65,
- 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x46, 0x72, 0x6f,
- 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38,
- 0x0a, 0x09, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69,
- 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x08,
- 0x76, 0x61, 0x6c, 0x75, 0x65, 0x4b, 0x65, 0x79, 0x2a, 0xa3, 0x01, 0x0a, 0x12, 0x53, 0x6f, 0x72,
- 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12,
- 0x24, 0x0a, 0x20, 0x53, 0x4f, 0x52, 0x54, 0x5f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54,
- 0x45, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46,
- 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1d, 0x0a, 0x19, 0x53, 0x4f, 0x52, 0x54, 0x5f, 0x41, 0x54,
- 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x41,
- 0x4d, 0x45, 0x10, 0x01, 0x12, 0x23, 0x0a, 0x1f, 0x53, 0x4f, 0x52, 0x54, 0x5f, 0x41, 0x54, 0x54,
- 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x52, 0x45,
- 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, 0x54, 0x10, 0x02, 0x12, 0x23, 0x0a, 0x1f, 0x53, 0x4f, 0x52,
- 0x54, 0x5f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x53, 0x5f, 0x54, 0x59, 0x50,
- 0x45, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, 0x54, 0x10, 0x03, 0x32, 0xdc,
- 0x13, 0x0a, 0x11, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x53, 0x65, 0x72,
- 0x76, 0x69, 0x63, 0x65, 0x12, 0x6a, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72,
- 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x28, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e,
- 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41,
- 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x1a, 0x29, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62,
- 0x75, 0x74, 0x65, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
- 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01,
- 0x12, 0x7c, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
- 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x2d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
- 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74,
- 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e,
- 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41,
- 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06, 0x88, 0x02, 0x01, 0x90, 0x02, 0x01, 0x12, 0x64,
- 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x26,
+ 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65,
+ 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x18, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62,
+ 0x75, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76,
+ 0x65, 0x72, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x89, 0x01, 0x0a, 0x23, 0x41, 0x73, 0x73, 0x69, 0x67,
+ 0x6e, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72,
+ 0x54, 0x6f, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5e,
+ 0x0a, 0x17, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65,
+ 0x73, 0x73, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x27, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
+ 0x74, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65,
+ 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x14, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x4b,
+ 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x3a, 0x02,
+ 0x18, 0x01, 0x22, 0x8a, 0x01, 0x0a, 0x24, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x4b, 0x65, 0x79,
+ 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x6f, 0x56, 0x61,
+ 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x17, 0x76,
+ 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f,
+ 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70,
+ 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73,
+ 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53,
+ 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x14, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x4b, 0x65, 0x79, 0x41,
+ 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x3a, 0x02, 0x18, 0x01, 0x22,
+ 0x8b, 0x01, 0x0a, 0x25, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63,
+ 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x46, 0x72, 0x6f, 0x6d, 0x56, 0x61, 0x6c,
+ 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x5e, 0x0a, 0x17, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x73, 0x65,
+ 0x72, 0x76, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x6f, 0x6c,
+ 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x56,
+ 0x61, 0x6c, 0x75, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72,
+ 0x76, 0x65, 0x72, 0x52, 0x14, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63,
+ 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x8c, 0x01,
+ 0x0a, 0x26, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73,
+ 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x46, 0x72, 0x6f, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5e, 0x0a, 0x17, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x73, 0x65, 0x72,
+ 0x76, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x6f, 0x6c, 0x69,
+ 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x56, 0x61,
+ 0x6c, 0x75, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76,
+ 0x65, 0x72, 0x52, 0x14, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65,
+ 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x71, 0x0a, 0x21,
+ 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x54,
+ 0x6f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x12, 0x4c, 0x0a, 0x0d, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x6b,
+ 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63,
+ 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x41, 0x74, 0x74,
+ 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01,
+ 0x01, 0x52, 0x0c, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x22,
+ 0x6a, 0x0a, 0x22, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b,
+ 0x65, 0x79, 0x54, 0x6f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x0d, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
+ 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70,
+ 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73,
+ 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x0c, 0x61,
+ 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x22, 0x73, 0x0a, 0x23, 0x52,
+ 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x46, 0x72,
+ 0x6f, 0x6d, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x0d, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f,
+ 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x6f, 0x6c, 0x69,
+ 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x41, 0x74,
+ 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8,
+ 0x01, 0x01, 0x52, 0x0c, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x4b, 0x65, 0x79,
+ 0x22, 0x6c, 0x0a, 0x24, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63,
+ 0x4b, 0x65, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x0d, 0x61, 0x74, 0x74, 0x72,
+ 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x1f, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
+ 0x74, 0x65, 0x73, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x4b, 0x65, 0x79,
+ 0x52, 0x0c, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x22, 0x61,
+ 0x0a, 0x1d, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65,
+ 0x79, 0x54, 0x6f, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+ 0x40, 0x0a, 0x09, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72,
+ 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4b, 0x65, 0x79, 0x42,
+ 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x08, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x4b, 0x65,
+ 0x79, 0x22, 0x5a, 0x0a, 0x1e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69,
+ 0x63, 0x4b, 0x65, 0x79, 0x54, 0x6f, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x6b, 0x65, 0x79,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e,
+ 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65,
+ 0x4b, 0x65, 0x79, 0x52, 0x08, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x4b, 0x65, 0x79, 0x22, 0x63, 0x0a,
+ 0x1f, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79,
+ 0x46, 0x72, 0x6f, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x12, 0x40, 0x0a, 0x09, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74,
+ 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4b, 0x65, 0x79,
+ 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x08, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x4b,
+ 0x65, 0x79, 0x22, 0x5c, 0x0a, 0x20, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c,
+ 0x69, 0x63, 0x4b, 0x65, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f,
+ 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x6f, 0x6c, 0x69,
+ 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x56, 0x61,
+ 0x6c, 0x75, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x08, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x4b, 0x65, 0x79,
+ 0x2a, 0xa3, 0x01, 0x0a, 0x12, 0x53, 0x6f, 0x72, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
+ 0x74, 0x65, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, 0x24, 0x0a, 0x20, 0x53, 0x4f, 0x52, 0x54, 0x5f,
+ 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f,
+ 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1d, 0x0a,
+ 0x19, 0x53, 0x4f, 0x52, 0x54, 0x5f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x53,
+ 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x01, 0x12, 0x23, 0x0a, 0x1f,
+ 0x53, 0x4f, 0x52, 0x54, 0x5f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42, 0x55, 0x54, 0x45, 0x53, 0x5f,
+ 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, 0x54, 0x10,
+ 0x02, 0x12, 0x23, 0x0a, 0x1f, 0x53, 0x4f, 0x52, 0x54, 0x5f, 0x41, 0x54, 0x54, 0x52, 0x49, 0x42,
+ 0x55, 0x54, 0x45, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45,
+ 0x44, 0x5f, 0x41, 0x54, 0x10, 0x03, 0x32, 0xdc, 0x13, 0x0a, 0x11, 0x41, 0x74, 0x74, 0x72, 0x69,
+ 0x62, 0x75, 0x74, 0x65, 0x73, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x6a, 0x0a, 0x0e,
+ 0x4c, 0x69, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x28,
0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
- 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e,
- 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x74,
- 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
- 0x03, 0x90, 0x02, 0x01, 0x12, 0x88, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x41, 0x74, 0x74, 0x72,
- 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x79, 0x46, 0x71, 0x6e,
- 0x73, 0x12, 0x32, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69,
- 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
- 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x79, 0x46, 0x71, 0x6e, 0x73, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61,
- 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x74, 0x74,
- 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x79, 0x46, 0x71,
- 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12,
- 0x6a, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
- 0x74, 0x65, 0x12, 0x29, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72,
- 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74,
- 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e,
- 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
- 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
- 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6a, 0x0a, 0x0f, 0x55,
- 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x29,
+ 0x65, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
+ 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63,
+ 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x4c, 0x69, 0x73,
+ 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x7c, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74,
+ 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12,
+ 0x2d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
+ 0x74, 0x65, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+ 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e,
0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
- 0x65, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
- 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x70, 0x6f, 0x6c, 0x69,
- 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x55, 0x70,
- 0x64, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73,
- 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x76, 0x0a, 0x13, 0x44, 0x65, 0x61, 0x63, 0x74,
- 0x69, 0x76, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x2d,
+ 0x65, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
+ 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x06,
+ 0x88, 0x02, 0x01, 0x90, 0x02, 0x01, 0x12, 0x64, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x41, 0x74, 0x74,
+ 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x26, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e,
+ 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x74,
+ 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27,
0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
- 0x65, 0x73, 0x2e, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74,
- 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e,
+ 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x88, 0x01, 0x0a,
+ 0x18, 0x47, 0x65, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c,
+ 0x75, 0x65, 0x73, 0x42, 0x79, 0x46, 0x71, 0x6e, 0x73, 0x12, 0x32, 0x2e, 0x70, 0x6f, 0x6c, 0x69,
+ 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x47, 0x65,
+ 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73,
+ 0x42, 0x79, 0x46, 0x71, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e,
0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
- 0x73, 0x2e, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72,
+ 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61,
+ 0x6c, 0x75, 0x65, 0x73, 0x42, 0x79, 0x46, 0x71, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x6a, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74,
+ 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x29, 0x2e, 0x70, 0x6f, 0x6c,
+ 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x43,
+ 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61,
+ 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
+ 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x22, 0x00, 0x12, 0x6a, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74,
+ 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x29, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e,
+ 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74,
+ 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x1a, 0x2a, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69,
+ 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72,
0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12,
- 0x73, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56,
- 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74,
- 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x74, 0x74, 0x72,
- 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x1a, 0x2c, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69,
- 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
- 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
- 0x03, 0x90, 0x02, 0x01, 0x12, 0x79, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x74,
- 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2e, 0x2e, 0x70,
+ 0x76, 0x0a, 0x13, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74,
+ 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x2d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e,
+ 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x61, 0x63, 0x74,
+ 0x69, 0x76, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61,
+ 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69,
+ 0x76, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x73, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x41, 0x74,
+ 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2b, 0x2e, 0x70,
0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73,
- 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
- 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x70,
- 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73,
- 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
- 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12,
- 0x79, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
- 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
- 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61,
- 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
- 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61,
+ 0x2e, 0x47, 0x65, 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c,
+ 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x70, 0x6f, 0x6c, 0x69,
+ 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x47, 0x65,
+ 0x74, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x79, 0x0a, 0x14,
+ 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56,
+ 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74,
+ 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41,
+ 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74,
+ 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41,
+ 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x79, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74,
+ 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12,
+ 0x2e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
+ 0x74, 0x65, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62,
+ 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+ 0x2f, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
+ 0x74, 0x65, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62,
+ 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x22, 0x00, 0x12, 0x85, 0x01, 0x0a, 0x18, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74,
+ 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12,
+ 0x32, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
+ 0x74, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x41, 0x74,
+ 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74,
+ 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61,
0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x85, 0x01, 0x0a, 0x18, 0x44,
- 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
- 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x32, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
- 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x61, 0x63,
- 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56,
- 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x70, 0x6f,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0xa0, 0x01, 0x0a, 0x20, 0x41,
+ 0x73, 0x73, 0x69, 0x67, 0x6e, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65,
+ 0x72, 0x76, 0x65, 0x72, 0x54, 0x6f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12,
+ 0x3a, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
+ 0x74, 0x65, 0x73, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63,
+ 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x6f, 0x41, 0x74, 0x74, 0x72, 0x69,
+ 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x70, 0x6f,
0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e,
- 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62,
- 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x22, 0x00, 0x12, 0xa0, 0x01, 0x0a, 0x20, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x4b, 0x65, 0x79,
- 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x6f, 0x41, 0x74,
- 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x3a, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
+ 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53,
+ 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x6f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0xa6, 0x01,
+ 0x0a, 0x22, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73,
+ 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x46, 0x72, 0x6f, 0x6d, 0x41, 0x74, 0x74, 0x72, 0x69,
+ 0x62, 0x75, 0x74, 0x65, 0x12, 0x3c, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74,
+ 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4b,
+ 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x46, 0x72,
+ 0x6f, 0x6d, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x1a, 0x3d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72,
+ 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4b, 0x65, 0x79,
+ 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x46, 0x72, 0x6f, 0x6d,
+ 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
+ 0x65, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x94, 0x01, 0x0a, 0x1c, 0x41, 0x73, 0x73, 0x69, 0x67,
+ 0x6e, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72,
+ 0x54, 0x6f, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x36, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x41, 0x73, 0x73, 0x69,
0x67, 0x6e, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65,
- 0x72, 0x54, 0x6f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74,
- 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x4b, 0x65,
- 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x6f, 0x41,
- 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0xa6, 0x01, 0x0a, 0x22, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65,
- 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x46,
- 0x72, 0x6f, 0x6d, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x3c, 0x2e, 0x70,
- 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73,
- 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73,
- 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x46, 0x72, 0x6f, 0x6d, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62,
- 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3d, 0x2e, 0x70, 0x6f, 0x6c,
- 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x52,
- 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65,
- 0x72, 0x76, 0x65, 0x72, 0x46, 0x72, 0x6f, 0x6d, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
- 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x94,
- 0x01, 0x0a, 0x1c, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65,
- 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x6f, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12,
- 0x36, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
+ 0x72, 0x54, 0x6f, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+ 0x37, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
0x74, 0x65, 0x73, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63,
0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x6f, 0x56, 0x61, 0x6c, 0x75, 0x65,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
- 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x41, 0x73, 0x73, 0x69,
- 0x67, 0x6e, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65,
- 0x72, 0x54, 0x6f, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x9a, 0x01, 0x0a, 0x1e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65,
- 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x46,
- 0x72, 0x6f, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x38, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63,
- 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x6d,
- 0x6f, 0x76, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76,
- 0x65, 0x72, 0x46, 0x72, 0x6f, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72,
- 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4b, 0x65, 0x79,
- 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x46, 0x72, 0x6f, 0x6d,
- 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x88,
- 0x02, 0x01, 0x12, 0x8b, 0x01, 0x0a, 0x1a, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x50, 0x75, 0x62,
- 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x54, 0x6f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
- 0x65, 0x12, 0x34, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69,
- 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x50, 0x75, 0x62, 0x6c,
- 0x69, 0x63, 0x4b, 0x65, 0x79, 0x54, 0x6f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
- 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x41, 0x73, 0x73, 0x69,
- 0x67, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x54, 0x6f, 0x41, 0x74, 0x74,
- 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
- 0x12, 0x91, 0x01, 0x0a, 0x1c, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69,
- 0x63, 0x4b, 0x65, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
- 0x65, 0x12, 0x36, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69,
- 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c,
- 0x69, 0x63, 0x4b, 0x65, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
- 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x70, 0x6f, 0x6c, 0x69,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x9a, 0x01,
+ 0x0a, 0x1e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73,
+ 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x46, 0x72, 0x6f, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65,
+ 0x12, 0x38, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62,
+ 0x75, 0x74, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63,
+ 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x46, 0x72, 0x6f, 0x6d, 0x56, 0x61,
+ 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x70, 0x6f, 0x6c,
+ 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x52,
+ 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65,
+ 0x72, 0x76, 0x65, 0x72, 0x46, 0x72, 0x6f, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x8b, 0x01, 0x0a, 0x1a, 0x41,
+ 0x73, 0x73, 0x69, 0x67, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x54, 0x6f,
+ 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x34, 0x2e, 0x70, 0x6f, 0x6c, 0x69,
+ 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x41, 0x73,
+ 0x73, 0x69, 0x67, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x54, 0x6f, 0x41,
+ 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+ 0x35, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
+ 0x74, 0x65, 0x73, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63,
+ 0x4b, 0x65, 0x79, 0x54, 0x6f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x91, 0x01, 0x0a, 0x1c, 0x52, 0x65, 0x6d,
+ 0x6f, 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x46, 0x72, 0x6f, 0x6d,
+ 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x36, 0x2e, 0x70, 0x6f, 0x6c, 0x69,
0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x52, 0x65,
0x6d, 0x6f, 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x46, 0x72, 0x6f,
- 0x6d, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x22, 0x00, 0x12, 0x7f, 0x0a, 0x16, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x50, 0x75,
- 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x54, 0x6f, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x30,
+ 0x6d, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x1a, 0x37, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69,
+ 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c,
+ 0x69, 0x63, 0x4b, 0x65, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
+ 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7f, 0x0a, 0x16,
+ 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x54,
+ 0x6f, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x30, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e,
+ 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67,
+ 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x54, 0x6f, 0x56, 0x61, 0x6c, 0x75,
+ 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63,
+ 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x41, 0x73, 0x73,
+ 0x69, 0x67, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x54, 0x6f, 0x56, 0x61,
+ 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x85, 0x01,
+ 0x0a, 0x18, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65,
+ 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x32, 0x2e, 0x70, 0x6f, 0x6c,
+ 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x52,
+ 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x46, 0x72,
+ 0x6f, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33,
0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
- 0x65, 0x73, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b,
- 0x65, 0x79, 0x54, 0x6f, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x1a, 0x31, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62,
- 0x75, 0x74, 0x65, 0x73, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69,
- 0x63, 0x4b, 0x65, 0x79, 0x54, 0x6f, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x85, 0x01, 0x0a, 0x18, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65,
- 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x56, 0x61, 0x6c,
- 0x75, 0x65, 0x12, 0x32, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72,
- 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x75, 0x62,
- 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e,
- 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76,
- 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x56, 0x61,
- 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xc8, 0x01,
- 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74,
- 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x42, 0x0f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
- 0x74, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x39, 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, 0x2f, 0x61, 0x74, 0x74, 0x72, 0x69,
- 0x62, 0x75, 0x74, 0x65, 0x73, 0xa2, 0x02, 0x03, 0x50, 0x41, 0x58, 0xaa, 0x02, 0x11, 0x50, 0x6f,
- 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0xca,
- 0x02, 0x11, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5c, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
- 0x74, 0x65, 0x73, 0xe2, 0x02, 0x1d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5c, 0x41, 0x74, 0x74,
- 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64,
- 0x61, 0x74, 0x61, 0xea, 0x02, 0x12, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x3a, 0x3a, 0x41, 0x74,
- 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+ 0x65, 0x73, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b,
+ 0x65, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xc8, 0x01, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x6f,
+ 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x42,
+ 0x0f, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f,
+ 0x50, 0x01, 0x5a, 0x39, 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, 0x2f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0xa2, 0x02, 0x03,
+ 0x50, 0x41, 0x58, 0xaa, 0x02, 0x11, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x74, 0x74,
+ 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0xca, 0x02, 0x11, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79,
+ 0x5c, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0xe2, 0x02, 0x1d, 0x50, 0x6f,
+ 0x6c, 0x69, 0x63, 0x79, 0x5c, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x5c,
+ 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x12, 0x50, 0x6f,
+ 0x6c, 0x69, 0x63, 0x79, 0x3a, 0x3a, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73,
+ 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@@ -3316,16 +3328,17 @@ var file_policy_attributes_attributes_proto_goTypes = []interface{}{
(policy.SortDirection)(0), // 47: policy.SortDirection
(common.ActiveStateEnum)(0), // 48: common.ActiveStateEnum
(*policy.PageRequest)(nil), // 49: policy.PageRequest
- (*policy.Attribute)(nil), // 50: policy.Attribute
- (*policy.PageResponse)(nil), // 51: policy.PageResponse
- (policy.AttributeRuleTypeEnum)(0), // 52: policy.AttributeRuleTypeEnum
- (*wrapperspb.BoolValue)(nil), // 53: google.protobuf.BoolValue
- (*common.MetadataMutable)(nil), // 54: common.MetadataMutable
- (common.MetadataUpdateEnum)(0), // 55: common.MetadataUpdateEnum
- (*policy.Value)(nil), // 56: policy.Value
- (*common.IdFqnIdentifier)(nil), // 57: common.IdFqnIdentifier
- (*common.IdNameIdentifier)(nil), // 58: common.IdNameIdentifier
- (*policy.RequestContext)(nil), // 59: policy.RequestContext
+ (*policy.Search)(nil), // 50: policy.Search
+ (*policy.Attribute)(nil), // 51: policy.Attribute
+ (*policy.PageResponse)(nil), // 52: policy.PageResponse
+ (policy.AttributeRuleTypeEnum)(0), // 53: policy.AttributeRuleTypeEnum
+ (*wrapperspb.BoolValue)(nil), // 54: google.protobuf.BoolValue
+ (*common.MetadataMutable)(nil), // 55: common.MetadataMutable
+ (common.MetadataUpdateEnum)(0), // 56: common.MetadataUpdateEnum
+ (*policy.Value)(nil), // 57: policy.Value
+ (*common.IdFqnIdentifier)(nil), // 58: common.IdFqnIdentifier
+ (*common.IdNameIdentifier)(nil), // 59: common.IdNameIdentifier
+ (*policy.RequestContext)(nil), // 60: policy.RequestContext
}
var file_policy_attributes_attributes_proto_depIdxs = []int32{
0, // 0: policy.attributes.AttributesSort.field:type_name -> policy.attributes.SortAttributesType
@@ -3333,96 +3346,97 @@ var file_policy_attributes_attributes_proto_depIdxs = []int32{
48, // 2: policy.attributes.ListAttributesRequest.state:type_name -> common.ActiveStateEnum
49, // 3: policy.attributes.ListAttributesRequest.pagination:type_name -> policy.PageRequest
5, // 4: policy.attributes.ListAttributesRequest.sort:type_name -> policy.attributes.AttributesSort
- 50, // 5: policy.attributes.ListAttributesResponse.attributes:type_name -> policy.Attribute
- 51, // 6: policy.attributes.ListAttributesResponse.pagination:type_name -> policy.PageResponse
- 50, // 7: policy.attributes.GetAttributeResponse.attribute:type_name -> policy.Attribute
- 52, // 8: policy.attributes.CreateAttributeRequest.rule:type_name -> policy.AttributeRuleTypeEnum
- 53, // 9: policy.attributes.CreateAttributeRequest.allow_traversal:type_name -> google.protobuf.BoolValue
- 54, // 10: policy.attributes.CreateAttributeRequest.metadata:type_name -> common.MetadataMutable
- 50, // 11: policy.attributes.CreateAttributeResponse.attribute:type_name -> policy.Attribute
- 54, // 12: policy.attributes.UpdateAttributeRequest.metadata:type_name -> common.MetadataMutable
- 55, // 13: policy.attributes.UpdateAttributeRequest.metadata_update_behavior:type_name -> common.MetadataUpdateEnum
- 50, // 14: policy.attributes.UpdateAttributeResponse.attribute:type_name -> policy.Attribute
- 50, // 15: policy.attributes.DeactivateAttributeResponse.attribute:type_name -> policy.Attribute
- 56, // 16: policy.attributes.GetAttributeValueResponse.value:type_name -> policy.Value
- 48, // 17: policy.attributes.ListAttributeValuesRequest.state:type_name -> common.ActiveStateEnum
- 49, // 18: policy.attributes.ListAttributeValuesRequest.pagination:type_name -> policy.PageRequest
- 56, // 19: policy.attributes.ListAttributeValuesResponse.values:type_name -> policy.Value
- 51, // 20: policy.attributes.ListAttributeValuesResponse.pagination:type_name -> policy.PageResponse
- 57, // 21: policy.attributes.AttributeValueObligationTriggerRequest.obligation_value:type_name -> common.IdFqnIdentifier
- 58, // 22: policy.attributes.AttributeValueObligationTriggerRequest.action:type_name -> common.IdNameIdentifier
- 59, // 23: policy.attributes.AttributeValueObligationTriggerRequest.context:type_name -> policy.RequestContext
- 54, // 24: policy.attributes.AttributeValueObligationTriggerRequest.metadata:type_name -> common.MetadataMutable
- 20, // 25: policy.attributes.CreateAttributeValueRequest.obligation_triggers:type_name -> policy.attributes.AttributeValueObligationTriggerRequest
- 54, // 26: policy.attributes.CreateAttributeValueRequest.metadata:type_name -> common.MetadataMutable
- 56, // 27: policy.attributes.CreateAttributeValueResponse.value:type_name -> policy.Value
- 54, // 28: policy.attributes.UpdateAttributeValueRequest.metadata:type_name -> common.MetadataMutable
- 55, // 29: policy.attributes.UpdateAttributeValueRequest.metadata_update_behavior:type_name -> common.MetadataUpdateEnum
- 56, // 30: policy.attributes.UpdateAttributeValueResponse.value:type_name -> policy.Value
- 56, // 31: policy.attributes.DeactivateAttributeValueResponse.value:type_name -> policy.Value
- 46, // 32: policy.attributes.GetAttributeValuesByFqnsResponse.fqn_attribute_values:type_name -> policy.attributes.GetAttributeValuesByFqnsResponse.FqnAttributeValuesEntry
- 1, // 33: policy.attributes.AssignKeyAccessServerToAttributeRequest.attribute_key_access_server:type_name -> policy.attributes.AttributeKeyAccessServer
- 1, // 34: policy.attributes.AssignKeyAccessServerToAttributeResponse.attribute_key_access_server:type_name -> policy.attributes.AttributeKeyAccessServer
- 1, // 35: policy.attributes.RemoveKeyAccessServerFromAttributeRequest.attribute_key_access_server:type_name -> policy.attributes.AttributeKeyAccessServer
- 1, // 36: policy.attributes.RemoveKeyAccessServerFromAttributeResponse.attribute_key_access_server:type_name -> policy.attributes.AttributeKeyAccessServer
- 2, // 37: policy.attributes.AssignKeyAccessServerToValueRequest.value_key_access_server:type_name -> policy.attributes.ValueKeyAccessServer
- 2, // 38: policy.attributes.AssignKeyAccessServerToValueResponse.value_key_access_server:type_name -> policy.attributes.ValueKeyAccessServer
- 2, // 39: policy.attributes.RemoveKeyAccessServerFromValueRequest.value_key_access_server:type_name -> policy.attributes.ValueKeyAccessServer
- 2, // 40: policy.attributes.RemoveKeyAccessServerFromValueResponse.value_key_access_server:type_name -> policy.attributes.ValueKeyAccessServer
- 3, // 41: policy.attributes.AssignPublicKeyToAttributeRequest.attribute_key:type_name -> policy.attributes.AttributeKey
- 3, // 42: policy.attributes.AssignPublicKeyToAttributeResponse.attribute_key:type_name -> policy.attributes.AttributeKey
- 3, // 43: policy.attributes.RemovePublicKeyFromAttributeRequest.attribute_key:type_name -> policy.attributes.AttributeKey
- 3, // 44: policy.attributes.RemovePublicKeyFromAttributeResponse.attribute_key:type_name -> policy.attributes.AttributeKey
- 4, // 45: policy.attributes.AssignPublicKeyToValueRequest.value_key:type_name -> policy.attributes.ValueKey
- 4, // 46: policy.attributes.AssignPublicKeyToValueResponse.value_key:type_name -> policy.attributes.ValueKey
- 4, // 47: policy.attributes.RemovePublicKeyFromValueRequest.value_key:type_name -> policy.attributes.ValueKey
- 4, // 48: policy.attributes.RemovePublicKeyFromValueResponse.value_key:type_name -> policy.attributes.ValueKey
- 50, // 49: policy.attributes.GetAttributeValuesByFqnsResponse.AttributeAndValue.attribute:type_name -> policy.Attribute
- 56, // 50: policy.attributes.GetAttributeValuesByFqnsResponse.AttributeAndValue.value:type_name -> policy.Value
- 45, // 51: policy.attributes.GetAttributeValuesByFqnsResponse.FqnAttributeValuesEntry.value:type_name -> policy.attributes.GetAttributeValuesByFqnsResponse.AttributeAndValue
- 6, // 52: policy.attributes.AttributesService.ListAttributes:input_type -> policy.attributes.ListAttributesRequest
- 18, // 53: policy.attributes.AttributesService.ListAttributeValues:input_type -> policy.attributes.ListAttributeValuesRequest
- 8, // 54: policy.attributes.AttributesService.GetAttribute:input_type -> policy.attributes.GetAttributeRequest
- 27, // 55: policy.attributes.AttributesService.GetAttributeValuesByFqns:input_type -> policy.attributes.GetAttributeValuesByFqnsRequest
- 10, // 56: policy.attributes.AttributesService.CreateAttribute:input_type -> policy.attributes.CreateAttributeRequest
- 12, // 57: policy.attributes.AttributesService.UpdateAttribute:input_type -> policy.attributes.UpdateAttributeRequest
- 14, // 58: policy.attributes.AttributesService.DeactivateAttribute:input_type -> policy.attributes.DeactivateAttributeRequest
- 16, // 59: policy.attributes.AttributesService.GetAttributeValue:input_type -> policy.attributes.GetAttributeValueRequest
- 21, // 60: policy.attributes.AttributesService.CreateAttributeValue:input_type -> policy.attributes.CreateAttributeValueRequest
- 23, // 61: policy.attributes.AttributesService.UpdateAttributeValue:input_type -> policy.attributes.UpdateAttributeValueRequest
- 25, // 62: policy.attributes.AttributesService.DeactivateAttributeValue:input_type -> policy.attributes.DeactivateAttributeValueRequest
- 29, // 63: policy.attributes.AttributesService.AssignKeyAccessServerToAttribute:input_type -> policy.attributes.AssignKeyAccessServerToAttributeRequest
- 31, // 64: policy.attributes.AttributesService.RemoveKeyAccessServerFromAttribute:input_type -> policy.attributes.RemoveKeyAccessServerFromAttributeRequest
- 33, // 65: policy.attributes.AttributesService.AssignKeyAccessServerToValue:input_type -> policy.attributes.AssignKeyAccessServerToValueRequest
- 35, // 66: policy.attributes.AttributesService.RemoveKeyAccessServerFromValue:input_type -> policy.attributes.RemoveKeyAccessServerFromValueRequest
- 37, // 67: policy.attributes.AttributesService.AssignPublicKeyToAttribute:input_type -> policy.attributes.AssignPublicKeyToAttributeRequest
- 39, // 68: policy.attributes.AttributesService.RemovePublicKeyFromAttribute:input_type -> policy.attributes.RemovePublicKeyFromAttributeRequest
- 41, // 69: policy.attributes.AttributesService.AssignPublicKeyToValue:input_type -> policy.attributes.AssignPublicKeyToValueRequest
- 43, // 70: policy.attributes.AttributesService.RemovePublicKeyFromValue:input_type -> policy.attributes.RemovePublicKeyFromValueRequest
- 7, // 71: policy.attributes.AttributesService.ListAttributes:output_type -> policy.attributes.ListAttributesResponse
- 19, // 72: policy.attributes.AttributesService.ListAttributeValues:output_type -> policy.attributes.ListAttributeValuesResponse
- 9, // 73: policy.attributes.AttributesService.GetAttribute:output_type -> policy.attributes.GetAttributeResponse
- 28, // 74: policy.attributes.AttributesService.GetAttributeValuesByFqns:output_type -> policy.attributes.GetAttributeValuesByFqnsResponse
- 11, // 75: policy.attributes.AttributesService.CreateAttribute:output_type -> policy.attributes.CreateAttributeResponse
- 13, // 76: policy.attributes.AttributesService.UpdateAttribute:output_type -> policy.attributes.UpdateAttributeResponse
- 15, // 77: policy.attributes.AttributesService.DeactivateAttribute:output_type -> policy.attributes.DeactivateAttributeResponse
- 17, // 78: policy.attributes.AttributesService.GetAttributeValue:output_type -> policy.attributes.GetAttributeValueResponse
- 22, // 79: policy.attributes.AttributesService.CreateAttributeValue:output_type -> policy.attributes.CreateAttributeValueResponse
- 24, // 80: policy.attributes.AttributesService.UpdateAttributeValue:output_type -> policy.attributes.UpdateAttributeValueResponse
- 26, // 81: policy.attributes.AttributesService.DeactivateAttributeValue:output_type -> policy.attributes.DeactivateAttributeValueResponse
- 30, // 82: policy.attributes.AttributesService.AssignKeyAccessServerToAttribute:output_type -> policy.attributes.AssignKeyAccessServerToAttributeResponse
- 32, // 83: policy.attributes.AttributesService.RemoveKeyAccessServerFromAttribute:output_type -> policy.attributes.RemoveKeyAccessServerFromAttributeResponse
- 34, // 84: policy.attributes.AttributesService.AssignKeyAccessServerToValue:output_type -> policy.attributes.AssignKeyAccessServerToValueResponse
- 36, // 85: policy.attributes.AttributesService.RemoveKeyAccessServerFromValue:output_type -> policy.attributes.RemoveKeyAccessServerFromValueResponse
- 38, // 86: policy.attributes.AttributesService.AssignPublicKeyToAttribute:output_type -> policy.attributes.AssignPublicKeyToAttributeResponse
- 40, // 87: policy.attributes.AttributesService.RemovePublicKeyFromAttribute:output_type -> policy.attributes.RemovePublicKeyFromAttributeResponse
- 42, // 88: policy.attributes.AttributesService.AssignPublicKeyToValue:output_type -> policy.attributes.AssignPublicKeyToValueResponse
- 44, // 89: policy.attributes.AttributesService.RemovePublicKeyFromValue:output_type -> policy.attributes.RemovePublicKeyFromValueResponse
- 71, // [71:90] is the sub-list for method output_type
- 52, // [52:71] is the sub-list for method input_type
- 52, // [52:52] is the sub-list for extension type_name
- 52, // [52:52] is the sub-list for extension extendee
- 0, // [0:52] is the sub-list for field type_name
+ 50, // 5: policy.attributes.ListAttributesRequest.search:type_name -> policy.Search
+ 51, // 6: policy.attributes.ListAttributesResponse.attributes:type_name -> policy.Attribute
+ 52, // 7: policy.attributes.ListAttributesResponse.pagination:type_name -> policy.PageResponse
+ 51, // 8: policy.attributes.GetAttributeResponse.attribute:type_name -> policy.Attribute
+ 53, // 9: policy.attributes.CreateAttributeRequest.rule:type_name -> policy.AttributeRuleTypeEnum
+ 54, // 10: policy.attributes.CreateAttributeRequest.allow_traversal:type_name -> google.protobuf.BoolValue
+ 55, // 11: policy.attributes.CreateAttributeRequest.metadata:type_name -> common.MetadataMutable
+ 51, // 12: policy.attributes.CreateAttributeResponse.attribute:type_name -> policy.Attribute
+ 55, // 13: policy.attributes.UpdateAttributeRequest.metadata:type_name -> common.MetadataMutable
+ 56, // 14: policy.attributes.UpdateAttributeRequest.metadata_update_behavior:type_name -> common.MetadataUpdateEnum
+ 51, // 15: policy.attributes.UpdateAttributeResponse.attribute:type_name -> policy.Attribute
+ 51, // 16: policy.attributes.DeactivateAttributeResponse.attribute:type_name -> policy.Attribute
+ 57, // 17: policy.attributes.GetAttributeValueResponse.value:type_name -> policy.Value
+ 48, // 18: policy.attributes.ListAttributeValuesRequest.state:type_name -> common.ActiveStateEnum
+ 49, // 19: policy.attributes.ListAttributeValuesRequest.pagination:type_name -> policy.PageRequest
+ 57, // 20: policy.attributes.ListAttributeValuesResponse.values:type_name -> policy.Value
+ 52, // 21: policy.attributes.ListAttributeValuesResponse.pagination:type_name -> policy.PageResponse
+ 58, // 22: policy.attributes.AttributeValueObligationTriggerRequest.obligation_value:type_name -> common.IdFqnIdentifier
+ 59, // 23: policy.attributes.AttributeValueObligationTriggerRequest.action:type_name -> common.IdNameIdentifier
+ 60, // 24: policy.attributes.AttributeValueObligationTriggerRequest.context:type_name -> policy.RequestContext
+ 55, // 25: policy.attributes.AttributeValueObligationTriggerRequest.metadata:type_name -> common.MetadataMutable
+ 20, // 26: policy.attributes.CreateAttributeValueRequest.obligation_triggers:type_name -> policy.attributes.AttributeValueObligationTriggerRequest
+ 55, // 27: policy.attributes.CreateAttributeValueRequest.metadata:type_name -> common.MetadataMutable
+ 57, // 28: policy.attributes.CreateAttributeValueResponse.value:type_name -> policy.Value
+ 55, // 29: policy.attributes.UpdateAttributeValueRequest.metadata:type_name -> common.MetadataMutable
+ 56, // 30: policy.attributes.UpdateAttributeValueRequest.metadata_update_behavior:type_name -> common.MetadataUpdateEnum
+ 57, // 31: policy.attributes.UpdateAttributeValueResponse.value:type_name -> policy.Value
+ 57, // 32: policy.attributes.DeactivateAttributeValueResponse.value:type_name -> policy.Value
+ 46, // 33: policy.attributes.GetAttributeValuesByFqnsResponse.fqn_attribute_values:type_name -> policy.attributes.GetAttributeValuesByFqnsResponse.FqnAttributeValuesEntry
+ 1, // 34: policy.attributes.AssignKeyAccessServerToAttributeRequest.attribute_key_access_server:type_name -> policy.attributes.AttributeKeyAccessServer
+ 1, // 35: policy.attributes.AssignKeyAccessServerToAttributeResponse.attribute_key_access_server:type_name -> policy.attributes.AttributeKeyAccessServer
+ 1, // 36: policy.attributes.RemoveKeyAccessServerFromAttributeRequest.attribute_key_access_server:type_name -> policy.attributes.AttributeKeyAccessServer
+ 1, // 37: policy.attributes.RemoveKeyAccessServerFromAttributeResponse.attribute_key_access_server:type_name -> policy.attributes.AttributeKeyAccessServer
+ 2, // 38: policy.attributes.AssignKeyAccessServerToValueRequest.value_key_access_server:type_name -> policy.attributes.ValueKeyAccessServer
+ 2, // 39: policy.attributes.AssignKeyAccessServerToValueResponse.value_key_access_server:type_name -> policy.attributes.ValueKeyAccessServer
+ 2, // 40: policy.attributes.RemoveKeyAccessServerFromValueRequest.value_key_access_server:type_name -> policy.attributes.ValueKeyAccessServer
+ 2, // 41: policy.attributes.RemoveKeyAccessServerFromValueResponse.value_key_access_server:type_name -> policy.attributes.ValueKeyAccessServer
+ 3, // 42: policy.attributes.AssignPublicKeyToAttributeRequest.attribute_key:type_name -> policy.attributes.AttributeKey
+ 3, // 43: policy.attributes.AssignPublicKeyToAttributeResponse.attribute_key:type_name -> policy.attributes.AttributeKey
+ 3, // 44: policy.attributes.RemovePublicKeyFromAttributeRequest.attribute_key:type_name -> policy.attributes.AttributeKey
+ 3, // 45: policy.attributes.RemovePublicKeyFromAttributeResponse.attribute_key:type_name -> policy.attributes.AttributeKey
+ 4, // 46: policy.attributes.AssignPublicKeyToValueRequest.value_key:type_name -> policy.attributes.ValueKey
+ 4, // 47: policy.attributes.AssignPublicKeyToValueResponse.value_key:type_name -> policy.attributes.ValueKey
+ 4, // 48: policy.attributes.RemovePublicKeyFromValueRequest.value_key:type_name -> policy.attributes.ValueKey
+ 4, // 49: policy.attributes.RemovePublicKeyFromValueResponse.value_key:type_name -> policy.attributes.ValueKey
+ 51, // 50: policy.attributes.GetAttributeValuesByFqnsResponse.AttributeAndValue.attribute:type_name -> policy.Attribute
+ 57, // 51: policy.attributes.GetAttributeValuesByFqnsResponse.AttributeAndValue.value:type_name -> policy.Value
+ 45, // 52: policy.attributes.GetAttributeValuesByFqnsResponse.FqnAttributeValuesEntry.value:type_name -> policy.attributes.GetAttributeValuesByFqnsResponse.AttributeAndValue
+ 6, // 53: policy.attributes.AttributesService.ListAttributes:input_type -> policy.attributes.ListAttributesRequest
+ 18, // 54: policy.attributes.AttributesService.ListAttributeValues:input_type -> policy.attributes.ListAttributeValuesRequest
+ 8, // 55: policy.attributes.AttributesService.GetAttribute:input_type -> policy.attributes.GetAttributeRequest
+ 27, // 56: policy.attributes.AttributesService.GetAttributeValuesByFqns:input_type -> policy.attributes.GetAttributeValuesByFqnsRequest
+ 10, // 57: policy.attributes.AttributesService.CreateAttribute:input_type -> policy.attributes.CreateAttributeRequest
+ 12, // 58: policy.attributes.AttributesService.UpdateAttribute:input_type -> policy.attributes.UpdateAttributeRequest
+ 14, // 59: policy.attributes.AttributesService.DeactivateAttribute:input_type -> policy.attributes.DeactivateAttributeRequest
+ 16, // 60: policy.attributes.AttributesService.GetAttributeValue:input_type -> policy.attributes.GetAttributeValueRequest
+ 21, // 61: policy.attributes.AttributesService.CreateAttributeValue:input_type -> policy.attributes.CreateAttributeValueRequest
+ 23, // 62: policy.attributes.AttributesService.UpdateAttributeValue:input_type -> policy.attributes.UpdateAttributeValueRequest
+ 25, // 63: policy.attributes.AttributesService.DeactivateAttributeValue:input_type -> policy.attributes.DeactivateAttributeValueRequest
+ 29, // 64: policy.attributes.AttributesService.AssignKeyAccessServerToAttribute:input_type -> policy.attributes.AssignKeyAccessServerToAttributeRequest
+ 31, // 65: policy.attributes.AttributesService.RemoveKeyAccessServerFromAttribute:input_type -> policy.attributes.RemoveKeyAccessServerFromAttributeRequest
+ 33, // 66: policy.attributes.AttributesService.AssignKeyAccessServerToValue:input_type -> policy.attributes.AssignKeyAccessServerToValueRequest
+ 35, // 67: policy.attributes.AttributesService.RemoveKeyAccessServerFromValue:input_type -> policy.attributes.RemoveKeyAccessServerFromValueRequest
+ 37, // 68: policy.attributes.AttributesService.AssignPublicKeyToAttribute:input_type -> policy.attributes.AssignPublicKeyToAttributeRequest
+ 39, // 69: policy.attributes.AttributesService.RemovePublicKeyFromAttribute:input_type -> policy.attributes.RemovePublicKeyFromAttributeRequest
+ 41, // 70: policy.attributes.AttributesService.AssignPublicKeyToValue:input_type -> policy.attributes.AssignPublicKeyToValueRequest
+ 43, // 71: policy.attributes.AttributesService.RemovePublicKeyFromValue:input_type -> policy.attributes.RemovePublicKeyFromValueRequest
+ 7, // 72: policy.attributes.AttributesService.ListAttributes:output_type -> policy.attributes.ListAttributesResponse
+ 19, // 73: policy.attributes.AttributesService.ListAttributeValues:output_type -> policy.attributes.ListAttributeValuesResponse
+ 9, // 74: policy.attributes.AttributesService.GetAttribute:output_type -> policy.attributes.GetAttributeResponse
+ 28, // 75: policy.attributes.AttributesService.GetAttributeValuesByFqns:output_type -> policy.attributes.GetAttributeValuesByFqnsResponse
+ 11, // 76: policy.attributes.AttributesService.CreateAttribute:output_type -> policy.attributes.CreateAttributeResponse
+ 13, // 77: policy.attributes.AttributesService.UpdateAttribute:output_type -> policy.attributes.UpdateAttributeResponse
+ 15, // 78: policy.attributes.AttributesService.DeactivateAttribute:output_type -> policy.attributes.DeactivateAttributeResponse
+ 17, // 79: policy.attributes.AttributesService.GetAttributeValue:output_type -> policy.attributes.GetAttributeValueResponse
+ 22, // 80: policy.attributes.AttributesService.CreateAttributeValue:output_type -> policy.attributes.CreateAttributeValueResponse
+ 24, // 81: policy.attributes.AttributesService.UpdateAttributeValue:output_type -> policy.attributes.UpdateAttributeValueResponse
+ 26, // 82: policy.attributes.AttributesService.DeactivateAttributeValue:output_type -> policy.attributes.DeactivateAttributeValueResponse
+ 30, // 83: policy.attributes.AttributesService.AssignKeyAccessServerToAttribute:output_type -> policy.attributes.AssignKeyAccessServerToAttributeResponse
+ 32, // 84: policy.attributes.AttributesService.RemoveKeyAccessServerFromAttribute:output_type -> policy.attributes.RemoveKeyAccessServerFromAttributeResponse
+ 34, // 85: policy.attributes.AttributesService.AssignKeyAccessServerToValue:output_type -> policy.attributes.AssignKeyAccessServerToValueResponse
+ 36, // 86: policy.attributes.AttributesService.RemoveKeyAccessServerFromValue:output_type -> policy.attributes.RemoveKeyAccessServerFromValueResponse
+ 38, // 87: policy.attributes.AttributesService.AssignPublicKeyToAttribute:output_type -> policy.attributes.AssignPublicKeyToAttributeResponse
+ 40, // 88: policy.attributes.AttributesService.RemovePublicKeyFromAttribute:output_type -> policy.attributes.RemovePublicKeyFromAttributeResponse
+ 42, // 89: policy.attributes.AttributesService.AssignPublicKeyToValue:output_type -> policy.attributes.AssignPublicKeyToValueResponse
+ 44, // 90: policy.attributes.AttributesService.RemovePublicKeyFromValue:output_type -> policy.attributes.RemovePublicKeyFromValueResponse
+ 72, // [72:91] is the sub-list for method output_type
+ 53, // [53:72] is the sub-list for method input_type
+ 53, // [53:53] is the sub-list for extension type_name
+ 53, // [53:53] is the sub-list for extension extendee
+ 0, // [0:53] is the sub-list for field type_name
}
func init() { file_policy_attributes_attributes_proto_init() }
diff --git a/protocol/go/policy/kasregistry/key_access_server_registry.pb.go b/protocol/go/policy/kasregistry/key_access_server_registry.pb.go
index 5bb3c2a08b..c3cd4c7dc2 100644
--- a/protocol/go/policy/kasregistry/key_access_server_registry.pb.go
+++ b/protocol/go/policy/kasregistry/key_access_server_registry.pb.go
@@ -353,6 +353,8 @@ type ListKeyAccessServersRequest struct {
// - field UNSPECIFIED defaults to created_at with the specified direction
// - both UNSPECIFIED or sort omitted defaults to created_at DESC
Sort []*KeyAccessServersSort `protobuf:"bytes,11,rep,name=sort,proto3" json:"sort,omitempty"`
+ // Optional
+ Search *policy.Search `protobuf:"bytes,12,opt,name=search,proto3" json:"search,omitempty"`
}
func (x *ListKeyAccessServersRequest) Reset() {
@@ -401,6 +403,13 @@ func (x *ListKeyAccessServersRequest) GetSort() []*KeyAccessServersSort {
return nil
}
+func (x *ListKeyAccessServersRequest) GetSearch() *policy.Search {
+ if x != nil {
+ return x.Search
+ }
+ return nil
+}
+
type ListKeyAccessServersResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -2352,6 +2361,8 @@ type ListKeysRequest struct {
// - field UNSPECIFIED defaults to created_at with the specified direction
// - both UNSPECIFIED or sort omitted defaults to created_at DESC
Sort []*KasKeysSort `protobuf:"bytes,11,rep,name=sort,proto3" json:"sort,omitempty"`
+ // Optional
+ Search *policy.Search `protobuf:"bytes,12,opt,name=search,proto3" json:"search,omitempty"`
}
func (x *ListKeysRequest) Reset() {
@@ -2442,6 +2453,13 @@ func (x *ListKeysRequest) GetSort() []*KasKeysSort {
return nil
}
+func (x *ListKeysRequest) GetSearch() *policy.Search {
+ if x != nil {
+ return x.Search
+ }
+ return nil
+}
+
type isListKeysRequest_KasFilter interface {
isListKeysRequest_KasFilter()
}
@@ -3888,7 +3906,7 @@ var file_policy_kasregistry_key_access_server_registry_proto_rawDesc = []byte{
0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e,
0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63,
0x74, 0x69, 0x6f, 0x6e, 0x42, 0x08, 0xba, 0x48, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09,
- 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x9a, 0x01, 0x0a, 0x1b, 0x4c, 0x69,
+ 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xc2, 0x01, 0x0a, 0x1b, 0x4c, 0x69,
0x73, 0x74, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65,
0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x33, 0x0a, 0x0a, 0x70, 0x61, 0x67,
0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e,
@@ -3898,531 +3916,536 @@ var file_policy_kasregistry_key_access_server_registry_proto_rawDesc = []byte{
0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6b, 0x61, 0x73, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72,
0x79, 0x2e, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65,
0x72, 0x73, 0x53, 0x6f, 0x72, 0x74, 0x42, 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, 0x02, 0x10, 0x01,
- 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x22, 0x9b, 0x01, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x4b,
- 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x52,
- 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x12, 0x6b, 0x65, 0x79, 0x5f, 0x61,
- 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20,
- 0x03, 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, 0x10, 0x6b, 0x65,
- 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x12, 0x34,
- 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01,
- 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x61, 0x67, 0x65,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x91, 0x01, 0x0a, 0x0b, 0x4b, 0x61, 0x73, 0x4b, 0x65, 0x79, 0x73,
- 0x53, 0x6f, 0x72, 0x74, 0x12, 0x43, 0x0a, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6b, 0x61, 0x73,
- 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x4b, 0x61, 0x73,
- 0x4b, 0x65, 0x79, 0x73, 0x54, 0x79, 0x70, 0x65, 0x42, 0x08, 0xba, 0x48, 0x05, 0x82, 0x01, 0x02,
- 0x10, 0x01, 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x3d, 0x0a, 0x09, 0x64, 0x69, 0x72,
- 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x70,
- 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74,
- 0x69, 0x6f, 0x6e, 0x42, 0x08, 0xba, 0x48, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x64,
- 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x95, 0x06, 0x0a, 0x1c, 0x43, 0x72, 0x65,
- 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76,
- 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x87, 0x02, 0x0a, 0x03, 0x75, 0x72,
- 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0xf4, 0x01, 0xba, 0x48, 0xf0, 0x01, 0xba, 0x01,
- 0xec, 0x01, 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, 0x0c, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x69, 0x73, 0x55, 0x72, 0x69, 0x28, 0x29, 0x52, 0x03,
- 0x75, 0x72, 0x69, 0x12, 0x30, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65,
- 0x79, 0x18, 0x02, 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, 0x40, 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f,
- 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x70, 0x6f, 0x6c,
- 0x69, 0x63, 0x79, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x42, 0x0b,
- 0xba, 0x48, 0x08, 0xc8, 0x01, 0x00, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x73, 0x6f, 0x75,
- 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0xc1, 0x02, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65,
- 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x42, 0xac, 0x02, 0xba, 0x48, 0xa8, 0x02, 0xba, 0x01, 0x9c,
- 0x02, 0x0a, 0x0f, 0x6b, 0x61, 0x73, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x6d,
- 0x61, 0x74, 0x12, 0xb3, 0x01, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x20,
- 0x4b, 0x41, 0x53, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65,
- 0x20, 0x61, 0x6e, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63,
- 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e,
- 0x67, 0x20, 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e, 0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x75,
- 0x6e, 0x64, 0x65, 0x72, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x20, 0x62, 0x75, 0x74, 0x20, 0x6e,
- 0x6f, 0x74, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20,
- 0x6f, 0x72, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65,
- 0x72, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x4b, 0x41,
- 0x53, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x6e,
- 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x6c, 0x6f, 0x77,
- 0x65, 0x72, 0x20, 0x63, 0x61, 0x73, 0x65, 0x2e, 0x1a, 0x53, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x74,
- 0x68, 0x69, 0x73, 0x29, 0x20, 0x3e, 0x20, 0x30, 0x20, 0x3f, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e,
- 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d,
- 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x3f, 0x3a, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30,
- 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2a, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39,
- 0x5d, 0x29, 0x3f, 0x24, 0x27, 0x29, 0x20, 0x3a, 0x20, 0x74, 0x72, 0x75, 0x65, 0xc8, 0x01, 0x00,
+ 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x12, 0x26, 0x0a, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68,
+ 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e,
+ 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x22, 0x9b,
+ 0x01, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73,
+ 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
+ 0x45, 0x0a, 0x12, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x73, 0x65,
+ 0x72, 0x76, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 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, 0x10, 0x6b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53,
+ 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x12, 0x34, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c,
+ 0x69, 0x63, 0x79, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x91, 0x01, 0x0a,
+ 0x0b, 0x4b, 0x61, 0x73, 0x4b, 0x65, 0x79, 0x73, 0x53, 0x6f, 0x72, 0x74, 0x12, 0x43, 0x0a, 0x05,
+ 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x70, 0x6f,
+ 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6b, 0x61, 0x73, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79,
+ 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x4b, 0x61, 0x73, 0x4b, 0x65, 0x79, 0x73, 0x54, 0x79, 0x70, 0x65,
+ 0x42, 0x08, 0xba, 0x48, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c,
+ 0x64, 0x12, 0x3d, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02,
+ 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x53, 0x6f,
+ 0x72, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x08, 0xba, 0x48, 0x05,
+ 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x22, 0x95, 0x06, 0x0a, 0x1c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63,
+ 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x12, 0x87, 0x02, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42,
+ 0xf4, 0x01, 0xba, 0x48, 0xf0, 0x01, 0xba, 0x01, 0xec, 0x01, 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, 0x0c, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x69,
+ 0x73, 0x55, 0x72, 0x69, 0x28, 0x29, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x30, 0x0a, 0x0a, 0x70,
+ 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 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, 0x40, 0x0a,
+ 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01,
+ 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x53, 0x6f, 0x75, 0x72,
+ 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x00, 0x82, 0x01,
+ 0x02, 0x10, 0x01, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12,
+ 0xc1, 0x02, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x42, 0xac,
+ 0x02, 0xba, 0x48, 0xa8, 0x02, 0xba, 0x01, 0x9c, 0x02, 0x0a, 0x0f, 0x6b, 0x61, 0x73, 0x5f, 0x6e,
+ 0x61, 0x6d, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0xb3, 0x01, 0x52, 0x65, 0x67,
+ 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x20, 0x4b, 0x41, 0x53, 0x20, 0x6e, 0x61, 0x6d, 0x65,
+ 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x6c, 0x70, 0x68,
+ 0x61, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2c,
+ 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e,
+ 0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x63, 0x6f, 0x72,
+ 0x65, 0x73, 0x20, 0x62, 0x75, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68,
+ 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x20,
+ 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x73,
+ 0x74, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x4b, 0x41, 0x53, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x77,
+ 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65,
+ 0x64, 0x20, 0x74, 0x6f, 0x20, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x20, 0x63, 0x61, 0x73, 0x65, 0x2e,
+ 0x1a, 0x53, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x20, 0x3e, 0x20, 0x30,
+ 0x20, 0x3f, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28,
+ 0x27, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x3f, 0x3a,
+ 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2a, 0x5b, 0x61,
+ 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x24, 0x27, 0x29, 0x20, 0x3a,
+ 0x20, 0x74, 0x72, 0x75, 0x65, 0xc8, 0x01, 0x00, 0x72, 0x03, 0x18, 0xfd, 0x01, 0x52, 0x04, 0x6e,
+ 0x61, 0x6d, 0x65, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18,
+ 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d,
+ 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x08,
+ 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x64, 0x0a, 0x1d, 0x43, 0x72, 0x65, 0x61,
+ 0x74, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65,
+ 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x11, 0x6b, 0x65, 0x79,
+ 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x01,
+ 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, 0x0f, 0x6b,
+ 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x22, 0xa5,
+ 0x07, 0x0a, 0x1c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65,
+ 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+ 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05,
+ 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0xac, 0x02, 0x0a, 0x03, 0x75, 0x72,
+ 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x99, 0x02, 0xba, 0x48, 0x95, 0x02, 0xba, 0x01,
+ 0x91, 0x02, 0x0a, 0x13, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x72, 0x69,
+ 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0xd8, 0x01, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+ 0x61, 0x6c, 0x20, 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, 0x1f, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x20, 0x3d,
+ 0x3d, 0x20, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x69, 0x73, 0x55, 0x72,
+ 0x69, 0x28, 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, 0x40, 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, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xc8, 0x01, 0x00, 0x82, 0x01, 0x02, 0x10, 0x01,
+ 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0xbc, 0x02, 0x0a,
+ 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x42, 0xa7, 0x02, 0xba, 0x48,
+ 0xa3, 0x02, 0xba, 0x01, 0x97, 0x02, 0x0a, 0x0f, 0x6b, 0x61, 0x73, 0x5f, 0x6e, 0x61, 0x6d, 0x65,
+ 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0xb3, 0x01, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74,
+ 0x65, 0x72, 0x65, 0x64, 0x20, 0x4b, 0x41, 0x53, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75,
+ 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, 0x75,
+ 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x61, 0x6c,
+ 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e, 0x73, 0x2c, 0x20,
+ 0x61, 0x6e, 0x64, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x20,
+ 0x62, 0x75, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66,
+ 0x69, 0x72, 0x73, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61,
+ 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x73, 0x74, 0x6f, 0x72,
+ 0x65, 0x64, 0x20, 0x4b, 0x41, 0x53, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c,
+ 0x20, 0x62, 0x65, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x74,
+ 0x6f, 0x20, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x20, 0x63, 0x61, 0x73, 0x65, 0x2e, 0x1a, 0x4e, 0x73,
+ 0x69, 0x7a, 0x65, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x7c,
+ 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27,
+ 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x3f, 0x3a, 0x5b,
+ 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2a, 0x5b, 0x61, 0x2d,
+ 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x24, 0x27, 0x29, 0xc8, 0x01, 0x00,
0x72, 0x03, 0x18, 0xfd, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x33, 0x0a, 0x08, 0x6d,
0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e,
0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d,
0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
- 0x22, 0x64, 0x0a, 0x1d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63,
- 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x12, 0x43, 0x0a, 0x11, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f,
- 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x01, 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, 0x0f, 0x6b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73,
- 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x22, 0xa5, 0x07, 0x0a, 0x1c, 0x55, 0x70, 0x64, 0x61, 0x74,
- 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x02, 0x69,
- 0x64, 0x12, 0xac, 0x02, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42,
- 0x99, 0x02, 0xba, 0x48, 0x95, 0x02, 0xba, 0x01, 0x91, 0x02, 0x0a, 0x13, 0x6f, 0x70, 0x74, 0x69,
- 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x72, 0x69, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12,
- 0xd8, 0x01, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 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, 0x1f, 0x73, 0x69, 0x7a, 0x65,
- 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x74,
- 0x68, 0x69, 0x73, 0x2e, 0x69, 0x73, 0x55, 0x72, 0x69, 0x28, 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, 0x40, 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, 0x42, 0x0b, 0xba, 0x48, 0x08,
- 0xc8, 0x01, 0x00, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
- 0x54, 0x79, 0x70, 0x65, 0x12, 0xbc, 0x02, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x14, 0x20,
- 0x01, 0x28, 0x09, 0x42, 0xa7, 0x02, 0xba, 0x48, 0xa3, 0x02, 0xba, 0x01, 0x97, 0x02, 0x0a, 0x0f,
- 0x6b, 0x61, 0x73, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12,
- 0xb3, 0x01, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x20, 0x4b, 0x41, 0x53,
- 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x6e,
- 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x73, 0x74,
- 0x72, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x68,
- 0x79, 0x70, 0x68, 0x65, 0x6e, 0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x75, 0x6e, 0x64, 0x65,
- 0x72, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x20, 0x62, 0x75, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20,
- 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x6f, 0x72, 0x20,
- 0x6c, 0x61, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x2e, 0x20,
- 0x54, 0x68, 0x65, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x4b, 0x41, 0x53, 0x20, 0x6e,
- 0x61, 0x6d, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x6e, 0x6f, 0x72, 0x6d,
- 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x20,
- 0x63, 0x61, 0x73, 0x65, 0x2e, 0x1a, 0x4e, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x74, 0x68, 0x69, 0x73,
- 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d,
- 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a,
- 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x3f, 0x3a, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d,
- 0x39, 0x5f, 0x2d, 0x5d, 0x2a, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d,
- 0x29, 0x3f, 0x24, 0x27, 0x29, 0xc8, 0x01, 0x00, 0x72, 0x03, 0x18, 0xfd, 0x01, 0x52, 0x04, 0x6e,
- 0x61, 0x6d, 0x65, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18,
- 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d,
- 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x08,
- 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x54, 0x0a, 0x18, 0x6d, 0x65, 0x74, 0x61,
- 0x64, 0x61, 0x74, 0x61, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x65, 0x68, 0x61,
- 0x76, 0x69, 0x6f, 0x72, 0x18, 0x65, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x6d,
- 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x55, 0x70, 0x64, 0x61,
- 0x74, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x16, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
- 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x22, 0x64,
- 0x0a, 0x1d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73,
- 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
- 0x43, 0x0a, 0x11, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x73, 0x65,
- 0x72, 0x76, 0x65, 0x72, 0x18, 0x01, 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, 0x0f, 0x6b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65,
- 0x72, 0x76, 0x65, 0x72, 0x22, 0x38, 0x0a, 0x1c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65,
- 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
- 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x64,
- 0x0a, 0x1d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73,
- 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
- 0x43, 0x0a, 0x11, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x73, 0x65,
- 0x72, 0x76, 0x65, 0x72, 0x18, 0x01, 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, 0x0f, 0x6b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65,
- 0x72, 0x76, 0x65, 0x72, 0x22, 0x37, 0x0a, 0x13, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x50,
- 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69,
- 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x66,
- 0x71, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x66, 0x71, 0x6e, 0x22, 0xd0, 0x02,
- 0x0a, 0x15, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65,
- 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x43, 0x0a, 0x11, 0x6b, 0x65, 0x79, 0x5f, 0x61,
+ 0x12, 0x54, 0x0a, 0x18, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x75, 0x70, 0x64,
+ 0x61, 0x74, 0x65, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x18, 0x65, 0x20, 0x01,
+ 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61,
+ 0x64, 0x61, 0x74, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x16,
+ 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x65,
+ 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x22, 0x64, 0x0a, 0x1d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
+ 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x11, 0x6b, 0x65, 0x79, 0x5f, 0x61,
0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x01, 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, 0x0f, 0x6b, 0x65, 0x79,
- 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x12, 0x52, 0x0a, 0x10,
- 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73,
- 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e,
- 0x6b, 0x61, 0x73, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x47, 0x72, 0x61, 0x6e,
- 0x74, 0x65, 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52,
- 0x0f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73,
- 0x12, 0x52, 0x0a, 0x10, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x67, 0x72,
- 0x61, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x6f, 0x6c,
- 0x69, 0x63, 0x79, 0x2e, 0x6b, 0x61, 0x73, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e,
- 0x47, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4f, 0x62, 0x6a,
- 0x65, 0x63, 0x74, 0x52, 0x0f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x47, 0x72,
- 0x61, 0x6e, 0x74, 0x73, 0x12, 0x4a, 0x0a, 0x0c, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x67, 0x72,
- 0x61, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x6f, 0x6c,
- 0x69, 0x63, 0x79, 0x2e, 0x6b, 0x61, 0x73, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e,
+ 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x22, 0x38, 0x0a, 0x1c,
+ 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53,
+ 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x02,
+ 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0,
+ 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x64, 0x0a, 0x1d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
+ 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x11, 0x6b, 0x65, 0x79, 0x5f, 0x61,
+ 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x01, 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, 0x0f, 0x6b, 0x65, 0x79,
+ 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x22, 0x37, 0x0a, 0x13,
0x47, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4f, 0x62, 0x6a,
- 0x65, 0x63, 0x74, 0x52, 0x0b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73,
- 0x22, 0x9e, 0x01, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69,
- 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x06, 0x6b,
- 0x61, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05,
- 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x05, 0x6b, 0x61, 0x73, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x03,
- 0x6b, 0x65, 0x79, 0x18, 0x02, 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, 0x42,
- 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x33, 0x0a, 0x08,
- 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17,
- 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
- 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
- 0x61, 0x22, 0x38, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69,
- 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x03,
- 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x6f, 0x6c, 0x69,
- 0x63, 0x79, 0x2e, 0x4b, 0x65, 0x79, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, 0x3f, 0x0a, 0x13, 0x47,
- 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08,
- 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x02, 0x69, 0x64, 0x42, 0x0c,
- 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x22, 0x35, 0x0a, 0x14,
- 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70,
+ 0x65, 0x63, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x03, 0x66, 0x71, 0x6e, 0x22, 0xd0, 0x02, 0x0a, 0x15, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63,
+ 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x12,
+ 0x43, 0x0a, 0x11, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x73, 0x65,
+ 0x72, 0x76, 0x65, 0x72, 0x18, 0x01, 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, 0x0f, 0x6b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65,
+ 0x72, 0x76, 0x65, 0x72, 0x12, 0x52, 0x0a, 0x10, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63,
+ 0x65, 0x5f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27,
+ 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6b, 0x61, 0x73, 0x72, 0x65, 0x67, 0x69, 0x73,
+ 0x74, 0x72, 0x79, 0x2e, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x50, 0x6f, 0x6c, 0x69, 0x63,
+ 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x0f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x52, 0x0a, 0x10, 0x61, 0x74, 0x74, 0x72,
+ 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03,
+ 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6b, 0x61, 0x73, 0x72,
+ 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x50,
+ 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x0f, 0x61, 0x74, 0x74,
+ 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x4a, 0x0a, 0x0c,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03,
+ 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6b, 0x61, 0x73, 0x72,
+ 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x50,
+ 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x52, 0x0b, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x22, 0x9e, 0x01, 0x0a, 0x16, 0x43, 0x72, 0x65,
+ 0x61, 0x74, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x06, 0x6b, 0x61, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x05, 0x6b,
+ 0x61, 0x73, 0x49, 0x64, 0x12, 0x2e, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 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, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52,
+ 0x03, 0x6b, 0x65, 0x79, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
+ 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e,
+ 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52,
+ 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x38, 0x0a, 0x17, 0x43, 0x72, 0x65,
+ 0x61, 0x74, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70,
0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,
0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x65, 0x79, 0x52, 0x03,
- 0x6b, 0x65, 0x79, 0x22, 0xca, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x75, 0x62, 0x6c,
- 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a,
- 0x06, 0x6b, 0x61, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba,
- 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x05, 0x6b, 0x61, 0x73, 0x49, 0x64,
- 0x12, 0x24, 0x0a, 0x08, 0x6b, 0x61, 0x73, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01,
- 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x48, 0x00, 0x52, 0x07, 0x6b,
- 0x61, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x07, 0x6b, 0x61, 0x73, 0x5f, 0x75, 0x72,
- 0x69, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x10, 0x01,
- 0x88, 0x01, 0x01, 0x48, 0x00, 0x52, 0x06, 0x6b, 0x61, 0x73, 0x55, 0x72, 0x69, 0x12, 0x33, 0x0a,
- 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x42, 0x0c, 0x0a, 0x0a, 0x6b, 0x61, 0x73, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72,
- 0x22, 0x6f, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65,
- 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x04, 0x6b, 0x65,
- 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63,
- 0x79, 0x2e, 0x4b, 0x65, 0x79, 0x52, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x12, 0x34, 0x0a, 0x0a, 0x70,
- 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x14, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73,
- 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x22, 0x81, 0x02, 0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63,
- 0x4b, 0x65, 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x12, 0x21, 0x0a, 0x06, 0x6b, 0x61, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x05, 0x6b,
- 0x61, 0x73, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x08, 0x6b, 0x61, 0x73, 0x5f, 0x6e, 0x61, 0x6d, 0x65,
- 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x48,
- 0x00, 0x52, 0x07, 0x6b, 0x61, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x07, 0x6b, 0x61,
- 0x73, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07,
- 0x72, 0x05, 0x10, 0x01, 0x88, 0x01, 0x01, 0x48, 0x00, 0x52, 0x06, 0x6b, 0x61, 0x73, 0x55, 0x72,
- 0x69, 0x12, 0x2f, 0x0a, 0x0d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x5f,
- 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xba, 0x48, 0x08, 0xd8, 0x01, 0x01,
- 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x0b, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79,
- 0x49, 0x64, 0x12, 0x33, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e,
- 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67,
- 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0c, 0x0a, 0x0a, 0x6b, 0x61, 0x73, 0x5f, 0x66,
- 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0xf6, 0x05, 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x75,
- 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71, 0x0a, 0x13, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63,
- 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20,
- 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6b, 0x61, 0x73,
- 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x75, 0x62,
- 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73,
- 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x4d,
- 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x11, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65,
- 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x34, 0x0a, 0x0a, 0x70, 0x61, 0x67,
- 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e,
- 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a,
- 0xba, 0x01, 0x0a, 0x10, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x4d, 0x61, 0x70,
- 0x70, 0x69, 0x6e, 0x67, 0x12, 0x15, 0x0a, 0x06, 0x6b, 0x61, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x02,
- 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6b, 0x61, 0x73, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6b,
- 0x61, 0x73, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6b,
- 0x61, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x6b, 0x61, 0x73, 0x5f, 0x75, 0x72,
- 0x69, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6b, 0x61, 0x73, 0x55, 0x72, 0x69, 0x12,
- 0x5b, 0x0a, 0x0b, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x05,
- 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6b, 0x61,
- 0x73, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x75,
- 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79,
- 0x52, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x1a, 0xbe, 0x02, 0x0a,
- 0x09, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x1d, 0x0a, 0x03, 0x6b, 0x65,
- 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
- 0x2e, 0x4b, 0x65, 0x79, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x54, 0x0a, 0x06, 0x76, 0x61, 0x6c,
- 0x75, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x6f, 0x6c, 0x69,
- 0x63, 0x79, 0x2e, 0x6b, 0x61, 0x73, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4c,
- 0x69, 0x73, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x4d, 0x61, 0x70, 0x70,
- 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x41, 0x73, 0x73, 0x6f,
- 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12,
- 0x5e, 0x0a, 0x0b, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07,
- 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6b, 0x61,
- 0x73, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x75,
- 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x52, 0x0b, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12,
- 0x5c, 0x0a, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x08, 0x20,
- 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6b, 0x61, 0x73,
- 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x75, 0x62,
- 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73,
- 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x52, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x1a, 0x2f, 0x0a,
- 0x0b, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02,
- 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03,
- 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x66, 0x71, 0x6e, 0x22, 0xbd,
- 0x01, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b,
- 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52,
- 0x02, 0x69, 0x64, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18,
- 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d,
- 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x08,
- 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x54, 0x0a, 0x18, 0x6d, 0x65, 0x74, 0x61,
- 0x64, 0x61, 0x74, 0x61, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x65, 0x68, 0x61,
- 0x76, 0x69, 0x6f, 0x72, 0x18, 0x65, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x6d,
- 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x55, 0x70, 0x64, 0x61,
- 0x74, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x16, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
- 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x22, 0x38,
- 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65,
- 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x03, 0x6b, 0x65, 0x79,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e,
- 0x4b, 0x65, 0x79, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, 0x36, 0x0a, 0x1a, 0x44, 0x65, 0x61, 0x63,
- 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64,
- 0x22, 0x3c, 0x0a, 0x1b, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x50, 0x75,
- 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
- 0x1d, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70,
- 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x65, 0x79, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, 0x34,
- 0x0a, 0x18, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63,
- 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64,
+ 0x6b, 0x65, 0x79, 0x22, 0x3f, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63,
+ 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x02, 0x69, 0x64,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01,
- 0x52, 0x02, 0x69, 0x64, 0x22, 0x3a, 0x0a, 0x19, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65,
+ 0x48, 0x00, 0x52, 0x02, 0x69, 0x64, 0x42, 0x0c, 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69,
+ 0x66, 0x69, 0x65, 0x72, 0x22, 0x35, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69,
+ 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x03,
+ 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x6f, 0x6c, 0x69,
+ 0x63, 0x79, 0x2e, 0x4b, 0x65, 0x79, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, 0xca, 0x01, 0x0a, 0x15,
+ 0x4c, 0x69, 0x73, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x06, 0x6b, 0x61, 0x73, 0x5f, 0x69, 0x64, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x48,
+ 0x00, 0x52, 0x05, 0x6b, 0x61, 0x73, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x08, 0x6b, 0x61, 0x73, 0x5f,
+ 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72,
+ 0x02, 0x10, 0x01, 0x48, 0x00, 0x52, 0x07, 0x6b, 0x61, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x25,
+ 0x0a, 0x07, 0x6b, 0x61, 0x73, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42,
+ 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x10, 0x01, 0x88, 0x01, 0x01, 0x48, 0x00, 0x52, 0x06, 0x6b,
+ 0x61, 0x73, 0x55, 0x72, 0x69, 0x12, 0x33, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x6f, 0x6c, 0x69,
+ 0x63, 0x79, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a,
+ 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0c, 0x0a, 0x0a, 0x6b, 0x61,
+ 0x73, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0x6f, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74,
+ 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x04, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b,
+ 0x32, 0x0b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x65, 0x79, 0x52, 0x04, 0x6b,
+ 0x65, 0x79, 0x73, 0x12, 0x34, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
+ 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70,
+ 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x81, 0x02, 0x0a, 0x1b, 0x4c, 0x69,
+ 0x73, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69,
+ 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x06, 0x6b, 0x61, 0x73,
+ 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03,
+ 0xb0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x05, 0x6b, 0x61, 0x73, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x08,
+ 0x6b, 0x61, 0x73, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07,
+ 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x48, 0x00, 0x52, 0x07, 0x6b, 0x61, 0x73, 0x4e, 0x61,
+ 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x07, 0x6b, 0x61, 0x73, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x03, 0x20,
+ 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x10, 0x01, 0x88, 0x01, 0x01, 0x48,
+ 0x00, 0x52, 0x06, 0x6b, 0x61, 0x73, 0x55, 0x72, 0x69, 0x12, 0x2f, 0x0a, 0x0d, 0x70, 0x75, 0x62,
+ 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
+ 0x42, 0x0b, 0xba, 0x48, 0x08, 0xd8, 0x01, 0x01, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x0b, 0x70,
+ 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x0a, 0x70, 0x61,
+ 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13,
+ 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42,
+ 0x0c, 0x0a, 0x0a, 0x6b, 0x61, 0x73, 0x5f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x22, 0xf6, 0x05,
+ 0x0a, 0x1c, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x4d,
+ 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x71,
+ 0x0a, 0x13, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x61, 0x70,
+ 0x70, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x6f,
+ 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6b, 0x61, 0x73, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79,
+ 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x4d, 0x61,
+ 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x50, 0x75,
+ 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x11,
+ 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67,
+ 0x73, 0x12, 0x34, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18,
+ 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50,
+ 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67,
+ 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xba, 0x01, 0x0a, 0x10, 0x50, 0x75, 0x62, 0x6c,
+ 0x69, 0x63, 0x4b, 0x65, 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x15, 0x0a, 0x06,
+ 0x6b, 0x61, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6b, 0x61,
+ 0x73, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6b, 0x61, 0x73, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18,
+ 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6b, 0x61, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x17,
+ 0x0a, 0x07, 0x6b, 0x61, 0x73, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52,
+ 0x06, 0x6b, 0x61, 0x73, 0x55, 0x72, 0x69, 0x12, 0x5b, 0x0a, 0x0b, 0x70, 0x75, 0x62, 0x6c, 0x69,
+ 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70,
+ 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6b, 0x61, 0x73, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72,
+ 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x4d,
+ 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x50,
+ 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63,
+ 0x4b, 0x65, 0x79, 0x73, 0x1a, 0xbe, 0x02, 0x0a, 0x09, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b,
+ 0x65, 0x79, 0x12, 0x1d, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x0b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x65, 0x79, 0x52, 0x03, 0x6b, 0x65,
+ 0x79, 0x12, 0x54, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28,
+ 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6b, 0x61, 0x73, 0x72, 0x65,
+ 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69,
+ 0x63, 0x4b, 0x65, 0x79, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f,
+ 0x6e, 0x73, 0x65, 0x2e, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
+ 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x5e, 0x0a, 0x0b, 0x64, 0x65, 0x66, 0x69, 0x6e,
+ 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70,
+ 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6b, 0x61, 0x73, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72,
+ 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x4d,
+ 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x41,
+ 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x64, 0x65, 0x66, 0x69,
+ 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x5c, 0x0a, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x70, 0x6f,
+ 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6b, 0x61, 0x73, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79,
+ 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x4d, 0x61,
+ 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x41, 0x73,
+ 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x73, 0x1a, 0x2f, 0x0a, 0x0b, 0x41, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x02, 0x69, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x03, 0x66, 0x71, 0x6e, 0x22, 0xbd, 0x01, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74,
+ 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba,
+ 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x33, 0x0a, 0x08, 0x6d,
+ 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e,
+ 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d,
+ 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
+ 0x12, 0x54, 0x0a, 0x18, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x75, 0x70, 0x64,
+ 0x61, 0x74, 0x65, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x18, 0x65, 0x20, 0x01,
+ 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61,
+ 0x64, 0x61, 0x74, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x16,
+ 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x65,
+ 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x22, 0x38, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
0x65, 0x12, 0x1d, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b,
0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x65, 0x79, 0x52, 0x03, 0x6b, 0x65, 0x79,
- 0x22, 0xa5, 0x07, 0x0a, 0x20, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65,
- 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0xcb, 0x01, 0x0a, 0x06, 0x6b, 0x61, 0x73, 0x5f, 0x69, 0x64,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0xb3, 0x01, 0xba, 0x48, 0xaf, 0x01, 0xba, 0x01, 0xab,
- 0x01, 0x0a, 0x14, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x75, 0x69, 0x64,
- 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x23, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61,
- 0x6c, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20,
- 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x55, 0x55, 0x49, 0x44, 0x1a, 0x6e, 0x73, 0x69,
- 0x7a, 0x65, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x7c, 0x7c,
- 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5b,
- 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30,
- 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d,
- 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39,
- 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61,
- 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x27, 0x29, 0x52, 0x05, 0x6b, 0x61,
- 0x73, 0x49, 0x64, 0x12, 0xb3, 0x02, 0x0a, 0x07, 0x6b, 0x61, 0x73, 0x5f, 0x75, 0x72, 0x69, 0x18,
- 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x99, 0x02, 0xba, 0x48, 0x95, 0x02, 0xba, 0x01, 0x91, 0x02,
- 0x0a, 0x13, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x72, 0x69, 0x5f, 0x66,
- 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0xd8, 0x01, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c,
- 0x20, 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, 0x1f, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x20, 0x3d, 0x3d, 0x20,
- 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x69, 0x73, 0x55, 0x72, 0x69, 0x28,
- 0x29, 0x52, 0x06, 0x6b, 0x61, 0x73, 0x55, 0x72, 0x69, 0x12, 0xc3, 0x02, 0x0a, 0x08, 0x6b, 0x61,
- 0x73, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0xa7, 0x02, 0xba,
- 0x48, 0xa3, 0x02, 0xba, 0x01, 0x97, 0x02, 0x0a, 0x0f, 0x6b, 0x61, 0x73, 0x5f, 0x6e, 0x61, 0x6d,
- 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0xb3, 0x01, 0x52, 0x65, 0x67, 0x69, 0x73,
- 0x74, 0x65, 0x72, 0x65, 0x64, 0x20, 0x4b, 0x41, 0x53, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d,
- 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e,
- 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x61,
- 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e, 0x73, 0x2c,
- 0x20, 0x61, 0x6e, 0x64, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73,
- 0x20, 0x62, 0x75, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20,
- 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x63, 0x68,
- 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x73, 0x74, 0x6f,
- 0x72, 0x65, 0x64, 0x20, 0x4b, 0x41, 0x53, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x77, 0x69, 0x6c,
- 0x6c, 0x20, 0x62, 0x65, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20,
- 0x74, 0x6f, 0x20, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x20, 0x63, 0x61, 0x73, 0x65, 0x2e, 0x1a, 0x4e,
- 0x73, 0x69, 0x7a, 0x65, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20,
- 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28,
- 0x27, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x3f, 0x3a,
- 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2a, 0x5b, 0x61,
- 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x24, 0x27, 0x29, 0xc8, 0x01,
- 0x00, 0x72, 0x03, 0x18, 0xfd, 0x01, 0x52, 0x07, 0x6b, 0x61, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x12,
- 0x33, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20,
- 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x61, 0x67,
- 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x02, 0x18, 0x01, 0x22, 0xa4, 0x01, 0x0a, 0x21, 0x4c, 0x69, 0x73,
+ 0x22, 0x36, 0x0a, 0x1a, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x50, 0x75,
+ 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18,
+ 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72,
+ 0x03, 0xb0, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x3c, 0x0a, 0x1b, 0x44, 0x65, 0x61, 0x63,
+ 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x65,
+ 0x79, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, 0x34, 0x0a, 0x18, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61,
+ 0x74, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08,
+ 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x3a, 0x0a, 0x19,
+ 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65,
+ 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x03, 0x6b, 0x65, 0x79,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e,
+ 0x4b, 0x65, 0x79, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, 0xa5, 0x07, 0x0a, 0x20, 0x4c, 0x69, 0x73,
0x74, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72,
- 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45,
- 0x0a, 0x06, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29,
- 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6b, 0x61, 0x73, 0x72, 0x65, 0x67, 0x69, 0x73,
- 0x74, 0x72, 0x79, 0x2e, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72,
- 0x76, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x42, 0x02, 0x18, 0x01, 0x52, 0x06, 0x67,
- 0x72, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x34, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c, 0x69,
- 0x63, 0x79, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52,
- 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x02, 0x18, 0x01, 0x22,
- 0xd5, 0x0c, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x06, 0x6b, 0x61, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x05,
- 0x6b, 0x61, 0x73, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x06, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x18,
- 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x05,
- 0x6b, 0x65, 0x79, 0x49, 0x64, 0x12, 0xad, 0x01, 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,
- 0x42, 0x75, 0xba, 0x48, 0x72, 0xba, 0x01, 0x6f, 0x0a, 0x15, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x6c,
- 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x12,
- 0x34, 0x54, 0x68, 0x65, 0x20, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74,
- 0x68, 0x6d, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f,
- 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x76, 0x61,
- 0x6c, 0x75, 0x65, 0x73, 0x2e, 0x1a, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x5b,
- 0x31, 0x2c, 0x20, 0x32, 0x2c, 0x20, 0x33, 0x2c, 0x20, 0x34, 0x2c, 0x20, 0x35, 0x2c, 0x20, 0x36,
- 0x2c, 0x20, 0x37, 0x2c, 0x20, 0x38, 0x5d, 0x52, 0x0c, 0x6b, 0x65, 0x79, 0x41, 0x6c, 0x67, 0x6f,
- 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, 0x93, 0x01, 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, 0x42, 0x67, 0xba, 0x48, 0x64, 0xba, 0x01,
- 0x61, 0x0a, 0x10, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x69,
- 0x6e, 0x65, 0x64, 0x12, 0x35, 0x54, 0x68, 0x65, 0x20, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x6f, 0x64,
- 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x66,
- 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x76, 0x61, 0x6c,
- 0x75, 0x65, 0x73, 0x20, 0x28, 0x31, 0x2d, 0x34, 0x29, 0x2e, 0x1a, 0x16, 0x74, 0x68, 0x69, 0x73,
- 0x20, 0x3e, 0x3d, 0x20, 0x31, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d,
- 0x20, 0x34, 0x52, 0x07, 0x6b, 0x65, 0x79, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x42, 0x0a, 0x0e, 0x70,
- 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x74, 0x78, 0x18, 0x05, 0x20,
- 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x75, 0x62,
- 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x43, 0x74, 0x78, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01,
- 0x01, 0x52, 0x0c, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x43, 0x74, 0x78, 0x12,
- 0x3d, 0x0a, 0x0f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x63,
- 0x74, 0x78, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63,
- 0x79, 0x2e, 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, 0x2c,
- 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69,
- 0x67, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x70, 0x72, 0x6f, 0x76,
- 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06,
- 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6c, 0x65,
- 0x67, 0x61, 0x63, 0x79, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
- 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e,
- 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52,
- 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x3a, 0xbb, 0x07, 0xba, 0x48, 0xb7, 0x07,
- 0x1a, 0x97, 0x03, 0x0a, 0x23, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79,
- 0x5f, 0x63, 0x74, 0x78, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x5f,
- 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0xbc, 0x01, 0x54, 0x68, 0x65, 0x20, 0x77,
- 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x20, 0x69, 0x73, 0x20, 0x72, 0x65,
- 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x20, 0x69, 0x66, 0x20, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x6f,
- 0x64, 0x65, 0x20, 0x69, 0x73, 0x20, 0x4b, 0x45, 0x59, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x43,
- 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x52, 0x4f, 0x4f, 0x54, 0x5f, 0x4b, 0x45, 0x59, 0x20, 0x6f,
- 0x72, 0x20, 0x4b, 0x45, 0x59, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49,
- 0x44, 0x45, 0x52, 0x5f, 0x52, 0x4f, 0x4f, 0x54, 0x5f, 0x4b, 0x45, 0x59, 0x2e, 0x20, 0x54, 0x68,
- 0x65, 0x20, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x20, 0x6d, 0x75,
- 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x20, 0x69, 0x66, 0x20, 0x6b,
- 0x65, 0x79, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x69, 0x73, 0x20, 0x4b, 0x45, 0x59, 0x5f, 0x4d,
- 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x54, 0x45, 0x20, 0x6f, 0x72, 0x20, 0x4b, 0x45,
- 0x59, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x4b, 0x45,
- 0x59, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x2e, 0x1a, 0xb0, 0x01, 0x28, 0x28, 0x74, 0x68, 0x69, 0x73,
- 0x2e, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x20, 0x7c,
- 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x20,
- 0x3d, 0x3d, 0x20, 0x32, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x70, 0x72,
- 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x74, 0x78, 0x2e, 0x77, 0x72,
- 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x20, 0x21, 0x3d, 0x20, 0x27, 0x27, 0x29,
- 0x20, 0x7c, 0x7c, 0x20, 0x28, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6b, 0x65, 0x79, 0x5f, 0x6d,
- 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x33, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73,
- 0x2e, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x34, 0x29, 0x20,
- 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f,
- 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x74, 0x78, 0x2e, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f,
- 0x6b, 0x65, 0x79, 0x20, 0x3d, 0x3d, 0x20, 0x27, 0x27, 0x29, 0x1a, 0xf4, 0x02, 0x0a, 0x26, 0x70,
+ 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0xcb, 0x01,
+ 0x0a, 0x06, 0x6b, 0x61, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0xb3,
+ 0x01, 0xba, 0x48, 0xaf, 0x01, 0xba, 0x01, 0xab, 0x01, 0x0a, 0x14, 0x6f, 0x70, 0x74, 0x69, 0x6f,
+ 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12,
+ 0x23, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20,
+ 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20,
+ 0x55, 0x55, 0x49, 0x44, 0x1a, 0x6e, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29,
+ 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61,
+ 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d,
+ 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46,
+ 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d,
+ 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b,
+ 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x31,
+ 0x32, 0x7d, 0x27, 0x29, 0x52, 0x05, 0x6b, 0x61, 0x73, 0x49, 0x64, 0x12, 0xb3, 0x02, 0x0a, 0x07,
+ 0x6b, 0x61, 0x73, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x99, 0x02,
+ 0xba, 0x48, 0x95, 0x02, 0xba, 0x01, 0x91, 0x02, 0x0a, 0x13, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+ 0x61, 0x6c, 0x5f, 0x75, 0x72, 0x69, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0xd8, 0x01,
+ 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 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, 0x1f, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x74,
+ 0x68, 0x69, 0x73, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69,
+ 0x73, 0x2e, 0x69, 0x73, 0x55, 0x72, 0x69, 0x28, 0x29, 0x52, 0x06, 0x6b, 0x61, 0x73, 0x55, 0x72,
+ 0x69, 0x12, 0xc3, 0x02, 0x0a, 0x08, 0x6b, 0x61, 0x73, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03,
+ 0x20, 0x01, 0x28, 0x09, 0x42, 0xa7, 0x02, 0xba, 0x48, 0xa3, 0x02, 0xba, 0x01, 0x97, 0x02, 0x0a,
+ 0x0f, 0x6b, 0x61, 0x73, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74,
+ 0x12, 0xb3, 0x01, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x20, 0x4b, 0x41,
+ 0x53, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61,
+ 0x6e, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x73,
+ 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20,
+ 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e, 0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x75, 0x6e, 0x64,
+ 0x65, 0x72, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x20, 0x62, 0x75, 0x74, 0x20, 0x6e, 0x6f, 0x74,
+ 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x6f, 0x72,
+ 0x20, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x2e,
+ 0x20, 0x54, 0x68, 0x65, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x4b, 0x41, 0x53, 0x20,
+ 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x6e, 0x6f, 0x72,
+ 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x6c, 0x6f, 0x77, 0x65, 0x72,
+ 0x20, 0x63, 0x61, 0x73, 0x65, 0x2e, 0x1a, 0x4e, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x74, 0x68, 0x69,
+ 0x73, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e,
+ 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d,
+ 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x3f, 0x3a, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30,
+ 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2a, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39,
+ 0x5d, 0x29, 0x3f, 0x24, 0x27, 0x29, 0xc8, 0x01, 0x00, 0x72, 0x03, 0x18, 0xfd, 0x01, 0x52, 0x07,
+ 0x6b, 0x61, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x33, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e,
+ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x6f,
+ 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x02, 0x18, 0x01,
+ 0x22, 0xa4, 0x01, 0x0a, 0x21, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65,
+ 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x06, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73,
+ 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e,
+ 0x6b, 0x61, 0x73, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4b, 0x65, 0x79, 0x41,
+ 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x47, 0x72, 0x61, 0x6e, 0x74,
+ 0x73, 0x42, 0x02, 0x18, 0x01, 0x52, 0x06, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x34, 0x0a,
+ 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x3a, 0x02, 0x18, 0x01, 0x22, 0xd5, 0x0c, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61,
+ 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x06,
+ 0x6b, 0x61, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48,
+ 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x05, 0x6b, 0x61, 0x73, 0x49, 0x64, 0x12, 0x1e, 0x0a,
+ 0x06, 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba,
+ 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6b, 0x65, 0x79, 0x49, 0x64, 0x12, 0xad, 0x01,
+ 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, 0x42, 0x75, 0xba, 0x48, 0x72, 0xba, 0x01, 0x6f,
+ 0x0a, 0x15, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x5f,
+ 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x12, 0x34, 0x54, 0x68, 0x65, 0x20, 0x6b, 0x65, 0x79,
+ 0x5f, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20,
+ 0x62, 0x65, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65,
+ 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x2e, 0x1a, 0x20, 0x74,
+ 0x68, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x5b, 0x31, 0x2c, 0x20, 0x32, 0x2c, 0x20, 0x33, 0x2c,
+ 0x20, 0x34, 0x2c, 0x20, 0x35, 0x2c, 0x20, 0x36, 0x2c, 0x20, 0x37, 0x2c, 0x20, 0x38, 0x5d, 0x52,
+ 0x0c, 0x6b, 0x65, 0x79, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, 0x93, 0x01,
+ 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, 0x42, 0x67, 0xba, 0x48, 0x64, 0xba, 0x01, 0x61, 0x0a, 0x10, 0x6b, 0x65, 0x79, 0x5f, 0x6d,
+ 0x6f, 0x64, 0x65, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x12, 0x35, 0x54, 0x68, 0x65,
+ 0x20, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62,
+ 0x65, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66,
+ 0x69, 0x6e, 0x65, 0x64, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x28, 0x31, 0x2d, 0x34,
+ 0x29, 0x2e, 0x1a, 0x16, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3e, 0x3d, 0x20, 0x31, 0x20, 0x26, 0x26,
+ 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, 0x3c, 0x3d, 0x20, 0x34, 0x52, 0x07, 0x6b, 0x65, 0x79, 0x4d,
+ 0x6f, 0x64, 0x65, 0x12, 0x42, 0x0a, 0x0e, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65,
+ 0x79, 0x5f, 0x63, 0x74, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f,
+ 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x43, 0x74,
+ 0x78, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x0c, 0x70, 0x75, 0x62, 0x6c, 0x69,
+ 0x63, 0x4b, 0x65, 0x79, 0x43, 0x74, 0x78, 0x12, 0x3d, 0x0a, 0x0f, 0x70, 0x72, 0x69, 0x76, 0x61,
+ 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x74, 0x78, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x15, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 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, 0x2c, 0x0a, 0x12, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64,
+ 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x10, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66,
+ 0x69, 0x67, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0x08,
+ 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x12, 0x33, 0x0a, 0x08,
+ 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17,
+ 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
+ 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
+ 0x61, 0x3a, 0xbb, 0x07, 0xba, 0x48, 0xb7, 0x07, 0x1a, 0x97, 0x03, 0x0a, 0x23, 0x70, 0x72, 0x69,
+ 0x76, 0x61, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x74, 0x78, 0x5f, 0x6f, 0x70, 0x74,
+ 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64,
+ 0x12, 0xbc, 0x01, 0x54, 0x68, 0x65, 0x20, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x6b,
+ 0x65, 0x79, 0x20, 0x69, 0x73, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x20, 0x69,
+ 0x66, 0x20, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x69, 0x73, 0x20, 0x4b, 0x45,
+ 0x59, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x52, 0x4f,
+ 0x4f, 0x54, 0x5f, 0x4b, 0x45, 0x59, 0x20, 0x6f, 0x72, 0x20, 0x4b, 0x45, 0x59, 0x5f, 0x4d, 0x4f,
+ 0x44, 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x44, 0x45, 0x52, 0x5f, 0x52, 0x4f, 0x4f, 0x54,
+ 0x5f, 0x4b, 0x45, 0x59, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65,
+ 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x65, 0x6d,
+ 0x70, 0x74, 0x79, 0x20, 0x69, 0x66, 0x20, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x20,
+ 0x69, 0x73, 0x20, 0x4b, 0x45, 0x59, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x4d, 0x4f,
+ 0x54, 0x45, 0x20, 0x6f, 0x72, 0x20, 0x4b, 0x45, 0x59, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x50,
+ 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x2e, 0x1a,
+ 0xb0, 0x01, 0x28, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x6f, 0x64,
+ 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6b,
+ 0x65, 0x79, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x32, 0x29, 0x20, 0x26, 0x26,
+ 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x6b, 0x65,
+ 0x79, 0x5f, 0x63, 0x74, 0x78, 0x2e, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x6b, 0x65,
+ 0x79, 0x20, 0x21, 0x3d, 0x20, 0x27, 0x27, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x28, 0x28, 0x74, 0x68,
+ 0x69, 0x73, 0x2e, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x33,
+ 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x6f, 0x64,
+ 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x34, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e,
+ 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x74, 0x78, 0x2e,
+ 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x20, 0x3d, 0x3d, 0x20, 0x27,
+ 0x27, 0x29, 0x1a, 0xf4, 0x02, 0x0a, 0x26, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f,
+ 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+ 0x61, 0x6c, 0x6c, 0x79, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0xa8, 0x01,
+ 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x20,
+ 0x69, 0x64, 0x20, 0x69, 0x73, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x20, 0x69,
+ 0x66, 0x20, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x69, 0x73, 0x20, 0x4b, 0x45,
+ 0x59, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x44, 0x45, 0x52, 0x5f,
+ 0x52, 0x4f, 0x4f, 0x54, 0x5f, 0x4b, 0x45, 0x59, 0x20, 0x6f, 0x72, 0x20, 0x4b, 0x45, 0x59, 0x5f,
+ 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x54, 0x45, 0x2e, 0x20, 0x49, 0x74, 0x20,
+ 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x20, 0x66, 0x6f,
+ 0x72, 0x20, 0x4b, 0x45, 0x59, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49,
+ 0x47, 0x5f, 0x52, 0x4f, 0x4f, 0x54, 0x5f, 0x4b, 0x45, 0x59, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x4b,
+ 0x45, 0x59, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x4b,
+ 0x45, 0x59, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x2e, 0x1a, 0x9e, 0x01, 0x28, 0x28, 0x74, 0x68, 0x69,
+ 0x73, 0x2e, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x20,
+ 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x6f, 0x64, 0x65,
+ 0x20, 0x3d, 0x3d, 0x20, 0x34, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x70,
0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69,
- 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x5f, 0x72, 0x65, 0x71,
- 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0xa8, 0x01, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72,
- 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x20, 0x69, 0x64, 0x20, 0x69, 0x73, 0x20, 0x72, 0x65,
- 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x20, 0x69, 0x66, 0x20, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x6f,
- 0x64, 0x65, 0x20, 0x69, 0x73, 0x20, 0x4b, 0x45, 0x59, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x50,
- 0x52, 0x4f, 0x56, 0x49, 0x44, 0x45, 0x52, 0x5f, 0x52, 0x4f, 0x4f, 0x54, 0x5f, 0x4b, 0x45, 0x59,
- 0x20, 0x6f, 0x72, 0x20, 0x4b, 0x45, 0x59, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x52, 0x45, 0x4d,
- 0x4f, 0x54, 0x45, 0x2e, 0x20, 0x49, 0x74, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20,
- 0x65, 0x6d, 0x70, 0x74, 0x79, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x4b, 0x45, 0x59, 0x5f, 0x4d, 0x4f,
- 0x44, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x5f, 0x52, 0x4f, 0x4f, 0x54, 0x5f, 0x4b,
- 0x45, 0x59, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x4b, 0x45, 0x59, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f,
- 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x2e,
- 0x1a, 0x9e, 0x01, 0x28, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x6f,
- 0x64, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e,
- 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x34, 0x29, 0x20, 0x26,
- 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f,
- 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x64, 0x20, 0x3d, 0x3d, 0x20, 0x27, 0x27, 0x29,
- 0x20, 0x7c, 0x7c, 0x20, 0x28, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6b, 0x65, 0x79, 0x5f, 0x6d,
- 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x32, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73,
- 0x2e, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x33, 0x29, 0x20,
- 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72,
- 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x69, 0x64, 0x20, 0x21, 0x3d, 0x20, 0x27, 0x27,
- 0x29, 0x1a, 0xa3, 0x01, 0x0a, 0x23, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x6b, 0x65,
- 0x79, 0x5f, 0x63, 0x74, 0x78, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63,
- 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x12, 0x48, 0x70, 0x72, 0x69, 0x76, 0x61,
- 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x74, 0x78, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20,
- 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x73, 0x65, 0x74, 0x20, 0x69, 0x66, 0x20, 0x6b, 0x65,
- 0x79, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x69, 0x73, 0x20, 0x4b, 0x45, 0x59, 0x5f, 0x4d, 0x4f,
- 0x44, 0x45, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x4f, 0x4e,
- 0x4c, 0x59, 0x2e, 0x1a, 0x32, 0x21, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6b, 0x65, 0x79, 0x5f,
- 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x34, 0x20, 0x26, 0x26, 0x20, 0x68, 0x61, 0x73,
- 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x6b, 0x65,
- 0x79, 0x5f, 0x63, 0x74, 0x78, 0x29, 0x29, 0x22, 0x3c, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74,
- 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x07,
- 0x6b, 0x61, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e,
- 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x4b, 0x65, 0x79, 0x52, 0x06, 0x6b,
- 0x61, 0x73, 0x4b, 0x65, 0x79, 0x22, 0x7a, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01,
- 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x02,
- 0x69, 0x64, 0x12, 0x38, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x24, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6b, 0x61, 0x73, 0x72, 0x65, 0x67, 0x69,
- 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x4b, 0x65, 0x79, 0x49, 0x64, 0x65, 0x6e, 0x74,
- 0x69, 0x66, 0x69, 0x65, 0x72, 0x48, 0x00, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x42, 0x13, 0x0a, 0x0a,
- 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x05, 0xba, 0x48, 0x02, 0x08,
- 0x01, 0x22, 0x39, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x07, 0x6b, 0x61, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x61,
- 0x73, 0x4b, 0x65, 0x79, 0x52, 0x06, 0x6b, 0x61, 0x73, 0x4b, 0x65, 0x79, 0x22, 0xde, 0x03, 0x0a,
- 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x12, 0xb0, 0x01, 0x0a, 0x0d, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74,
- 0x68, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63,
- 0x79, 0x2e, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x42, 0x78, 0xba, 0x48, 0x75,
- 0xba, 0x01, 0x72, 0x0a, 0x15, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74,
- 0x68, 0x6d, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x12, 0x34, 0x54, 0x68, 0x65, 0x20,
- 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x20, 0x6d, 0x75,
- 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65,
- 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x2e,
- 0x1a, 0x23, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x5b, 0x30, 0x2c, 0x20, 0x31, 0x2c,
- 0x20, 0x32, 0x2c, 0x20, 0x33, 0x2c, 0x20, 0x34, 0x2c, 0x20, 0x35, 0x2c, 0x20, 0x36, 0x2c, 0x20,
- 0x37, 0x2c, 0x20, 0x38, 0x5d, 0x52, 0x0c, 0x6b, 0x65, 0x79, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69,
- 0x74, 0x68, 0x6d, 0x12, 0x21, 0x0a, 0x06, 0x6b, 0x61, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x48, 0x00, 0x52,
- 0x05, 0x6b, 0x61, 0x73, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x08, 0x6b, 0x61, 0x73, 0x5f, 0x6e, 0x61,
- 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10,
- 0x01, 0x48, 0x00, 0x52, 0x07, 0x6b, 0x61, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x07,
- 0x6b, 0x61, 0x73, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba,
- 0x48, 0x07, 0x72, 0x05, 0x10, 0x01, 0x88, 0x01, 0x01, 0x48, 0x00, 0x52, 0x06, 0x6b, 0x61, 0x73,
- 0x55, 0x72, 0x69, 0x12, 0x1b, 0x0a, 0x06, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0x08, 0x20,
- 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x06, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x88, 0x01, 0x01,
- 0x12, 0x33, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x61,
- 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3d, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x0b, 0x20,
- 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6b, 0x61, 0x73,
- 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x4b, 0x65, 0x79, 0x73,
- 0x53, 0x6f, 0x72, 0x74, 0x42, 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, 0x02, 0x10, 0x01, 0x52, 0x04,
- 0x73, 0x6f, 0x72, 0x74, 0x42, 0x0c, 0x0a, 0x0a, 0x6b, 0x61, 0x73, 0x5f, 0x66, 0x69, 0x6c, 0x74,
+ 0x64, 0x20, 0x3d, 0x3d, 0x20, 0x27, 0x27, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x28, 0x28, 0x74, 0x68,
+ 0x69, 0x73, 0x2e, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x32,
+ 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x6f, 0x64,
+ 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x33, 0x29, 0x20, 0x26, 0x26, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e,
+ 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f,
+ 0x69, 0x64, 0x20, 0x21, 0x3d, 0x20, 0x27, 0x27, 0x29, 0x1a, 0xa3, 0x01, 0x0a, 0x23, 0x70, 0x72,
+ 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x74, 0x78, 0x5f, 0x66, 0x6f,
+ 0x72, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x6f, 0x6e, 0x6c,
+ 0x79, 0x12, 0x48, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x63,
+ 0x74, 0x78, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x73,
+ 0x65, 0x74, 0x20, 0x69, 0x66, 0x20, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x69,
+ 0x73, 0x20, 0x4b, 0x45, 0x59, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5f, 0x50, 0x55, 0x42, 0x4c, 0x49,
+ 0x43, 0x5f, 0x4b, 0x45, 0x59, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x2e, 0x1a, 0x32, 0x21, 0x28, 0x74,
+ 0x68, 0x69, 0x73, 0x2e, 0x6b, 0x65, 0x79, 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x3d, 0x20,
+ 0x34, 0x20, 0x26, 0x26, 0x20, 0x68, 0x61, 0x73, 0x28, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x70, 0x72,
+ 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x63, 0x74, 0x78, 0x29, 0x29, 0x22,
+ 0x3c, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x07, 0x6b, 0x61, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b,
+ 0x61, 0x73, 0x4b, 0x65, 0x79, 0x52, 0x06, 0x6b, 0x61, 0x73, 0x4b, 0x65, 0x79, 0x22, 0x7a, 0x0a,
+ 0x0d, 0x47, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a,
+ 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72,
+ 0x03, 0xb0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x02, 0x69, 0x64, 0x12, 0x38, 0x0a, 0x03, 0x6b, 0x65,
+ 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
+ 0x2e, 0x6b, 0x61, 0x73, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x2e, 0x4b, 0x61, 0x73,
+ 0x4b, 0x65, 0x79, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x48, 0x00, 0x52,
+ 0x03, 0x6b, 0x65, 0x79, 0x42, 0x13, 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69,
+ 0x65, 0x72, 0x12, 0x05, 0xba, 0x48, 0x02, 0x08, 0x01, 0x22, 0x39, 0x0a, 0x0e, 0x47, 0x65, 0x74,
+ 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x07, 0x6b,
+ 0x61, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70,
+ 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4b, 0x61, 0x73, 0x4b, 0x65, 0x79, 0x52, 0x06, 0x6b, 0x61,
+ 0x73, 0x4b, 0x65, 0x79, 0x22, 0x86, 0x04, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x65, 0x79,
+ 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0xb0, 0x01, 0x0a, 0x0d, 0x6b, 0x65, 0x79,
+ 0x5f, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e,
+ 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69,
+ 0x74, 0x68, 0x6d, 0x42, 0x78, 0xba, 0x48, 0x75, 0xba, 0x01, 0x72, 0x0a, 0x15, 0x6b, 0x65, 0x79,
+ 0x5f, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e,
+ 0x65, 0x64, 0x12, 0x34, 0x54, 0x68, 0x65, 0x20, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x6c, 0x67, 0x6f,
+ 0x72, 0x69, 0x74, 0x68, 0x6d, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x6f, 0x6e,
+ 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64,
+ 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x2e, 0x1a, 0x23, 0x74, 0x68, 0x69, 0x73, 0x20, 0x69,
+ 0x6e, 0x20, 0x5b, 0x30, 0x2c, 0x20, 0x31, 0x2c, 0x20, 0x32, 0x2c, 0x20, 0x33, 0x2c, 0x20, 0x34,
+ 0x2c, 0x20, 0x35, 0x2c, 0x20, 0x36, 0x2c, 0x20, 0x37, 0x2c, 0x20, 0x38, 0x5d, 0x52, 0x0c, 0x6b,
+ 0x65, 0x79, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, 0x21, 0x0a, 0x06, 0x6b,
+ 0x61, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05,
+ 0x72, 0x03, 0xb0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x05, 0x6b, 0x61, 0x73, 0x49, 0x64, 0x12, 0x24,
+ 0x0a, 0x08, 0x6b, 0x61, 0x73, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
+ 0x42, 0x07, 0xba, 0x48, 0x04, 0x72, 0x02, 0x10, 0x01, 0x48, 0x00, 0x52, 0x07, 0x6b, 0x61, 0x73,
+ 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x07, 0x6b, 0x61, 0x73, 0x5f, 0x75, 0x72, 0x69, 0x18,
+ 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x10, 0x01, 0x88, 0x01,
+ 0x01, 0x48, 0x00, 0x52, 0x06, 0x6b, 0x61, 0x73, 0x55, 0x72, 0x69, 0x12, 0x1b, 0x0a, 0x06, 0x6c,
+ 0x65, 0x67, 0x61, 0x63, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x06, 0x6c,
+ 0x65, 0x67, 0x61, 0x63, 0x79, 0x88, 0x01, 0x01, 0x12, 0x33, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69,
+ 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70,
+ 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3d, 0x0a,
+ 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x6f,
+ 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6b, 0x61, 0x73, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79,
+ 0x2e, 0x4b, 0x61, 0x73, 0x4b, 0x65, 0x79, 0x73, 0x53, 0x6f, 0x72, 0x74, 0x42, 0x08, 0xba, 0x48,
+ 0x05, 0x92, 0x01, 0x02, 0x10, 0x01, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x12, 0x26, 0x0a, 0x06,
+ 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70,
+ 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x06, 0x73, 0x65,
+ 0x61, 0x72, 0x63, 0x68, 0x42, 0x0c, 0x0a, 0x0a, 0x6b, 0x61, 0x73, 0x5f, 0x66, 0x69, 0x6c, 0x74,
0x65, 0x72, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x22, 0x73, 0x0a,
0x10, 0x4c, 0x69, 0x73, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
0x65, 0x12, 0x29, 0x0a, 0x08, 0x6b, 0x61, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20,
@@ -4905,19 +4928,20 @@ var file_policy_kasregistry_key_access_server_registry_proto_goTypes = []interfa
(*policy.KeyAccessServer)(nil), // 57: policy.KeyAccessServer
(policy.SortDirection)(0), // 58: policy.SortDirection
(*policy.PageRequest)(nil), // 59: policy.PageRequest
- (*policy.PageResponse)(nil), // 60: policy.PageResponse
- (*policy.PublicKey)(nil), // 61: policy.PublicKey
- (policy.SourceType)(0), // 62: policy.SourceType
- (*common.MetadataMutable)(nil), // 63: common.MetadataMutable
- (common.MetadataUpdateEnum)(0), // 64: common.MetadataUpdateEnum
- (*policy.KasPublicKey)(nil), // 65: policy.KasPublicKey
- (*policy.Key)(nil), // 66: policy.Key
- (policy.Algorithm)(0), // 67: policy.Algorithm
- (policy.KeyMode)(0), // 68: policy.KeyMode
- (*policy.PublicKeyCtx)(nil), // 69: policy.PublicKeyCtx
- (*policy.PrivateKeyCtx)(nil), // 70: policy.PrivateKeyCtx
- (*policy.KasKey)(nil), // 71: policy.KasKey
- (*policy.SimpleKasKey)(nil), // 72: policy.SimpleKasKey
+ (*policy.Search)(nil), // 60: policy.Search
+ (*policy.PageResponse)(nil), // 61: policy.PageResponse
+ (*policy.PublicKey)(nil), // 62: policy.PublicKey
+ (policy.SourceType)(0), // 63: policy.SourceType
+ (*common.MetadataMutable)(nil), // 64: common.MetadataMutable
+ (common.MetadataUpdateEnum)(0), // 65: common.MetadataUpdateEnum
+ (*policy.KasPublicKey)(nil), // 66: policy.KasPublicKey
+ (*policy.Key)(nil), // 67: policy.Key
+ (policy.Algorithm)(0), // 68: policy.Algorithm
+ (policy.KeyMode)(0), // 69: policy.KeyMode
+ (*policy.PublicKeyCtx)(nil), // 70: policy.PublicKeyCtx
+ (*policy.PrivateKeyCtx)(nil), // 71: policy.PrivateKeyCtx
+ (*policy.KasKey)(nil), // 72: policy.KasKey
+ (*policy.SimpleKasKey)(nil), // 73: policy.SimpleKasKey
}
var file_policy_kasregistry_key_access_server_registry_proto_depIdxs = []int32{
57, // 0: policy.kasregistry.GetKeyAccessServerResponse.key_access_server:type_name -> policy.KeyAccessServer
@@ -4925,120 +4949,122 @@ var file_policy_kasregistry_key_access_server_registry_proto_depIdxs = []int32{
58, // 2: policy.kasregistry.KeyAccessServersSort.direction:type_name -> policy.SortDirection
59, // 3: policy.kasregistry.ListKeyAccessServersRequest.pagination:type_name -> policy.PageRequest
4, // 4: policy.kasregistry.ListKeyAccessServersRequest.sort:type_name -> policy.kasregistry.KeyAccessServersSort
- 57, // 5: policy.kasregistry.ListKeyAccessServersResponse.key_access_servers:type_name -> policy.KeyAccessServer
- 60, // 6: policy.kasregistry.ListKeyAccessServersResponse.pagination:type_name -> policy.PageResponse
- 1, // 7: policy.kasregistry.KasKeysSort.field:type_name -> policy.kasregistry.SortKasKeysType
- 58, // 8: policy.kasregistry.KasKeysSort.direction:type_name -> policy.SortDirection
- 61, // 9: policy.kasregistry.CreateKeyAccessServerRequest.public_key:type_name -> policy.PublicKey
- 62, // 10: policy.kasregistry.CreateKeyAccessServerRequest.source_type:type_name -> policy.SourceType
- 63, // 11: policy.kasregistry.CreateKeyAccessServerRequest.metadata:type_name -> common.MetadataMutable
- 57, // 12: policy.kasregistry.CreateKeyAccessServerResponse.key_access_server:type_name -> policy.KeyAccessServer
- 61, // 13: policy.kasregistry.UpdateKeyAccessServerRequest.public_key:type_name -> policy.PublicKey
- 62, // 14: policy.kasregistry.UpdateKeyAccessServerRequest.source_type:type_name -> policy.SourceType
- 63, // 15: policy.kasregistry.UpdateKeyAccessServerRequest.metadata:type_name -> common.MetadataMutable
- 64, // 16: policy.kasregistry.UpdateKeyAccessServerRequest.metadata_update_behavior:type_name -> common.MetadataUpdateEnum
- 57, // 17: policy.kasregistry.UpdateKeyAccessServerResponse.key_access_server:type_name -> policy.KeyAccessServer
- 57, // 18: policy.kasregistry.DeleteKeyAccessServerResponse.key_access_server:type_name -> policy.KeyAccessServer
- 57, // 19: policy.kasregistry.KeyAccessServerGrants.key_access_server:type_name -> policy.KeyAccessServer
- 14, // 20: policy.kasregistry.KeyAccessServerGrants.namespace_grants:type_name -> policy.kasregistry.GrantedPolicyObject
- 14, // 21: policy.kasregistry.KeyAccessServerGrants.attribute_grants:type_name -> policy.kasregistry.GrantedPolicyObject
- 14, // 22: policy.kasregistry.KeyAccessServerGrants.value_grants:type_name -> policy.kasregistry.GrantedPolicyObject
- 65, // 23: policy.kasregistry.CreatePublicKeyRequest.key:type_name -> policy.KasPublicKey
- 63, // 24: policy.kasregistry.CreatePublicKeyRequest.metadata:type_name -> common.MetadataMutable
- 66, // 25: policy.kasregistry.CreatePublicKeyResponse.key:type_name -> policy.Key
- 66, // 26: policy.kasregistry.GetPublicKeyResponse.key:type_name -> policy.Key
- 59, // 27: policy.kasregistry.ListPublicKeysRequest.pagination:type_name -> policy.PageRequest
- 66, // 28: policy.kasregistry.ListPublicKeysResponse.keys:type_name -> policy.Key
- 60, // 29: policy.kasregistry.ListPublicKeysResponse.pagination:type_name -> policy.PageResponse
- 59, // 30: policy.kasregistry.ListPublicKeyMappingRequest.pagination:type_name -> policy.PageRequest
- 53, // 31: policy.kasregistry.ListPublicKeyMappingResponse.public_key_mappings:type_name -> policy.kasregistry.ListPublicKeyMappingResponse.PublicKeyMapping
- 60, // 32: policy.kasregistry.ListPublicKeyMappingResponse.pagination:type_name -> policy.PageResponse
- 63, // 33: policy.kasregistry.UpdatePublicKeyRequest.metadata:type_name -> common.MetadataMutable
- 64, // 34: policy.kasregistry.UpdatePublicKeyRequest.metadata_update_behavior:type_name -> common.MetadataUpdateEnum
- 66, // 35: policy.kasregistry.UpdatePublicKeyResponse.key:type_name -> policy.Key
- 66, // 36: policy.kasregistry.DeactivatePublicKeyResponse.key:type_name -> policy.Key
- 66, // 37: policy.kasregistry.ActivatePublicKeyResponse.key:type_name -> policy.Key
- 59, // 38: policy.kasregistry.ListKeyAccessServerGrantsRequest.pagination:type_name -> policy.PageRequest
- 15, // 39: policy.kasregistry.ListKeyAccessServerGrantsResponse.grants:type_name -> policy.kasregistry.KeyAccessServerGrants
- 60, // 40: policy.kasregistry.ListKeyAccessServerGrantsResponse.pagination:type_name -> policy.PageResponse
- 67, // 41: policy.kasregistry.CreateKeyRequest.key_algorithm:type_name -> policy.Algorithm
- 68, // 42: policy.kasregistry.CreateKeyRequest.key_mode:type_name -> policy.KeyMode
- 69, // 43: policy.kasregistry.CreateKeyRequest.public_key_ctx:type_name -> policy.PublicKeyCtx
- 70, // 44: policy.kasregistry.CreateKeyRequest.private_key_ctx:type_name -> policy.PrivateKeyCtx
- 63, // 45: policy.kasregistry.CreateKeyRequest.metadata:type_name -> common.MetadataMutable
- 71, // 46: policy.kasregistry.CreateKeyResponse.kas_key:type_name -> policy.KasKey
- 40, // 47: policy.kasregistry.GetKeyRequest.key:type_name -> policy.kasregistry.KasKeyIdentifier
- 71, // 48: policy.kasregistry.GetKeyResponse.kas_key:type_name -> policy.KasKey
- 67, // 49: policy.kasregistry.ListKeysRequest.key_algorithm:type_name -> policy.Algorithm
- 59, // 50: policy.kasregistry.ListKeysRequest.pagination:type_name -> policy.PageRequest
- 7, // 51: policy.kasregistry.ListKeysRequest.sort:type_name -> policy.kasregistry.KasKeysSort
- 71, // 52: policy.kasregistry.ListKeysResponse.kas_keys:type_name -> policy.KasKey
- 60, // 53: policy.kasregistry.ListKeysResponse.pagination:type_name -> policy.PageResponse
- 63, // 54: policy.kasregistry.UpdateKeyRequest.metadata:type_name -> common.MetadataMutable
- 64, // 55: policy.kasregistry.UpdateKeyRequest.metadata_update_behavior:type_name -> common.MetadataUpdateEnum
- 71, // 56: policy.kasregistry.UpdateKeyResponse.kas_key:type_name -> policy.KasKey
- 40, // 57: policy.kasregistry.RotateKeyRequest.key:type_name -> policy.kasregistry.KasKeyIdentifier
- 56, // 58: policy.kasregistry.RotateKeyRequest.new_key:type_name -> policy.kasregistry.RotateKeyRequest.NewKey
- 71, // 59: policy.kasregistry.RotatedResources.rotated_out_key:type_name -> policy.KasKey
- 42, // 60: policy.kasregistry.RotatedResources.attribute_definition_mappings:type_name -> policy.kasregistry.ChangeMappings
- 42, // 61: policy.kasregistry.RotatedResources.attribute_value_mappings:type_name -> policy.kasregistry.ChangeMappings
- 42, // 62: policy.kasregistry.RotatedResources.namespace_mappings:type_name -> policy.kasregistry.ChangeMappings
- 71, // 63: policy.kasregistry.RotateKeyResponse.kas_key:type_name -> policy.KasKey
- 43, // 64: policy.kasregistry.RotateKeyResponse.rotated_resources:type_name -> policy.kasregistry.RotatedResources
- 40, // 65: policy.kasregistry.SetBaseKeyRequest.key:type_name -> policy.kasregistry.KasKeyIdentifier
- 72, // 66: policy.kasregistry.GetBaseKeyResponse.base_key:type_name -> policy.SimpleKasKey
- 72, // 67: policy.kasregistry.SetBaseKeyResponse.new_base_key:type_name -> policy.SimpleKasKey
- 72, // 68: policy.kasregistry.SetBaseKeyResponse.previous_base_key:type_name -> policy.SimpleKasKey
- 49, // 69: policy.kasregistry.KeyMapping.namespace_mappings:type_name -> policy.kasregistry.MappedPolicyObject
- 49, // 70: policy.kasregistry.KeyMapping.attribute_mappings:type_name -> policy.kasregistry.MappedPolicyObject
- 49, // 71: policy.kasregistry.KeyMapping.value_mappings:type_name -> policy.kasregistry.MappedPolicyObject
- 40, // 72: policy.kasregistry.ListKeyMappingsRequest.key:type_name -> policy.kasregistry.KasKeyIdentifier
- 59, // 73: policy.kasregistry.ListKeyMappingsRequest.pagination:type_name -> policy.PageRequest
- 50, // 74: policy.kasregistry.ListKeyMappingsResponse.key_mappings:type_name -> policy.kasregistry.KeyMapping
- 60, // 75: policy.kasregistry.ListKeyMappingsResponse.pagination:type_name -> policy.PageResponse
- 54, // 76: policy.kasregistry.ListPublicKeyMappingResponse.PublicKeyMapping.public_keys:type_name -> policy.kasregistry.ListPublicKeyMappingResponse.PublicKey
- 66, // 77: policy.kasregistry.ListPublicKeyMappingResponse.PublicKey.key:type_name -> policy.Key
- 55, // 78: policy.kasregistry.ListPublicKeyMappingResponse.PublicKey.values:type_name -> policy.kasregistry.ListPublicKeyMappingResponse.Association
- 55, // 79: policy.kasregistry.ListPublicKeyMappingResponse.PublicKey.definitions:type_name -> policy.kasregistry.ListPublicKeyMappingResponse.Association
- 55, // 80: policy.kasregistry.ListPublicKeyMappingResponse.PublicKey.namespaces:type_name -> policy.kasregistry.ListPublicKeyMappingResponse.Association
- 67, // 81: policy.kasregistry.RotateKeyRequest.NewKey.algorithm:type_name -> policy.Algorithm
- 68, // 82: policy.kasregistry.RotateKeyRequest.NewKey.key_mode:type_name -> policy.KeyMode
- 69, // 83: policy.kasregistry.RotateKeyRequest.NewKey.public_key_ctx:type_name -> policy.PublicKeyCtx
- 70, // 84: policy.kasregistry.RotateKeyRequest.NewKey.private_key_ctx:type_name -> policy.PrivateKeyCtx
- 63, // 85: policy.kasregistry.RotateKeyRequest.NewKey.metadata:type_name -> common.MetadataMutable
- 5, // 86: policy.kasregistry.KeyAccessServerRegistryService.ListKeyAccessServers:input_type -> policy.kasregistry.ListKeyAccessServersRequest
- 2, // 87: policy.kasregistry.KeyAccessServerRegistryService.GetKeyAccessServer:input_type -> policy.kasregistry.GetKeyAccessServerRequest
- 8, // 88: policy.kasregistry.KeyAccessServerRegistryService.CreateKeyAccessServer:input_type -> policy.kasregistry.CreateKeyAccessServerRequest
- 10, // 89: policy.kasregistry.KeyAccessServerRegistryService.UpdateKeyAccessServer:input_type -> policy.kasregistry.UpdateKeyAccessServerRequest
- 12, // 90: policy.kasregistry.KeyAccessServerRegistryService.DeleteKeyAccessServer:input_type -> policy.kasregistry.DeleteKeyAccessServerRequest
- 30, // 91: policy.kasregistry.KeyAccessServerRegistryService.ListKeyAccessServerGrants:input_type -> policy.kasregistry.ListKeyAccessServerGrantsRequest
- 32, // 92: policy.kasregistry.KeyAccessServerRegistryService.CreateKey:input_type -> policy.kasregistry.CreateKeyRequest
- 34, // 93: policy.kasregistry.KeyAccessServerRegistryService.GetKey:input_type -> policy.kasregistry.GetKeyRequest
- 36, // 94: policy.kasregistry.KeyAccessServerRegistryService.ListKeys:input_type -> policy.kasregistry.ListKeysRequest
- 38, // 95: policy.kasregistry.KeyAccessServerRegistryService.UpdateKey:input_type -> policy.kasregistry.UpdateKeyRequest
- 41, // 96: policy.kasregistry.KeyAccessServerRegistryService.RotateKey:input_type -> policy.kasregistry.RotateKeyRequest
- 45, // 97: policy.kasregistry.KeyAccessServerRegistryService.SetBaseKey:input_type -> policy.kasregistry.SetBaseKeyRequest
- 46, // 98: policy.kasregistry.KeyAccessServerRegistryService.GetBaseKey:input_type -> policy.kasregistry.GetBaseKeyRequest
- 51, // 99: policy.kasregistry.KeyAccessServerRegistryService.ListKeyMappings:input_type -> policy.kasregistry.ListKeyMappingsRequest
- 6, // 100: policy.kasregistry.KeyAccessServerRegistryService.ListKeyAccessServers:output_type -> policy.kasregistry.ListKeyAccessServersResponse
- 3, // 101: policy.kasregistry.KeyAccessServerRegistryService.GetKeyAccessServer:output_type -> policy.kasregistry.GetKeyAccessServerResponse
- 9, // 102: policy.kasregistry.KeyAccessServerRegistryService.CreateKeyAccessServer:output_type -> policy.kasregistry.CreateKeyAccessServerResponse
- 11, // 103: policy.kasregistry.KeyAccessServerRegistryService.UpdateKeyAccessServer:output_type -> policy.kasregistry.UpdateKeyAccessServerResponse
- 13, // 104: policy.kasregistry.KeyAccessServerRegistryService.DeleteKeyAccessServer:output_type -> policy.kasregistry.DeleteKeyAccessServerResponse
- 31, // 105: policy.kasregistry.KeyAccessServerRegistryService.ListKeyAccessServerGrants:output_type -> policy.kasregistry.ListKeyAccessServerGrantsResponse
- 33, // 106: policy.kasregistry.KeyAccessServerRegistryService.CreateKey:output_type -> policy.kasregistry.CreateKeyResponse
- 35, // 107: policy.kasregistry.KeyAccessServerRegistryService.GetKey:output_type -> policy.kasregistry.GetKeyResponse
- 37, // 108: policy.kasregistry.KeyAccessServerRegistryService.ListKeys:output_type -> policy.kasregistry.ListKeysResponse
- 39, // 109: policy.kasregistry.KeyAccessServerRegistryService.UpdateKey:output_type -> policy.kasregistry.UpdateKeyResponse
- 44, // 110: policy.kasregistry.KeyAccessServerRegistryService.RotateKey:output_type -> policy.kasregistry.RotateKeyResponse
- 48, // 111: policy.kasregistry.KeyAccessServerRegistryService.SetBaseKey:output_type -> policy.kasregistry.SetBaseKeyResponse
- 47, // 112: policy.kasregistry.KeyAccessServerRegistryService.GetBaseKey:output_type -> policy.kasregistry.GetBaseKeyResponse
- 52, // 113: policy.kasregistry.KeyAccessServerRegistryService.ListKeyMappings:output_type -> policy.kasregistry.ListKeyMappingsResponse
- 100, // [100:114] is the sub-list for method output_type
- 86, // [86:100] is the sub-list for method input_type
- 86, // [86:86] is the sub-list for extension type_name
- 86, // [86:86] is the sub-list for extension extendee
- 0, // [0:86] is the sub-list for field type_name
+ 60, // 5: policy.kasregistry.ListKeyAccessServersRequest.search:type_name -> policy.Search
+ 57, // 6: policy.kasregistry.ListKeyAccessServersResponse.key_access_servers:type_name -> policy.KeyAccessServer
+ 61, // 7: policy.kasregistry.ListKeyAccessServersResponse.pagination:type_name -> policy.PageResponse
+ 1, // 8: policy.kasregistry.KasKeysSort.field:type_name -> policy.kasregistry.SortKasKeysType
+ 58, // 9: policy.kasregistry.KasKeysSort.direction:type_name -> policy.SortDirection
+ 62, // 10: policy.kasregistry.CreateKeyAccessServerRequest.public_key:type_name -> policy.PublicKey
+ 63, // 11: policy.kasregistry.CreateKeyAccessServerRequest.source_type:type_name -> policy.SourceType
+ 64, // 12: policy.kasregistry.CreateKeyAccessServerRequest.metadata:type_name -> common.MetadataMutable
+ 57, // 13: policy.kasregistry.CreateKeyAccessServerResponse.key_access_server:type_name -> policy.KeyAccessServer
+ 62, // 14: policy.kasregistry.UpdateKeyAccessServerRequest.public_key:type_name -> policy.PublicKey
+ 63, // 15: policy.kasregistry.UpdateKeyAccessServerRequest.source_type:type_name -> policy.SourceType
+ 64, // 16: policy.kasregistry.UpdateKeyAccessServerRequest.metadata:type_name -> common.MetadataMutable
+ 65, // 17: policy.kasregistry.UpdateKeyAccessServerRequest.metadata_update_behavior:type_name -> common.MetadataUpdateEnum
+ 57, // 18: policy.kasregistry.UpdateKeyAccessServerResponse.key_access_server:type_name -> policy.KeyAccessServer
+ 57, // 19: policy.kasregistry.DeleteKeyAccessServerResponse.key_access_server:type_name -> policy.KeyAccessServer
+ 57, // 20: policy.kasregistry.KeyAccessServerGrants.key_access_server:type_name -> policy.KeyAccessServer
+ 14, // 21: policy.kasregistry.KeyAccessServerGrants.namespace_grants:type_name -> policy.kasregistry.GrantedPolicyObject
+ 14, // 22: policy.kasregistry.KeyAccessServerGrants.attribute_grants:type_name -> policy.kasregistry.GrantedPolicyObject
+ 14, // 23: policy.kasregistry.KeyAccessServerGrants.value_grants:type_name -> policy.kasregistry.GrantedPolicyObject
+ 66, // 24: policy.kasregistry.CreatePublicKeyRequest.key:type_name -> policy.KasPublicKey
+ 64, // 25: policy.kasregistry.CreatePublicKeyRequest.metadata:type_name -> common.MetadataMutable
+ 67, // 26: policy.kasregistry.CreatePublicKeyResponse.key:type_name -> policy.Key
+ 67, // 27: policy.kasregistry.GetPublicKeyResponse.key:type_name -> policy.Key
+ 59, // 28: policy.kasregistry.ListPublicKeysRequest.pagination:type_name -> policy.PageRequest
+ 67, // 29: policy.kasregistry.ListPublicKeysResponse.keys:type_name -> policy.Key
+ 61, // 30: policy.kasregistry.ListPublicKeysResponse.pagination:type_name -> policy.PageResponse
+ 59, // 31: policy.kasregistry.ListPublicKeyMappingRequest.pagination:type_name -> policy.PageRequest
+ 53, // 32: policy.kasregistry.ListPublicKeyMappingResponse.public_key_mappings:type_name -> policy.kasregistry.ListPublicKeyMappingResponse.PublicKeyMapping
+ 61, // 33: policy.kasregistry.ListPublicKeyMappingResponse.pagination:type_name -> policy.PageResponse
+ 64, // 34: policy.kasregistry.UpdatePublicKeyRequest.metadata:type_name -> common.MetadataMutable
+ 65, // 35: policy.kasregistry.UpdatePublicKeyRequest.metadata_update_behavior:type_name -> common.MetadataUpdateEnum
+ 67, // 36: policy.kasregistry.UpdatePublicKeyResponse.key:type_name -> policy.Key
+ 67, // 37: policy.kasregistry.DeactivatePublicKeyResponse.key:type_name -> policy.Key
+ 67, // 38: policy.kasregistry.ActivatePublicKeyResponse.key:type_name -> policy.Key
+ 59, // 39: policy.kasregistry.ListKeyAccessServerGrantsRequest.pagination:type_name -> policy.PageRequest
+ 15, // 40: policy.kasregistry.ListKeyAccessServerGrantsResponse.grants:type_name -> policy.kasregistry.KeyAccessServerGrants
+ 61, // 41: policy.kasregistry.ListKeyAccessServerGrantsResponse.pagination:type_name -> policy.PageResponse
+ 68, // 42: policy.kasregistry.CreateKeyRequest.key_algorithm:type_name -> policy.Algorithm
+ 69, // 43: policy.kasregistry.CreateKeyRequest.key_mode:type_name -> policy.KeyMode
+ 70, // 44: policy.kasregistry.CreateKeyRequest.public_key_ctx:type_name -> policy.PublicKeyCtx
+ 71, // 45: policy.kasregistry.CreateKeyRequest.private_key_ctx:type_name -> policy.PrivateKeyCtx
+ 64, // 46: policy.kasregistry.CreateKeyRequest.metadata:type_name -> common.MetadataMutable
+ 72, // 47: policy.kasregistry.CreateKeyResponse.kas_key:type_name -> policy.KasKey
+ 40, // 48: policy.kasregistry.GetKeyRequest.key:type_name -> policy.kasregistry.KasKeyIdentifier
+ 72, // 49: policy.kasregistry.GetKeyResponse.kas_key:type_name -> policy.KasKey
+ 68, // 50: policy.kasregistry.ListKeysRequest.key_algorithm:type_name -> policy.Algorithm
+ 59, // 51: policy.kasregistry.ListKeysRequest.pagination:type_name -> policy.PageRequest
+ 7, // 52: policy.kasregistry.ListKeysRequest.sort:type_name -> policy.kasregistry.KasKeysSort
+ 60, // 53: policy.kasregistry.ListKeysRequest.search:type_name -> policy.Search
+ 72, // 54: policy.kasregistry.ListKeysResponse.kas_keys:type_name -> policy.KasKey
+ 61, // 55: policy.kasregistry.ListKeysResponse.pagination:type_name -> policy.PageResponse
+ 64, // 56: policy.kasregistry.UpdateKeyRequest.metadata:type_name -> common.MetadataMutable
+ 65, // 57: policy.kasregistry.UpdateKeyRequest.metadata_update_behavior:type_name -> common.MetadataUpdateEnum
+ 72, // 58: policy.kasregistry.UpdateKeyResponse.kas_key:type_name -> policy.KasKey
+ 40, // 59: policy.kasregistry.RotateKeyRequest.key:type_name -> policy.kasregistry.KasKeyIdentifier
+ 56, // 60: policy.kasregistry.RotateKeyRequest.new_key:type_name -> policy.kasregistry.RotateKeyRequest.NewKey
+ 72, // 61: policy.kasregistry.RotatedResources.rotated_out_key:type_name -> policy.KasKey
+ 42, // 62: policy.kasregistry.RotatedResources.attribute_definition_mappings:type_name -> policy.kasregistry.ChangeMappings
+ 42, // 63: policy.kasregistry.RotatedResources.attribute_value_mappings:type_name -> policy.kasregistry.ChangeMappings
+ 42, // 64: policy.kasregistry.RotatedResources.namespace_mappings:type_name -> policy.kasregistry.ChangeMappings
+ 72, // 65: policy.kasregistry.RotateKeyResponse.kas_key:type_name -> policy.KasKey
+ 43, // 66: policy.kasregistry.RotateKeyResponse.rotated_resources:type_name -> policy.kasregistry.RotatedResources
+ 40, // 67: policy.kasregistry.SetBaseKeyRequest.key:type_name -> policy.kasregistry.KasKeyIdentifier
+ 73, // 68: policy.kasregistry.GetBaseKeyResponse.base_key:type_name -> policy.SimpleKasKey
+ 73, // 69: policy.kasregistry.SetBaseKeyResponse.new_base_key:type_name -> policy.SimpleKasKey
+ 73, // 70: policy.kasregistry.SetBaseKeyResponse.previous_base_key:type_name -> policy.SimpleKasKey
+ 49, // 71: policy.kasregistry.KeyMapping.namespace_mappings:type_name -> policy.kasregistry.MappedPolicyObject
+ 49, // 72: policy.kasregistry.KeyMapping.attribute_mappings:type_name -> policy.kasregistry.MappedPolicyObject
+ 49, // 73: policy.kasregistry.KeyMapping.value_mappings:type_name -> policy.kasregistry.MappedPolicyObject
+ 40, // 74: policy.kasregistry.ListKeyMappingsRequest.key:type_name -> policy.kasregistry.KasKeyIdentifier
+ 59, // 75: policy.kasregistry.ListKeyMappingsRequest.pagination:type_name -> policy.PageRequest
+ 50, // 76: policy.kasregistry.ListKeyMappingsResponse.key_mappings:type_name -> policy.kasregistry.KeyMapping
+ 61, // 77: policy.kasregistry.ListKeyMappingsResponse.pagination:type_name -> policy.PageResponse
+ 54, // 78: policy.kasregistry.ListPublicKeyMappingResponse.PublicKeyMapping.public_keys:type_name -> policy.kasregistry.ListPublicKeyMappingResponse.PublicKey
+ 67, // 79: policy.kasregistry.ListPublicKeyMappingResponse.PublicKey.key:type_name -> policy.Key
+ 55, // 80: policy.kasregistry.ListPublicKeyMappingResponse.PublicKey.values:type_name -> policy.kasregistry.ListPublicKeyMappingResponse.Association
+ 55, // 81: policy.kasregistry.ListPublicKeyMappingResponse.PublicKey.definitions:type_name -> policy.kasregistry.ListPublicKeyMappingResponse.Association
+ 55, // 82: policy.kasregistry.ListPublicKeyMappingResponse.PublicKey.namespaces:type_name -> policy.kasregistry.ListPublicKeyMappingResponse.Association
+ 68, // 83: policy.kasregistry.RotateKeyRequest.NewKey.algorithm:type_name -> policy.Algorithm
+ 69, // 84: policy.kasregistry.RotateKeyRequest.NewKey.key_mode:type_name -> policy.KeyMode
+ 70, // 85: policy.kasregistry.RotateKeyRequest.NewKey.public_key_ctx:type_name -> policy.PublicKeyCtx
+ 71, // 86: policy.kasregistry.RotateKeyRequest.NewKey.private_key_ctx:type_name -> policy.PrivateKeyCtx
+ 64, // 87: policy.kasregistry.RotateKeyRequest.NewKey.metadata:type_name -> common.MetadataMutable
+ 5, // 88: policy.kasregistry.KeyAccessServerRegistryService.ListKeyAccessServers:input_type -> policy.kasregistry.ListKeyAccessServersRequest
+ 2, // 89: policy.kasregistry.KeyAccessServerRegistryService.GetKeyAccessServer:input_type -> policy.kasregistry.GetKeyAccessServerRequest
+ 8, // 90: policy.kasregistry.KeyAccessServerRegistryService.CreateKeyAccessServer:input_type -> policy.kasregistry.CreateKeyAccessServerRequest
+ 10, // 91: policy.kasregistry.KeyAccessServerRegistryService.UpdateKeyAccessServer:input_type -> policy.kasregistry.UpdateKeyAccessServerRequest
+ 12, // 92: policy.kasregistry.KeyAccessServerRegistryService.DeleteKeyAccessServer:input_type -> policy.kasregistry.DeleteKeyAccessServerRequest
+ 30, // 93: policy.kasregistry.KeyAccessServerRegistryService.ListKeyAccessServerGrants:input_type -> policy.kasregistry.ListKeyAccessServerGrantsRequest
+ 32, // 94: policy.kasregistry.KeyAccessServerRegistryService.CreateKey:input_type -> policy.kasregistry.CreateKeyRequest
+ 34, // 95: policy.kasregistry.KeyAccessServerRegistryService.GetKey:input_type -> policy.kasregistry.GetKeyRequest
+ 36, // 96: policy.kasregistry.KeyAccessServerRegistryService.ListKeys:input_type -> policy.kasregistry.ListKeysRequest
+ 38, // 97: policy.kasregistry.KeyAccessServerRegistryService.UpdateKey:input_type -> policy.kasregistry.UpdateKeyRequest
+ 41, // 98: policy.kasregistry.KeyAccessServerRegistryService.RotateKey:input_type -> policy.kasregistry.RotateKeyRequest
+ 45, // 99: policy.kasregistry.KeyAccessServerRegistryService.SetBaseKey:input_type -> policy.kasregistry.SetBaseKeyRequest
+ 46, // 100: policy.kasregistry.KeyAccessServerRegistryService.GetBaseKey:input_type -> policy.kasregistry.GetBaseKeyRequest
+ 51, // 101: policy.kasregistry.KeyAccessServerRegistryService.ListKeyMappings:input_type -> policy.kasregistry.ListKeyMappingsRequest
+ 6, // 102: policy.kasregistry.KeyAccessServerRegistryService.ListKeyAccessServers:output_type -> policy.kasregistry.ListKeyAccessServersResponse
+ 3, // 103: policy.kasregistry.KeyAccessServerRegistryService.GetKeyAccessServer:output_type -> policy.kasregistry.GetKeyAccessServerResponse
+ 9, // 104: policy.kasregistry.KeyAccessServerRegistryService.CreateKeyAccessServer:output_type -> policy.kasregistry.CreateKeyAccessServerResponse
+ 11, // 105: policy.kasregistry.KeyAccessServerRegistryService.UpdateKeyAccessServer:output_type -> policy.kasregistry.UpdateKeyAccessServerResponse
+ 13, // 106: policy.kasregistry.KeyAccessServerRegistryService.DeleteKeyAccessServer:output_type -> policy.kasregistry.DeleteKeyAccessServerResponse
+ 31, // 107: policy.kasregistry.KeyAccessServerRegistryService.ListKeyAccessServerGrants:output_type -> policy.kasregistry.ListKeyAccessServerGrantsResponse
+ 33, // 108: policy.kasregistry.KeyAccessServerRegistryService.CreateKey:output_type -> policy.kasregistry.CreateKeyResponse
+ 35, // 109: policy.kasregistry.KeyAccessServerRegistryService.GetKey:output_type -> policy.kasregistry.GetKeyResponse
+ 37, // 110: policy.kasregistry.KeyAccessServerRegistryService.ListKeys:output_type -> policy.kasregistry.ListKeysResponse
+ 39, // 111: policy.kasregistry.KeyAccessServerRegistryService.UpdateKey:output_type -> policy.kasregistry.UpdateKeyResponse
+ 44, // 112: policy.kasregistry.KeyAccessServerRegistryService.RotateKey:output_type -> policy.kasregistry.RotateKeyResponse
+ 48, // 113: policy.kasregistry.KeyAccessServerRegistryService.SetBaseKey:output_type -> policy.kasregistry.SetBaseKeyResponse
+ 47, // 114: policy.kasregistry.KeyAccessServerRegistryService.GetBaseKey:output_type -> policy.kasregistry.GetBaseKeyResponse
+ 52, // 115: policy.kasregistry.KeyAccessServerRegistryService.ListKeyMappings:output_type -> policy.kasregistry.ListKeyMappingsResponse
+ 102, // [102:116] is the sub-list for method output_type
+ 88, // [88:102] is the sub-list for method input_type
+ 88, // [88:88] is the sub-list for extension type_name
+ 88, // [88:88] is the sub-list for extension extendee
+ 0, // [0:88] is the sub-list for field type_name
}
func init() { file_policy_kasregistry_key_access_server_registry_proto_init() }
diff --git a/protocol/go/policy/namespaces/namespaces.pb.go b/protocol/go/policy/namespaces/namespaces.pb.go
index b1a2e24a8f..6bf9718a95 100644
--- a/protocol/go/policy/namespaces/namespaces.pb.go
+++ b/protocol/go/policy/namespaces/namespaces.pb.go
@@ -407,6 +407,8 @@ type ListNamespacesRequest struct {
// - field UNSPECIFIED defaults to created_at with the specified direction
// - both UNSPECIFIED or sort omitted defaults to created_at DESC
Sort []*NamespacesSort `protobuf:"bytes,11,rep,name=sort,proto3" json:"sort,omitempty"`
+ // Optional
+ Search *policy.Search `protobuf:"bytes,12,opt,name=search,proto3" json:"search,omitempty"`
}
func (x *ListNamespacesRequest) Reset() {
@@ -462,6 +464,13 @@ func (x *ListNamespacesRequest) GetSort() []*NamespacesSort {
return nil
}
+func (x *ListNamespacesRequest) GetSearch() *policy.Search {
+ if x != nil {
+ return x.Search
+ }
+ return nil
+}
+
type ListNamespacesResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -1271,7 +1280,7 @@ var file_policy_namespaces_namespaces_proto_rawDesc = []byte{
0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x70, 0x6f,
0x6c, 0x69, 0x63, 0x79, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69,
0x6f, 0x6e, 0x42, 0x08, 0xba, 0x48, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x64, 0x69,
- 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xbc, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74,
+ 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xe4, 0x01, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74,
0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
0x74, 0x12, 0x2d, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e,
0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65,
@@ -1283,249 +1292,251 @@ var file_policy_namespaces_namespaces_proto_rawDesc = []byte{
0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6e, 0x61, 0x6d,
0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63,
0x65, 0x73, 0x53, 0x6f, 0x72, 0x74, 0x42, 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, 0x02, 0x10, 0x01,
- 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x22, 0x81, 0x01, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x4e,
- 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x12, 0x31, 0x0a, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18,
- 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4e,
- 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70,
- 0x61, 0x63, 0x65, 0x73, 0x12, 0x34, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63,
- 0x79, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a,
- 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xfe, 0x04, 0x0a, 0x16, 0x43,
- 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0xae, 0x04, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x09, 0x42, 0x99, 0x04, 0xba, 0x48, 0x95, 0x04, 0xba, 0x01, 0x89, 0x04, 0x0a,
- 0x10, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61,
- 0x74, 0x12, 0xa1, 0x03, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x75,
- 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x68, 0x6f,
- 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x20, 0x49, 0x74, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c,
- 0x64, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x61, 0x74, 0x20, 0x6c, 0x65, 0x61,
- 0x73, 0x74, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x64, 0x6f, 0x74, 0x2c, 0x20, 0x77, 0x69, 0x74, 0x68,
- 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x28, 0x6c,
- 0x61, 0x62, 0x65, 0x6c, 0x29, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x61,
- 0x6e, 0x64, 0x20, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 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, 0x2e, 0x20, 0x45, 0x61, 0x63, 0x68, 0x20, 0x6c,
- 0x61, 0x62, 0x65, 0x6c, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x31, 0x20, 0x74,
- 0x6f, 0x20, 0x36, 0x33, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x20,
- 0x6c, 0x6f, 0x6e, 0x67, 0x2c, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x68,
- 0x79, 0x70, 0x68, 0x65, 0x6e, 0x73, 0x20, 0x62, 0x75, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61,
- 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x6c,
- 0x61, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x2e, 0x20, 0x54,
- 0x68, 0x65, 0x20, 0x74, 0x6f, 0x70, 0x2d, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x20, 0x64, 0x6f, 0x6d,
- 0x61, 0x69, 0x6e, 0x20, 0x28, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x73, 0x65,
- 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x61, 0x66, 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20,
- 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x20, 0x64, 0x6f, 0x74, 0x29, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20,
- 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x74, 0x20, 0x6c, 0x65,
- 0x61, 0x73, 0x74, 0x20, 0x74, 0x77, 0x6f, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x62, 0x65, 0x74,
- 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x20, 0x54,
- 0x68, 0x65, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70,
- 0x61, 0x63, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x6e, 0x6f, 0x72, 0x6d,
- 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x20,
- 0x63, 0x61, 0x73, 0x65, 0x2e, 0x1a, 0x51, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63,
- 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x28, 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, 0x5c, 0x5c, 0x2e, 0x29, 0x2b, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a,
- 0x5d, 0x7b, 0x32, 0x2c, 0x7d, 0x24, 0x27, 0x29, 0xc8, 0x01, 0x01, 0x72, 0x03, 0x18, 0xfd, 0x01,
- 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61,
- 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f,
- 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c,
- 0x65, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x4a, 0x0a, 0x17, 0x43,
- 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70,
- 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c, 0x69,
- 0x63, 0x79, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x09, 0x6e, 0x61,
- 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0xbd, 0x01, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61,
- 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08,
- 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x33, 0x0a, 0x08,
- 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17,
- 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
- 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
- 0x61, 0x12, 0x54, 0x0a, 0x18, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x75, 0x70,
- 0x64, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x18, 0x65, 0x20,
- 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74,
- 0x61, 0x64, 0x61, 0x74, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52,
- 0x16, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42,
- 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x22, 0x4a, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74,
- 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4e,
- 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70,
- 0x61, 0x63, 0x65, 0x22, 0x36, 0x0a, 0x1a, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74,
- 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
- 0x74, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba,
- 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x1d, 0x0a, 0x1b, 0x44,
+ 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x12, 0x26, 0x0a, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68,
+ 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e,
+ 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x22, 0x81,
+ 0x01, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65,
+ 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x0a, 0x6e, 0x61, 0x6d,
+ 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e,
+ 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65,
+ 0x52, 0x0a, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x34, 0x0a, 0x0a,
+ 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x22, 0xfe, 0x04, 0x0a, 0x16, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d,
+ 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0xae, 0x04,
+ 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x99, 0x04, 0xba,
+ 0x48, 0x95, 0x04, 0xba, 0x01, 0x89, 0x04, 0x0a, 0x10, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0xa1, 0x03, 0x4e, 0x61, 0x6d, 0x65,
+ 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20,
+ 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x2e, 0x20,
+ 0x49, 0x74, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64,
+ 0x65, 0x20, 0x61, 0x74, 0x20, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x20, 0x6f, 0x6e, 0x65, 0x20, 0x64,
+ 0x6f, 0x74, 0x2c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x73, 0x65,
+ 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x28, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x29, 0x20, 0x73, 0x74,
+ 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x65, 0x6e, 0x64, 0x69, 0x6e,
+ 0x67, 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,
+ 0x2e, 0x20, 0x45, 0x61, 0x63, 0x68, 0x20, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x20, 0x6d, 0x75, 0x73,
+ 0x74, 0x20, 0x62, 0x65, 0x20, 0x31, 0x20, 0x74, 0x6f, 0x20, 0x36, 0x33, 0x20, 0x63, 0x68, 0x61,
+ 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x73, 0x20, 0x6c, 0x6f, 0x6e, 0x67, 0x2c, 0x20, 0x61, 0x6c,
+ 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e, 0x73, 0x20, 0x62,
+ 0x75, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69,
+ 0x72, 0x73, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72,
+ 0x61, 0x63, 0x74, 0x65, 0x72, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x74, 0x6f, 0x70, 0x2d, 0x6c,
+ 0x65, 0x76, 0x65, 0x6c, 0x20, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x20, 0x28, 0x74, 0x68, 0x65,
+ 0x20, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x61, 0x66,
+ 0x74, 0x65, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x20, 0x64, 0x6f,
+ 0x74, 0x29, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x20,
+ 0x6f, 0x66, 0x20, 0x61, 0x74, 0x20, 0x6c, 0x65, 0x61, 0x73, 0x74, 0x20, 0x74, 0x77, 0x6f, 0x20,
+ 0x61, 0x6c, 0x70, 0x68, 0x61, 0x62, 0x65, 0x74, 0x69, 0x63, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61,
+ 0x63, 0x74, 0x65, 0x72, 0x73, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65,
+ 0x64, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c,
+ 0x20, 0x62, 0x65, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x74,
+ 0x6f, 0x20, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x20, 0x63, 0x61, 0x73, 0x65, 0x2e, 0x1a, 0x51, 0x74,
+ 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x28, 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, 0x5c, 0x5c, 0x2e, 0x29,
+ 0x2b, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x5d, 0x7b, 0x32, 0x2c, 0x7d, 0x24, 0x27, 0x29,
+ 0xc8, 0x01, 0x01, 0x72, 0x03, 0x18, 0xfd, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x33,
+ 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61,
+ 0x74, 0x61, 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64,
+ 0x61, 0x74, 0x61, 0x22, 0x4a, 0x0a, 0x17, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d,
+ 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f,
+ 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x0b, 0x32, 0x11, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22,
+ 0xbd, 0x01, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70,
+ 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01,
+ 0x52, 0x02, 0x69, 0x64, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
+ 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e,
+ 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52,
+ 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x54, 0x0a, 0x18, 0x6d, 0x65, 0x74,
+ 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x65, 0x68,
+ 0x61, 0x76, 0x69, 0x6f, 0x72, 0x18, 0x65, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x63, 0x6f,
+ 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x55, 0x70, 0x64,
+ 0x61, 0x74, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x16, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
+ 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x22,
+ 0x4a, 0x0a, 0x17, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x09, 0x6e, 0x61,
+ 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e,
+ 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65,
+ 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x36, 0x0a, 0x1a, 0x44,
0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61,
- 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x99, 0x01, 0x0a, 0x27, 0x41,
- 0x73, 0x73, 0x69, 0x67, 0x6e, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65,
- 0x72, 0x76, 0x65, 0x72, 0x54, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6a, 0x0a, 0x1b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70,
- 0x61, 0x63, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x73,
- 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x6f,
- 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e,
- 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65,
- 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x18, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70,
- 0x61, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76,
- 0x65, 0x72, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x96, 0x01, 0x0a, 0x28, 0x41, 0x73, 0x73, 0x69, 0x67,
- 0x6e, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72,
- 0x54, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x12, 0x6a, 0x0a, 0x1b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x73, 0x65, 0x72, 0x76,
- 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63,
- 0x79, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x4e, 0x61, 0x6d,
- 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53,
- 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x18, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x22,
- 0x9b, 0x01, 0x0a, 0x29, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63,
- 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x46, 0x72, 0x6f, 0x6d, 0x4e, 0x61, 0x6d,
- 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6a, 0x0a,
- 0x1b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x61,
- 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6e, 0x61, 0x6d, 0x65,
- 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52,
- 0x18, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63,
- 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x98, 0x01,
- 0x0a, 0x2a, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73,
- 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x46, 0x72, 0x6f, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x73,
- 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6a, 0x0a, 0x1b,
- 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x63,
- 0x63, 0x65, 0x73, 0x73, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73,
- 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4b,
- 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x18,
- 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65,
- 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x22, 0x71, 0x0a, 0x21, 0x41, 0x73, 0x73, 0x69,
- 0x67, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x54, 0x6f, 0x4e, 0x61, 0x6d,
- 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4c, 0x0a,
- 0x0d, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6e, 0x61,
- 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61,
- 0x63, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x0c, 0x6e,
- 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x22, 0x6a, 0x0a, 0x22, 0x41,
- 0x73, 0x73, 0x69, 0x67, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x54, 0x6f,
- 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x12, 0x44, 0x0a, 0x0d, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6b,
- 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63,
- 0x79, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x4e, 0x61, 0x6d,
- 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73,
- 0x70, 0x61, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x22, 0x73, 0x0a, 0x23, 0x52, 0x65, 0x6d, 0x6f, 0x76,
- 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x4e, 0x61,
- 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4c,
- 0x0a, 0x0d, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6e,
- 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70,
- 0x61, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x0c,
- 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x22, 0x6c, 0x0a, 0x24,
- 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x46,
+ 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52,
+ 0x02, 0x69, 0x64, 0x22, 0x1d, 0x0a, 0x1b, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74,
+ 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x22, 0x99, 0x01, 0x0a, 0x27, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x4b, 0x65, 0x79,
+ 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x6f, 0x4e, 0x61,
+ 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6a,
+ 0x0a, 0x1b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x5f,
+ 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6e, 0x61, 0x6d,
+ 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63,
+ 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72,
+ 0x52, 0x18, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63,
+ 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x96,
+ 0x01, 0x0a, 0x28, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65,
+ 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70,
+ 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6a, 0x0a, 0x1b, 0x6e,
+ 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x63, 0x63,
+ 0x65, 0x73, 0x73, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x2b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70,
+ 0x61, 0x63, 0x65, 0x73, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4b, 0x65,
+ 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x18, 0x6e,
+ 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73,
+ 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x22, 0x9b, 0x01, 0x0a, 0x29, 0x52, 0x65, 0x6d, 0x6f,
+ 0x76, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65,
+ 0x72, 0x46, 0x72, 0x6f, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x6a, 0x0a, 0x1b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x73, 0x65,
+ 0x72, 0x76, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x6f, 0x6c,
+ 0x69, 0x63, 0x79, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x4e,
+ 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73,
+ 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x18, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65,
+ 0x72, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x98, 0x01, 0x0a, 0x2a, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65,
+ 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x46,
0x72, 0x6f, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x0d, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63,
- 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x6f,
- 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e,
- 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x52, 0x0c, 0x6e, 0x61,
- 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x2a, 0xc1, 0x01, 0x0a, 0x12, 0x53,
- 0x6f, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x54, 0x79, 0x70,
- 0x65, 0x12, 0x24, 0x0a, 0x20, 0x53, 0x4f, 0x52, 0x54, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x53, 0x50,
- 0x41, 0x43, 0x45, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43,
- 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1d, 0x0a, 0x19, 0x53, 0x4f, 0x52, 0x54, 0x5f,
- 0x4e, 0x41, 0x4d, 0x45, 0x53, 0x50, 0x41, 0x43, 0x45, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f,
- 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, 0x53, 0x4f, 0x52, 0x54, 0x5f, 0x4e,
- 0x41, 0x4d, 0x45, 0x53, 0x50, 0x41, 0x43, 0x45, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46,
- 0x51, 0x4e, 0x10, 0x02, 0x12, 0x23, 0x0a, 0x1f, 0x53, 0x4f, 0x52, 0x54, 0x5f, 0x4e, 0x41, 0x4d,
- 0x45, 0x53, 0x50, 0x41, 0x43, 0x45, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x52, 0x45,
- 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, 0x54, 0x10, 0x03, 0x12, 0x23, 0x0a, 0x1f, 0x53, 0x4f, 0x52,
+ 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6a, 0x0a, 0x1b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63,
+ 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x73, 0x65, 0x72,
+ 0x76, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x6f, 0x6c, 0x69,
+ 0x63, 0x79, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x4e, 0x61,
+ 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73,
+ 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x18, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63,
+ 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72,
+ 0x22, 0x71, 0x0a, 0x21, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63,
+ 0x4b, 0x65, 0x79, 0x54, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x0d, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70,
+ 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73,
+ 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x06, 0xba,
+ 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65,
+ 0x4b, 0x65, 0x79, 0x22, 0x6a, 0x0a, 0x22, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x50, 0x75, 0x62,
+ 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x54, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63,
+ 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x0d, 0x6e, 0x61, 0x6d,
+ 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x1f, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70,
+ 0x61, 0x63, 0x65, 0x73, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4b, 0x65,
+ 0x79, 0x52, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x22,
+ 0x73, 0x0a, 0x23, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b,
+ 0x65, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4c, 0x0a, 0x0d, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70,
+ 0x61, 0x63, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e,
+ 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65,
+ 0x73, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4b, 0x65, 0x79, 0x42, 0x06,
+ 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63,
+ 0x65, 0x4b, 0x65, 0x79, 0x22, 0x6c, 0x0a, 0x24, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x75,
+ 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x0d,
+ 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6e, 0x61, 0x6d,
+ 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63,
+ 0x65, 0x4b, 0x65, 0x79, 0x52, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x4b,
+ 0x65, 0x79, 0x2a, 0xc1, 0x01, 0x0a, 0x12, 0x53, 0x6f, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, 0x24, 0x0a, 0x20, 0x53, 0x4f, 0x52,
0x54, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x53, 0x50, 0x41, 0x43, 0x45, 0x53, 0x5f, 0x54, 0x59, 0x50,
- 0x45, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, 0x54, 0x10, 0x04, 0x32, 0xa2,
- 0x09, 0x0a, 0x10, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x72, 0x76,
- 0x69, 0x63, 0x65, 0x12, 0x64, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70,
- 0x61, 0x63, 0x65, 0x12, 0x26, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6e, 0x61, 0x6d,
- 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73,
- 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x70, 0x6f,
+ 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12,
+ 0x1d, 0x0a, 0x19, 0x53, 0x4f, 0x52, 0x54, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x53, 0x50, 0x41, 0x43,
+ 0x45, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x10, 0x01, 0x12, 0x1c,
+ 0x0a, 0x18, 0x53, 0x4f, 0x52, 0x54, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x53, 0x50, 0x41, 0x43, 0x45,
+ 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x46, 0x51, 0x4e, 0x10, 0x02, 0x12, 0x23, 0x0a, 0x1f,
+ 0x53, 0x4f, 0x52, 0x54, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x53, 0x50, 0x41, 0x43, 0x45, 0x53, 0x5f,
+ 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x41, 0x54, 0x10,
+ 0x03, 0x12, 0x23, 0x0a, 0x1f, 0x53, 0x4f, 0x52, 0x54, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x53, 0x50,
+ 0x41, 0x43, 0x45, 0x53, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45,
+ 0x44, 0x5f, 0x41, 0x54, 0x10, 0x04, 0x32, 0xa2, 0x09, 0x0a, 0x10, 0x4e, 0x61, 0x6d, 0x65, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x64, 0x0a, 0x0c, 0x47,
+ 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x26, 0x2e, 0x70, 0x6f,
0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e,
- 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x6a, 0x0a, 0x0e, 0x4c, 0x69, 0x73,
- 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x12, 0x28, 0x2e, 0x70, 0x6f,
+ 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6e, 0x61, 0x6d,
+ 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02,
+ 0x01, 0x12, 0x6a, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x73, 0x12, 0x28, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6e, 0x61, 0x6d,
+ 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65,
+ 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e,
+ 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65,
+ 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x6a, 0x0a,
+ 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65,
+ 0x12, 0x29, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70,
+ 0x61, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x70, 0x6f,
0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e,
- 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6e,
- 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x61,
- 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x6a, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e,
- 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x29, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63,
- 0x79, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x72, 0x65,
- 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6e, 0x61, 0x6d,
- 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61,
- 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
- 0x00, 0x12, 0x6a, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73,
- 0x70, 0x61, 0x63, 0x65, 0x12, 0x29, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6e, 0x61,
- 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e,
- 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
- 0x2a, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61,
- 0x63, 0x65, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70,
- 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x76, 0x0a,
- 0x13, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73,
- 0x70, 0x61, 0x63, 0x65, 0x12, 0x2d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6e, 0x61,
- 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76,
- 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6e, 0x61, 0x6d,
- 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61,
+ 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52,
+ 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6a, 0x0a, 0x0f, 0x55, 0x70, 0x64,
+ 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x29, 0x2e, 0x70,
+ 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73,
+ 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
+ 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61,
0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0xa0, 0x01, 0x0a, 0x20, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e,
- 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54,
- 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x3a, 0x2e, 0x70, 0x6f, 0x6c,
- 0x69, 0x63, 0x79, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x41,
- 0x73, 0x73, 0x69, 0x67, 0x6e, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65,
- 0x72, 0x76, 0x65, 0x72, 0x54, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e,
- 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67,
- 0x6e, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72,
- 0x54, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0xa6, 0x01, 0x0a, 0x22, 0x52, 0x65, 0x6d,
- 0x6f, 0x76, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76,
- 0x65, 0x72, 0x46, 0x72, 0x6f, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12,
- 0x3c, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61,
- 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63,
- 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x46, 0x72, 0x6f, 0x6d, 0x4e, 0x61, 0x6d,
- 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3d, 0x2e,
- 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x73, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73,
- 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x46, 0x72, 0x6f, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x73,
- 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x88, 0x02,
- 0x01, 0x12, 0x8b, 0x01, 0x0a, 0x1a, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x50, 0x75, 0x62, 0x6c,
- 0x69, 0x63, 0x4b, 0x65, 0x79, 0x54, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x12, 0x34, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70,
- 0x61, 0x63, 0x65, 0x73, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69,
- 0x63, 0x4b, 0x65, 0x79, 0x54, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e,
- 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67,
- 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x54, 0x6f, 0x4e, 0x61, 0x6d, 0x65,
- 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12,
- 0x91, 0x01, 0x0a, 0x1c, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63,
- 0x4b, 0x65, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x12, 0x36, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70,
- 0x61, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69,
- 0x63, 0x4b, 0x65, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63,
- 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63,
+ 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x76, 0x0a, 0x13, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76,
+ 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x2d, 0x2e, 0x70,
+ 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73,
+ 0x2e, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x70, 0x6f,
+ 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e,
+ 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70,
+ 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0xa0, 0x01,
+ 0x0a, 0x20, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73,
+ 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x12, 0x3a, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6e, 0x61, 0x6d, 0x65,
+ 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x4b, 0x65, 0x79,
+ 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x6f, 0x4e, 0x61,
+ 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3b,
+ 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63,
+ 0x65, 0x73, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65,
+ 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x54, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70,
+ 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x88, 0x02, 0x01,
+ 0x12, 0xa6, 0x01, 0x0a, 0x22, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63,
+ 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x46, 0x72, 0x6f, 0x6d, 0x4e, 0x61,
+ 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x3c, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
+ 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x6d, 0x6f,
+ 0x76, 0x65, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65,
+ 0x72, 0x46, 0x72, 0x6f, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6e,
+ 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65,
+ 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x46,
+ 0x72, 0x6f, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x8b, 0x01, 0x0a, 0x1a, 0x41, 0x73,
+ 0x73, 0x69, 0x67, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x54, 0x6f, 0x4e,
+ 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x34, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63,
+ 0x79, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x41, 0x73, 0x73,
+ 0x69, 0x67, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x54, 0x6f, 0x4e, 0x61,
+ 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x35,
+ 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63,
+ 0x65, 0x73, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b,
+ 0x65, 0x79, 0x54, 0x6f, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x91, 0x01, 0x0a, 0x1c, 0x52, 0x65, 0x6d, 0x6f,
+ 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x4e,
+ 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x36, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63,
0x79, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x6d,
0x6f, 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x46, 0x72, 0x6f, 0x6d,
- 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x22, 0x00, 0x42, 0xc8, 0x01, 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x6f, 0x6c, 0x69,
- 0x63, 0x79, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x42, 0x0f, 0x4e,
- 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01,
- 0x5a, 0x39, 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,
- 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0xa2, 0x02, 0x03, 0x50, 0x4e,
- 0x58, 0xaa, 0x02, 0x11, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73,
- 0x70, 0x61, 0x63, 0x65, 0x73, 0xca, 0x02, 0x11, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5c, 0x4e,
- 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0xe2, 0x02, 0x1d, 0x50, 0x6f, 0x6c, 0x69,
- 0x63, 0x79, 0x5c, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x5c, 0x47, 0x50,
- 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x12, 0x50, 0x6f, 0x6c, 0x69,
- 0x63, 0x79, 0x3a, 0x3a, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x62, 0x06,
- 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+ 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x1a, 0x37, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70,
+ 0x61, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69,
+ 0x63, 0x4b, 0x65, 0x79, 0x46, 0x72, 0x6f, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63,
+ 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xc8, 0x01, 0x0a, 0x15,
+ 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x73, 0x42, 0x0f, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65,
+ 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x39, 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, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x73, 0xa2, 0x02, 0x03, 0x50, 0x4e, 0x58, 0xaa, 0x02, 0x11, 0x50, 0x6f, 0x6c, 0x69,
+ 0x63, 0x79, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0xca, 0x02, 0x11,
+ 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5c, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65,
+ 0x73, 0xe2, 0x02, 0x1d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5c, 0x4e, 0x61, 0x6d, 0x65, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x73, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
+ 0x61, 0xea, 0x02, 0x12, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x3a, 0x3a, 0x4e, 0x61, 0x6d, 0x65,
+ 0x73, 0x70, 0x61, 0x63, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@@ -1569,9 +1580,10 @@ var file_policy_namespaces_namespaces_proto_goTypes = []interface{}{
(policy.SortDirection)(0), // 23: policy.SortDirection
(common.ActiveStateEnum)(0), // 24: common.ActiveStateEnum
(*policy.PageRequest)(nil), // 25: policy.PageRequest
- (*policy.PageResponse)(nil), // 26: policy.PageResponse
- (*common.MetadataMutable)(nil), // 27: common.MetadataMutable
- (common.MetadataUpdateEnum)(0), // 28: common.MetadataUpdateEnum
+ (*policy.Search)(nil), // 26: policy.Search
+ (*policy.PageResponse)(nil), // 27: policy.PageResponse
+ (*common.MetadataMutable)(nil), // 28: common.MetadataMutable
+ (common.MetadataUpdateEnum)(0), // 29: common.MetadataUpdateEnum
}
var file_policy_namespaces_namespaces_proto_depIdxs = []int32{
22, // 0: policy.namespaces.GetNamespaceResponse.namespace:type_name -> policy.Namespace
@@ -1580,44 +1592,45 @@ var file_policy_namespaces_namespaces_proto_depIdxs = []int32{
24, // 3: policy.namespaces.ListNamespacesRequest.state:type_name -> common.ActiveStateEnum
25, // 4: policy.namespaces.ListNamespacesRequest.pagination:type_name -> policy.PageRequest
5, // 5: policy.namespaces.ListNamespacesRequest.sort:type_name -> policy.namespaces.NamespacesSort
- 22, // 6: policy.namespaces.ListNamespacesResponse.namespaces:type_name -> policy.Namespace
- 26, // 7: policy.namespaces.ListNamespacesResponse.pagination:type_name -> policy.PageResponse
- 27, // 8: policy.namespaces.CreateNamespaceRequest.metadata:type_name -> common.MetadataMutable
- 22, // 9: policy.namespaces.CreateNamespaceResponse.namespace:type_name -> policy.Namespace
- 27, // 10: policy.namespaces.UpdateNamespaceRequest.metadata:type_name -> common.MetadataMutable
- 28, // 11: policy.namespaces.UpdateNamespaceRequest.metadata_update_behavior:type_name -> common.MetadataUpdateEnum
- 22, // 12: policy.namespaces.UpdateNamespaceResponse.namespace:type_name -> policy.Namespace
- 1, // 13: policy.namespaces.AssignKeyAccessServerToNamespaceRequest.namespace_key_access_server:type_name -> policy.namespaces.NamespaceKeyAccessServer
- 1, // 14: policy.namespaces.AssignKeyAccessServerToNamespaceResponse.namespace_key_access_server:type_name -> policy.namespaces.NamespaceKeyAccessServer
- 1, // 15: policy.namespaces.RemoveKeyAccessServerFromNamespaceRequest.namespace_key_access_server:type_name -> policy.namespaces.NamespaceKeyAccessServer
- 1, // 16: policy.namespaces.RemoveKeyAccessServerFromNamespaceResponse.namespace_key_access_server:type_name -> policy.namespaces.NamespaceKeyAccessServer
- 2, // 17: policy.namespaces.AssignPublicKeyToNamespaceRequest.namespace_key:type_name -> policy.namespaces.NamespaceKey
- 2, // 18: policy.namespaces.AssignPublicKeyToNamespaceResponse.namespace_key:type_name -> policy.namespaces.NamespaceKey
- 2, // 19: policy.namespaces.RemovePublicKeyFromNamespaceRequest.namespace_key:type_name -> policy.namespaces.NamespaceKey
- 2, // 20: policy.namespaces.RemovePublicKeyFromNamespaceResponse.namespace_key:type_name -> policy.namespaces.NamespaceKey
- 3, // 21: policy.namespaces.NamespaceService.GetNamespace:input_type -> policy.namespaces.GetNamespaceRequest
- 6, // 22: policy.namespaces.NamespaceService.ListNamespaces:input_type -> policy.namespaces.ListNamespacesRequest
- 8, // 23: policy.namespaces.NamespaceService.CreateNamespace:input_type -> policy.namespaces.CreateNamespaceRequest
- 10, // 24: policy.namespaces.NamespaceService.UpdateNamespace:input_type -> policy.namespaces.UpdateNamespaceRequest
- 12, // 25: policy.namespaces.NamespaceService.DeactivateNamespace:input_type -> policy.namespaces.DeactivateNamespaceRequest
- 14, // 26: policy.namespaces.NamespaceService.AssignKeyAccessServerToNamespace:input_type -> policy.namespaces.AssignKeyAccessServerToNamespaceRequest
- 16, // 27: policy.namespaces.NamespaceService.RemoveKeyAccessServerFromNamespace:input_type -> policy.namespaces.RemoveKeyAccessServerFromNamespaceRequest
- 18, // 28: policy.namespaces.NamespaceService.AssignPublicKeyToNamespace:input_type -> policy.namespaces.AssignPublicKeyToNamespaceRequest
- 20, // 29: policy.namespaces.NamespaceService.RemovePublicKeyFromNamespace:input_type -> policy.namespaces.RemovePublicKeyFromNamespaceRequest
- 4, // 30: policy.namespaces.NamespaceService.GetNamespace:output_type -> policy.namespaces.GetNamespaceResponse
- 7, // 31: policy.namespaces.NamespaceService.ListNamespaces:output_type -> policy.namespaces.ListNamespacesResponse
- 9, // 32: policy.namespaces.NamespaceService.CreateNamespace:output_type -> policy.namespaces.CreateNamespaceResponse
- 11, // 33: policy.namespaces.NamespaceService.UpdateNamespace:output_type -> policy.namespaces.UpdateNamespaceResponse
- 13, // 34: policy.namespaces.NamespaceService.DeactivateNamespace:output_type -> policy.namespaces.DeactivateNamespaceResponse
- 15, // 35: policy.namespaces.NamespaceService.AssignKeyAccessServerToNamespace:output_type -> policy.namespaces.AssignKeyAccessServerToNamespaceResponse
- 17, // 36: policy.namespaces.NamespaceService.RemoveKeyAccessServerFromNamespace:output_type -> policy.namespaces.RemoveKeyAccessServerFromNamespaceResponse
- 19, // 37: policy.namespaces.NamespaceService.AssignPublicKeyToNamespace:output_type -> policy.namespaces.AssignPublicKeyToNamespaceResponse
- 21, // 38: policy.namespaces.NamespaceService.RemovePublicKeyFromNamespace:output_type -> policy.namespaces.RemovePublicKeyFromNamespaceResponse
- 30, // [30:39] is the sub-list for method output_type
- 21, // [21:30] is the sub-list for method input_type
- 21, // [21:21] is the sub-list for extension type_name
- 21, // [21:21] is the sub-list for extension extendee
- 0, // [0:21] is the sub-list for field type_name
+ 26, // 6: policy.namespaces.ListNamespacesRequest.search:type_name -> policy.Search
+ 22, // 7: policy.namespaces.ListNamespacesResponse.namespaces:type_name -> policy.Namespace
+ 27, // 8: policy.namespaces.ListNamespacesResponse.pagination:type_name -> policy.PageResponse
+ 28, // 9: policy.namespaces.CreateNamespaceRequest.metadata:type_name -> common.MetadataMutable
+ 22, // 10: policy.namespaces.CreateNamespaceResponse.namespace:type_name -> policy.Namespace
+ 28, // 11: policy.namespaces.UpdateNamespaceRequest.metadata:type_name -> common.MetadataMutable
+ 29, // 12: policy.namespaces.UpdateNamespaceRequest.metadata_update_behavior:type_name -> common.MetadataUpdateEnum
+ 22, // 13: policy.namespaces.UpdateNamespaceResponse.namespace:type_name -> policy.Namespace
+ 1, // 14: policy.namespaces.AssignKeyAccessServerToNamespaceRequest.namespace_key_access_server:type_name -> policy.namespaces.NamespaceKeyAccessServer
+ 1, // 15: policy.namespaces.AssignKeyAccessServerToNamespaceResponse.namespace_key_access_server:type_name -> policy.namespaces.NamespaceKeyAccessServer
+ 1, // 16: policy.namespaces.RemoveKeyAccessServerFromNamespaceRequest.namespace_key_access_server:type_name -> policy.namespaces.NamespaceKeyAccessServer
+ 1, // 17: policy.namespaces.RemoveKeyAccessServerFromNamespaceResponse.namespace_key_access_server:type_name -> policy.namespaces.NamespaceKeyAccessServer
+ 2, // 18: policy.namespaces.AssignPublicKeyToNamespaceRequest.namespace_key:type_name -> policy.namespaces.NamespaceKey
+ 2, // 19: policy.namespaces.AssignPublicKeyToNamespaceResponse.namespace_key:type_name -> policy.namespaces.NamespaceKey
+ 2, // 20: policy.namespaces.RemovePublicKeyFromNamespaceRequest.namespace_key:type_name -> policy.namespaces.NamespaceKey
+ 2, // 21: policy.namespaces.RemovePublicKeyFromNamespaceResponse.namespace_key:type_name -> policy.namespaces.NamespaceKey
+ 3, // 22: policy.namespaces.NamespaceService.GetNamespace:input_type -> policy.namespaces.GetNamespaceRequest
+ 6, // 23: policy.namespaces.NamespaceService.ListNamespaces:input_type -> policy.namespaces.ListNamespacesRequest
+ 8, // 24: policy.namespaces.NamespaceService.CreateNamespace:input_type -> policy.namespaces.CreateNamespaceRequest
+ 10, // 25: policy.namespaces.NamespaceService.UpdateNamespace:input_type -> policy.namespaces.UpdateNamespaceRequest
+ 12, // 26: policy.namespaces.NamespaceService.DeactivateNamespace:input_type -> policy.namespaces.DeactivateNamespaceRequest
+ 14, // 27: policy.namespaces.NamespaceService.AssignKeyAccessServerToNamespace:input_type -> policy.namespaces.AssignKeyAccessServerToNamespaceRequest
+ 16, // 28: policy.namespaces.NamespaceService.RemoveKeyAccessServerFromNamespace:input_type -> policy.namespaces.RemoveKeyAccessServerFromNamespaceRequest
+ 18, // 29: policy.namespaces.NamespaceService.AssignPublicKeyToNamespace:input_type -> policy.namespaces.AssignPublicKeyToNamespaceRequest
+ 20, // 30: policy.namespaces.NamespaceService.RemovePublicKeyFromNamespace:input_type -> policy.namespaces.RemovePublicKeyFromNamespaceRequest
+ 4, // 31: policy.namespaces.NamespaceService.GetNamespace:output_type -> policy.namespaces.GetNamespaceResponse
+ 7, // 32: policy.namespaces.NamespaceService.ListNamespaces:output_type -> policy.namespaces.ListNamespacesResponse
+ 9, // 33: policy.namespaces.NamespaceService.CreateNamespace:output_type -> policy.namespaces.CreateNamespaceResponse
+ 11, // 34: policy.namespaces.NamespaceService.UpdateNamespace:output_type -> policy.namespaces.UpdateNamespaceResponse
+ 13, // 35: policy.namespaces.NamespaceService.DeactivateNamespace:output_type -> policy.namespaces.DeactivateNamespaceResponse
+ 15, // 36: policy.namespaces.NamespaceService.AssignKeyAccessServerToNamespace:output_type -> policy.namespaces.AssignKeyAccessServerToNamespaceResponse
+ 17, // 37: policy.namespaces.NamespaceService.RemoveKeyAccessServerFromNamespace:output_type -> policy.namespaces.RemoveKeyAccessServerFromNamespaceResponse
+ 19, // 38: policy.namespaces.NamespaceService.AssignPublicKeyToNamespace:output_type -> policy.namespaces.AssignPublicKeyToNamespaceResponse
+ 21, // 39: policy.namespaces.NamespaceService.RemovePublicKeyFromNamespace:output_type -> policy.namespaces.RemovePublicKeyFromNamespaceResponse
+ 31, // [31:40] is the sub-list for method output_type
+ 22, // [22:31] is the sub-list for method input_type
+ 22, // [22:22] is the sub-list for extension type_name
+ 22, // [22:22] is the sub-list for extension extendee
+ 0, // [0:22] is the sub-list for field type_name
}
func init() { file_policy_namespaces_namespaces_proto_init() }
diff --git a/protocol/go/policy/obligations/obligations.pb.go b/protocol/go/policy/obligations/obligations.pb.go
index 0216912107..062b76a561 100644
--- a/protocol/go/policy/obligations/obligations.pb.go
+++ b/protocol/go/policy/obligations/obligations.pb.go
@@ -761,6 +761,8 @@ type ListObligationsRequest struct {
// - field UNSPECIFIED defaults to created_at with the specified direction
// - both UNSPECIFIED or sort omitted defaults to created_at DESC
Sort []*ObligationsSort `protobuf:"bytes,11,rep,name=sort,proto3" json:"sort,omitempty"`
+ // Optional
+ Search *policy.Search `protobuf:"bytes,12,opt,name=search,proto3" json:"search,omitempty"`
}
func (x *ListObligationsRequest) Reset() {
@@ -823,6 +825,13 @@ func (x *ListObligationsRequest) GetSort() []*ObligationsSort {
return nil
}
+func (x *ListObligationsRequest) GetSearch() *policy.Search {
+ if x != nil {
+ return x.Search
+ }
+ return nil
+}
+
type ListObligationsResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -1775,6 +1784,8 @@ type ListObligationTriggersRequest struct {
NamespaceFqn string `protobuf:"bytes,2,opt,name=namespace_fqn,json=namespaceFqn,proto3" json:"namespace_fqn,omitempty"`
// Optional
Pagination *policy.PageRequest `protobuf:"bytes,10,opt,name=pagination,proto3" json:"pagination,omitempty"`
+ // Optional
+ Search *policy.Search `protobuf:"bytes,11,opt,name=search,proto3" json:"search,omitempty"`
}
func (x *ListObligationTriggersRequest) Reset() {
@@ -1830,6 +1841,13 @@ func (x *ListObligationTriggersRequest) GetPagination() *policy.PageRequest {
return nil
}
+func (x *ListObligationTriggersRequest) GetSearch() *policy.Search {
+ if x != nil {
+ return x.Search
+ }
+ return nil
+}
+
type ListObligationTriggersResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -2041,7 +2059,7 @@ var file_policy_obligations_obligations_proto_rawDesc = []byte{
0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, 0x0a, 0x0a, 0x6f, 0x62, 0x6c,
0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e,
0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x52, 0x0a, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x94, 0x02,
+ 0x6e, 0x52, 0x0a, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xbc, 0x02,
0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x0c, 0x6e, 0x61, 0x6d, 0x65,
0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08,
@@ -2056,201 +2074,206 @@ var file_policy_obligations_obligations_proto_rawDesc = []byte{
0x6f, 0x72, 0x74, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x6f, 0x6c, 0x69,
0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4f,
0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x53, 0x6f, 0x72, 0x74, 0x42, 0x08,
- 0xba, 0x48, 0x05, 0x92, 0x01, 0x02, 0x10, 0x01, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x3a, 0x24,
- 0xba, 0x48, 0x21, 0x22, 0x1f, 0x0a, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x5f, 0x69, 0x64, 0x0a, 0x0d, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x66,
- 0x71, 0x6e, 0x10, 0x00, 0x22, 0x85, 0x01, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6c,
- 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x12, 0x34, 0x0a, 0x0b, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18,
- 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f,
- 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x6f, 0x62, 0x6c, 0x69, 0x67,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x34, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c,
- 0x69, 0x63, 0x79, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x65, 0x0a, 0x19,
- 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c,
- 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52,
- 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x03, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
- 0x42, 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x10, 0x01, 0x88, 0x01, 0x01, 0x52, 0x03, 0x66, 0x71,
- 0x6e, 0x3a, 0x10, 0xba, 0x48, 0x0d, 0x22, 0x0b, 0x0a, 0x02, 0x69, 0x64, 0x0a, 0x03, 0x66, 0x71,
- 0x6e, 0x10, 0x01, 0x22, 0x4b, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
- 0x32, 0x17, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
- 0x22, 0x4e, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x79, 0x46, 0x51, 0x4e, 0x73, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x04, 0x66, 0x71, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03,
- 0x28, 0x09, 0x42, 0x16, 0xba, 0x48, 0x13, 0x92, 0x01, 0x10, 0x08, 0x01, 0x10, 0xfa, 0x01, 0x18,
- 0x01, 0x22, 0x07, 0x72, 0x05, 0x10, 0x01, 0x88, 0x01, 0x01, 0x52, 0x04, 0x66, 0x71, 0x6e, 0x73,
- 0x22, 0xe8, 0x01, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x79, 0x46, 0x51, 0x4e, 0x73, 0x52, 0x65,
- 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6a, 0x0a, 0x0d, 0x66, 0x71, 0x6e, 0x5f, 0x76, 0x61,
- 0x6c, 0x75, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e,
- 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x79, 0x46, 0x51, 0x4e, 0x73, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x46, 0x71, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70,
- 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x66, 0x71, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d,
- 0x61, 0x70, 0x1a, 0x57, 0x0a, 0x10, 0x46, 0x71, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61,
- 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75,
- 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
- 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65,
- 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xd1, 0x04, 0x0a, 0x1c,
- 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x0d,
- 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x0c, 0x6f,
- 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x0e, 0x6f,
- 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x10, 0x01, 0x88, 0x01, 0x01, 0x52,
- 0x0d, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x71, 0x6e, 0x12, 0xac,
- 0x02, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x95,
- 0x02, 0xba, 0x48, 0x91, 0x02, 0xba, 0x01, 0x85, 0x02, 0x0a, 0x17, 0x6f, 0x62, 0x6c, 0x69, 0x67,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x6d,
- 0x61, 0x74, 0x12, 0xac, 0x01, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20,
- 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x6e,
- 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x73, 0x74,
- 0x72, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x68,
- 0x79, 0x70, 0x68, 0x65, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72,
- 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x20, 0x62, 0x75, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61,
- 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x6c,
- 0x61, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x2e, 0x20, 0x54,
- 0x68, 0x65, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20,
- 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a,
- 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x20, 0x63, 0x61, 0x73, 0x65,
- 0x2e, 0x1a, 0x3b, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28,
- 0x27, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x3f, 0x3a,
- 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2a, 0x5b, 0x61,
- 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x24, 0x27, 0x29, 0xc8, 0x01,
- 0x01, 0x72, 0x03, 0x18, 0xfd, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a,
- 0x08, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32,
- 0x27, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65,
- 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x08, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65,
- 0x72, 0x73, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64,
- 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65,
- 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x6d,
- 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x3a, 0x26, 0xba, 0x48, 0x23, 0x22, 0x21, 0x0a, 0x0d,
- 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x0a, 0x0e, 0x6f,
- 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x71, 0x6e, 0x10, 0x01, 0x22,
- 0x4e, 0x0a, 0x1d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x17, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22,
- 0xcf, 0x04, 0x0a, 0x1c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61,
- 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
- 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48,
- 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0xc4, 0x02, 0x0a, 0x05, 0x76,
- 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0xad, 0x02, 0xba, 0x48, 0xa9,
- 0x02, 0xba, 0x01, 0x9d, 0x02, 0x0a, 0x17, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0xac,
- 0x01, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x76, 0x61, 0x6c, 0x75,
- 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x6c, 0x70,
- 0x68, 0x61, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67,
- 0x2c, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x79, 0x70, 0x68, 0x65,
- 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x63, 0x6f, 0x72,
- 0x65, 0x73, 0x20, 0x62, 0x75, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68,
- 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x20,
- 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x73,
- 0x74, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c,
- 0x20, 0x62, 0x65, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x74,
- 0x6f, 0x20, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x20, 0x63, 0x61, 0x73, 0x65, 0x2e, 0x1a, 0x53, 0x73,
- 0x69, 0x7a, 0x65, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x20, 0x3e, 0x20, 0x30, 0x20, 0x3f, 0x20,
- 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x5b,
- 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x3f, 0x3a, 0x5b, 0x61, 0x2d,
- 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2a, 0x5b, 0x61, 0x2d, 0x7a, 0x41,
- 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x24, 0x27, 0x29, 0x20, 0x3a, 0x20, 0x74, 0x72,
- 0x75, 0x65, 0xc8, 0x01, 0x00, 0x72, 0x03, 0x18, 0xfd, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
- 0x65, 0x12, 0x43, 0x0a, 0x08, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20,
- 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c,
- 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x54, 0x72,
- 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x08, 0x74, 0x72,
- 0x69, 0x67, 0x67, 0x65, 0x72, 0x73, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61,
- 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f,
- 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c,
- 0x65, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x54, 0x0a, 0x18, 0x6d,
- 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x62,
- 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x18, 0x65, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e,
- 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x55,
- 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x16, 0x6d, 0x65, 0x74, 0x61, 0x64,
- 0x61, 0x74, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f,
- 0x72, 0x22, 0x4e, 0x0a, 0x1d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
- 0x65, 0x22, 0x68, 0x0a, 0x1c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67,
+ 0xba, 0x48, 0x05, 0x92, 0x01, 0x02, 0x10, 0x01, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x12, 0x26,
+ 0x0a, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e,
+ 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x06,
+ 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x3a, 0x24, 0xba, 0x48, 0x21, 0x22, 0x1f, 0x0a, 0x0c, 0x6e,
+ 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x0a, 0x0d, 0x6e, 0x61, 0x6d,
+ 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x10, 0x00, 0x22, 0x85, 0x01, 0x0a,
+ 0x17, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x0b, 0x6f, 0x62, 0x6c, 0x69,
+ 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e,
+ 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x52, 0x0b, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x34,
+ 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x61, 0x67, 0x65,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x65, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67,
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
0x74, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba,
0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x03, 0x66,
0x71, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x10,
0x01, 0x88, 0x01, 0x01, 0x52, 0x03, 0x66, 0x71, 0x6e, 0x3a, 0x10, 0xba, 0x48, 0x0d, 0x22, 0x0b,
- 0x0a, 0x02, 0x69, 0x64, 0x0a, 0x03, 0x66, 0x71, 0x6e, 0x10, 0x01, 0x22, 0x4e, 0x0a, 0x1d, 0x44,
- 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56,
- 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x05,
- 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6f,
- 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56,
- 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x37, 0x0a, 0x1b, 0x47,
- 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67,
- 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01,
- 0x52, 0x02, 0x69, 0x64, 0x22, 0x53, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x07, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f,
- 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72,
- 0x52, 0x07, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x22, 0xd4, 0x02, 0x0a, 0x1b, 0x41, 0x64,
- 0x64, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67,
- 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4a, 0x0a, 0x10, 0x6f, 0x62, 0x6c,
- 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x49, 0x64, 0x46,
- 0x71, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48,
- 0x03, 0xc8, 0x01, 0x01, 0x52, 0x0f, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e,
- 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x38, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18,
- 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x49,
- 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42,
- 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12,
- 0x48, 0x0a, 0x0f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c,
- 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f,
- 0x6e, 0x2e, 0x49, 0x64, 0x46, 0x71, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65,
- 0x72, 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, 0x30, 0x0a, 0x07, 0x63, 0x6f, 0x6e,
- 0x74, 0x65, 0x78, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x6f, 0x6c,
- 0x69, 0x63, 0x79, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65,
- 0x78, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x33, 0x0a, 0x08, 0x6d,
- 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e,
- 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d,
- 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
- 0x22, 0x53, 0x0a, 0x1c, 0x41, 0x64, 0x64, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
- 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
- 0x12, 0x33, 0x0a, 0x07, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x07, 0x74, 0x72,
- 0x69, 0x67, 0x67, 0x65, 0x72, 0x22, 0x3a, 0x0a, 0x1e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4f,
- 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20,
- 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x02, 0x69,
- 0x64, 0x22, 0x56, 0x0a, 0x1f, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67,
- 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x07, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f,
+ 0x0a, 0x02, 0x69, 0x64, 0x0a, 0x03, 0x66, 0x71, 0x6e, 0x10, 0x01, 0x22, 0x4b, 0x0a, 0x1a, 0x47,
+ 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75,
+ 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c,
+ 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63,
+ 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75,
+ 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x4e, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x4f,
+ 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42,
+ 0x79, 0x46, 0x51, 0x4e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x04,
+ 0x66, 0x71, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x42, 0x16, 0xba, 0x48, 0x13, 0x92,
+ 0x01, 0x10, 0x08, 0x01, 0x10, 0xfa, 0x01, 0x18, 0x01, 0x22, 0x07, 0x72, 0x05, 0x10, 0x01, 0x88,
+ 0x01, 0x01, 0x52, 0x04, 0x66, 0x71, 0x6e, 0x73, 0x22, 0xe8, 0x01, 0x0a, 0x21, 0x47, 0x65, 0x74,
+ 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73,
+ 0x42, 0x79, 0x46, 0x51, 0x4e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6a,
+ 0x0a, 0x0d, 0x66, 0x71, 0x6e, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x18,
+ 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x46, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f,
+ 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62,
+ 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x79,
+ 0x46, 0x51, 0x4e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x46, 0x71, 0x6e,
+ 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x66,
+ 0x71, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x1a, 0x57, 0x0a, 0x10, 0x46, 0x71,
+ 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10,
+ 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79,
+ 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x17, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a,
+ 0x02, 0x38, 0x01, 0x22, 0xd1, 0x04, 0x0a, 0x1c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4f, 0x62,
+ 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x0d, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05,
+ 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x0c, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x49, 0x64, 0x12, 0x31, 0x0a, 0x0e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07,
+ 0x72, 0x05, 0x10, 0x01, 0x88, 0x01, 0x01, 0x52, 0x0d, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x46, 0x71, 0x6e, 0x12, 0xac, 0x02, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x95, 0x02, 0xba, 0x48, 0x91, 0x02, 0xba, 0x01, 0x85,
+ 0x02, 0x0a, 0x17, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x61,
+ 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0xac, 0x01, 0x4f, 0x62, 0x6c,
+ 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6d, 0x75,
+ 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, 0x75,
+ 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x61, 0x6c,
+ 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e, 0x73, 0x20, 0x61,
+ 0x6e, 0x64, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x20, 0x62,
+ 0x75, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69,
+ 0x72, 0x73, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72,
+ 0x61, 0x63, 0x74, 0x65, 0x72, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65,
+ 0x64, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20,
+ 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x6c, 0x6f,
+ 0x77, 0x65, 0x72, 0x20, 0x63, 0x61, 0x73, 0x65, 0x2e, 0x1a, 0x3b, 0x74, 0x68, 0x69, 0x73, 0x2e,
+ 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d,
+ 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x3f, 0x3a, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30,
+ 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2a, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39,
+ 0x5d, 0x29, 0x3f, 0x24, 0x27, 0x29, 0xc8, 0x01, 0x01, 0x72, 0x03, 0x18, 0xfd, 0x01, 0x52, 0x05,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72,
+ 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
+ 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x56, 0x61, 0x6c,
+ 0x75, 0x65, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x52, 0x08, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x73, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65,
+ 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63,
+ 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x75,
+ 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x3a,
+ 0x26, 0xba, 0x48, 0x23, 0x22, 0x21, 0x0a, 0x0d, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x0a, 0x0e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x5f, 0x66, 0x71, 0x6e, 0x10, 0x01, 0x22, 0x4e, 0x0a, 0x1d, 0x43, 0x72, 0x65, 0x61, 0x74,
+ 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
+ 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65,
+ 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xcf, 0x04, 0x0a, 0x1c, 0x55, 0x70, 0x64, 0x61,
+ 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75,
+ 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x02,
+ 0x69, 0x64, 0x12, 0xc4, 0x02, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01,
+ 0x28, 0x09, 0x42, 0xad, 0x02, 0xba, 0x48, 0xa9, 0x02, 0xba, 0x01, 0x9d, 0x02, 0x0a, 0x17, 0x6f,
+ 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f,
+ 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0xac, 0x01, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62,
+ 0x65, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69,
+ 0x63, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x69,
+ 0x6e, 0x67, 0x20, 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x75,
+ 0x6e, 0x64, 0x65, 0x72, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x20, 0x62, 0x75, 0x74, 0x20, 0x6e,
+ 0x6f, 0x74, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20,
+ 0x6f, 0x72, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65,
+ 0x72, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x76, 0x61,
+ 0x6c, 0x75, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x6e, 0x6f, 0x72, 0x6d,
+ 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x20,
+ 0x63, 0x61, 0x73, 0x65, 0x2e, 0x1a, 0x53, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x74, 0x68, 0x69, 0x73,
+ 0x29, 0x20, 0x3e, 0x20, 0x30, 0x20, 0x3f, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74,
+ 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d,
+ 0x39, 0x5d, 0x28, 0x3f, 0x3a, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5f,
+ 0x2d, 0x5d, 0x2a, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x3f,
+ 0x24, 0x27, 0x29, 0x20, 0x3a, 0x20, 0x74, 0x72, 0x75, 0x65, 0xc8, 0x01, 0x00, 0x72, 0x03, 0x18,
+ 0xfd, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x74, 0x72, 0x69,
+ 0x67, 0x67, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x6f,
+ 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
+ 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71,
+ 0x75, 0x65, 0x73, 0x74, 0x52, 0x08, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x73, 0x12, 0x33,
+ 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61,
+ 0x74, 0x61, 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64,
+ 0x61, 0x74, 0x61, 0x12, 0x54, 0x0a, 0x18, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f,
+ 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x18,
+ 0x65, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d,
+ 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x75,
+ 0x6d, 0x52, 0x16, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74,
+ 0x65, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x22, 0x4e, 0x0a, 0x1d, 0x55, 0x70, 0x64,
+ 0x61, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c,
+ 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61,
+ 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6f, 0x6c, 0x69,
+ 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c,
+ 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x68, 0x0a, 0x1c, 0x44, 0x65, 0x6c,
+ 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c,
+ 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18,
+ 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52,
+ 0x02, 0x69, 0x64, 0x12, 0x1c, 0x0a, 0x03, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
+ 0x42, 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x10, 0x01, 0x88, 0x01, 0x01, 0x52, 0x03, 0x66, 0x71,
+ 0x6e, 0x3a, 0x10, 0xba, 0x48, 0x0d, 0x22, 0x0b, 0x0a, 0x02, 0x69, 0x64, 0x0a, 0x03, 0x66, 0x71,
+ 0x6e, 0x10, 0x01, 0x22, 0x4e, 0x0a, 0x1d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x6c,
+ 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70,
+ 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c,
+ 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61,
+ 0x6c, 0x75, 0x65, 0x22, 0x37, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08,
+ 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x53, 0x0a, 0x1c,
+ 0x47, 0x65, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69,
+ 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x07,
+ 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e,
+ 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x07, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65,
+ 0x72, 0x22, 0xd4, 0x02, 0x0a, 0x1b, 0x41, 0x64, 0x64, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x12, 0x4a, 0x0a, 0x10, 0x6f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f,
+ 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x49, 0x64, 0x46, 0x71, 0x6e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69,
+ 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52, 0x0f, 0x6f, 0x62,
+ 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x38, 0x0a,
+ 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e,
+ 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x49, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x49, 0x64, 0x65,
+ 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x42, 0x06, 0xba, 0x48, 0x03, 0xc8, 0x01, 0x01, 0x52,
+ 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x48, 0x0a, 0x0f, 0x61, 0x74, 0x74, 0x72, 0x69,
+ 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x49, 0x64, 0x46, 0x71, 0x6e, 0x49,
+ 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 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, 0x30, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x04, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74,
+ 0x65, 0x78, 0x74, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18,
+ 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d,
+ 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x08,
+ 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x53, 0x0a, 0x1c, 0x41, 0x64, 0x64, 0x4f,
0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72,
- 0x52, 0x07, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x22, 0xd8, 0x01, 0x0a, 0x1d, 0x4c, 0x69,
- 0x73, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67,
- 0x67, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x0c, 0x6e,
- 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x0b, 0x6e, 0x61, 0x6d,
- 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x0d, 0x6e, 0x61, 0x6d, 0x65,
- 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42,
- 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x10, 0x01, 0x88, 0x01, 0x01, 0x52, 0x0c, 0x6e, 0x61, 0x6d,
- 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x46, 0x71, 0x6e, 0x12, 0x33, 0x0a, 0x0a, 0x70, 0x61, 0x67,
- 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e,
- 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
- 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3a, 0x24,
+ 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x07, 0x74, 0x72, 0x69, 0x67,
+ 0x67, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x6f, 0x6c, 0x69,
+ 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69,
+ 0x67, 0x67, 0x65, 0x72, 0x52, 0x07, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x22, 0x3a, 0x0a,
+ 0x1e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+ 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05,
+ 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x56, 0x0a, 0x1f, 0x52, 0x65, 0x6d,
+ 0x6f, 0x76, 0x65, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69,
+ 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x07,
+ 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e,
+ 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61, 0x74, 0x69, 0x6f,
+ 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x07, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65,
+ 0x72, 0x22, 0x80, 0x02, 0x0a, 0x1d, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6c, 0x69, 0x67, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75,
+ 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65,
+ 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03,
+ 0xb0, 0x01, 0x01, 0x52, 0x0b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64,
+ 0x12, 0x2f, 0x0a, 0x0d, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x66, 0x71,
+ 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x10, 0x01,
+ 0x88, 0x01, 0x01, 0x52, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x46, 0x71,
+ 0x6e, 0x12, 0x33, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18,
+ 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50,
+ 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69,
+ 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68,
+ 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e,
+ 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x3a, 0x24,
0xba, 0x48, 0x21, 0x22, 0x1f, 0x0a, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65,
0x5f, 0x69, 0x64, 0x0a, 0x0d, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x66,
0x71, 0x6e, 0x10, 0x00, 0x22, 0x8d, 0x01, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6c,
@@ -2466,9 +2489,10 @@ var file_policy_obligations_obligations_proto_goTypes = []interface{}{
(*common.MetadataMutable)(nil), // 40: common.MetadataMutable
(common.MetadataUpdateEnum)(0), // 41: common.MetadataUpdateEnum
(*policy.PageRequest)(nil), // 42: policy.PageRequest
- (*policy.PageResponse)(nil), // 43: policy.PageResponse
- (*policy.ObligationValue)(nil), // 44: policy.ObligationValue
- (*policy.ObligationTrigger)(nil), // 45: policy.ObligationTrigger
+ (*policy.Search)(nil), // 43: policy.Search
+ (*policy.PageResponse)(nil), // 44: policy.PageResponse
+ (*policy.ObligationValue)(nil), // 45: policy.ObligationValue
+ (*policy.ObligationTrigger)(nil), // 46: policy.ObligationTrigger
}
var file_policy_obligations_obligations_proto_depIdxs = []int32{
0, // 0: policy.obligations.ObligationsSort.field:type_name -> policy.obligations.SortObligationsType
@@ -2486,66 +2510,68 @@ var file_policy_obligations_obligations_proto_depIdxs = []int32{
39, // 12: policy.obligations.DeleteObligationResponse.obligation:type_name -> policy.Obligation
42, // 13: policy.obligations.ListObligationsRequest.pagination:type_name -> policy.PageRequest
1, // 14: policy.obligations.ListObligationsRequest.sort:type_name -> policy.obligations.ObligationsSort
- 39, // 15: policy.obligations.ListObligationsResponse.obligations:type_name -> policy.Obligation
- 43, // 16: policy.obligations.ListObligationsResponse.pagination:type_name -> policy.PageResponse
- 44, // 17: policy.obligations.GetObligationValueResponse.value:type_name -> policy.ObligationValue
- 34, // 18: policy.obligations.GetObligationValuesByFQNsResponse.fqn_value_map:type_name -> policy.obligations.GetObligationValuesByFQNsResponse.FqnValueMapEntry
- 3, // 19: policy.obligations.CreateObligationValueRequest.triggers:type_name -> policy.obligations.ValueTriggerRequest
- 40, // 20: policy.obligations.CreateObligationValueRequest.metadata:type_name -> common.MetadataMutable
- 44, // 21: policy.obligations.CreateObligationValueResponse.value:type_name -> policy.ObligationValue
- 3, // 22: policy.obligations.UpdateObligationValueRequest.triggers:type_name -> policy.obligations.ValueTriggerRequest
- 40, // 23: policy.obligations.UpdateObligationValueRequest.metadata:type_name -> common.MetadataMutable
- 41, // 24: policy.obligations.UpdateObligationValueRequest.metadata_update_behavior:type_name -> common.MetadataUpdateEnum
- 44, // 25: policy.obligations.UpdateObligationValueResponse.value:type_name -> policy.ObligationValue
- 44, // 26: policy.obligations.DeleteObligationValueResponse.value:type_name -> policy.ObligationValue
- 45, // 27: policy.obligations.GetObligationTriggerResponse.trigger:type_name -> policy.ObligationTrigger
- 37, // 28: policy.obligations.AddObligationTriggerRequest.obligation_value:type_name -> common.IdFqnIdentifier
- 36, // 29: policy.obligations.AddObligationTriggerRequest.action:type_name -> common.IdNameIdentifier
- 37, // 30: policy.obligations.AddObligationTriggerRequest.attribute_value:type_name -> common.IdFqnIdentifier
- 38, // 31: policy.obligations.AddObligationTriggerRequest.context:type_name -> policy.RequestContext
- 40, // 32: policy.obligations.AddObligationTriggerRequest.metadata:type_name -> common.MetadataMutable
- 45, // 33: policy.obligations.AddObligationTriggerResponse.trigger:type_name -> policy.ObligationTrigger
- 45, // 34: policy.obligations.RemoveObligationTriggerResponse.trigger:type_name -> policy.ObligationTrigger
- 42, // 35: policy.obligations.ListObligationTriggersRequest.pagination:type_name -> policy.PageRequest
- 45, // 36: policy.obligations.ListObligationTriggersResponse.triggers:type_name -> policy.ObligationTrigger
- 43, // 37: policy.obligations.ListObligationTriggersResponse.pagination:type_name -> policy.PageResponse
- 39, // 38: policy.obligations.GetObligationsByFQNsResponse.FqnObligationMapEntry.value:type_name -> policy.Obligation
- 44, // 39: policy.obligations.GetObligationValuesByFQNsResponse.FqnValueMapEntry.value:type_name -> policy.ObligationValue
- 13, // 40: policy.obligations.Service.ListObligations:input_type -> policy.obligations.ListObligationsRequest
- 2, // 41: policy.obligations.Service.GetObligation:input_type -> policy.obligations.GetObligationRequest
- 5, // 42: policy.obligations.Service.GetObligationsByFQNs:input_type -> policy.obligations.GetObligationsByFQNsRequest
- 7, // 43: policy.obligations.Service.CreateObligation:input_type -> policy.obligations.CreateObligationRequest
- 9, // 44: policy.obligations.Service.UpdateObligation:input_type -> policy.obligations.UpdateObligationRequest
- 11, // 45: policy.obligations.Service.DeleteObligation:input_type -> policy.obligations.DeleteObligationRequest
- 15, // 46: policy.obligations.Service.GetObligationValue:input_type -> policy.obligations.GetObligationValueRequest
- 17, // 47: policy.obligations.Service.GetObligationValuesByFQNs:input_type -> policy.obligations.GetObligationValuesByFQNsRequest
- 19, // 48: policy.obligations.Service.CreateObligationValue:input_type -> policy.obligations.CreateObligationValueRequest
- 21, // 49: policy.obligations.Service.UpdateObligationValue:input_type -> policy.obligations.UpdateObligationValueRequest
- 23, // 50: policy.obligations.Service.DeleteObligationValue:input_type -> policy.obligations.DeleteObligationValueRequest
- 25, // 51: policy.obligations.Service.GetObligationTrigger:input_type -> policy.obligations.GetObligationTriggerRequest
- 27, // 52: policy.obligations.Service.AddObligationTrigger:input_type -> policy.obligations.AddObligationTriggerRequest
- 29, // 53: policy.obligations.Service.RemoveObligationTrigger:input_type -> policy.obligations.RemoveObligationTriggerRequest
- 31, // 54: policy.obligations.Service.ListObligationTriggers:input_type -> policy.obligations.ListObligationTriggersRequest
- 14, // 55: policy.obligations.Service.ListObligations:output_type -> policy.obligations.ListObligationsResponse
- 4, // 56: policy.obligations.Service.GetObligation:output_type -> policy.obligations.GetObligationResponse
- 6, // 57: policy.obligations.Service.GetObligationsByFQNs:output_type -> policy.obligations.GetObligationsByFQNsResponse
- 8, // 58: policy.obligations.Service.CreateObligation:output_type -> policy.obligations.CreateObligationResponse
- 10, // 59: policy.obligations.Service.UpdateObligation:output_type -> policy.obligations.UpdateObligationResponse
- 12, // 60: policy.obligations.Service.DeleteObligation:output_type -> policy.obligations.DeleteObligationResponse
- 16, // 61: policy.obligations.Service.GetObligationValue:output_type -> policy.obligations.GetObligationValueResponse
- 18, // 62: policy.obligations.Service.GetObligationValuesByFQNs:output_type -> policy.obligations.GetObligationValuesByFQNsResponse
- 20, // 63: policy.obligations.Service.CreateObligationValue:output_type -> policy.obligations.CreateObligationValueResponse
- 22, // 64: policy.obligations.Service.UpdateObligationValue:output_type -> policy.obligations.UpdateObligationValueResponse
- 24, // 65: policy.obligations.Service.DeleteObligationValue:output_type -> policy.obligations.DeleteObligationValueResponse
- 26, // 66: policy.obligations.Service.GetObligationTrigger:output_type -> policy.obligations.GetObligationTriggerResponse
- 28, // 67: policy.obligations.Service.AddObligationTrigger:output_type -> policy.obligations.AddObligationTriggerResponse
- 30, // 68: policy.obligations.Service.RemoveObligationTrigger:output_type -> policy.obligations.RemoveObligationTriggerResponse
- 32, // 69: policy.obligations.Service.ListObligationTriggers:output_type -> policy.obligations.ListObligationTriggersResponse
- 55, // [55:70] is the sub-list for method output_type
- 40, // [40:55] is the sub-list for method input_type
- 40, // [40:40] is the sub-list for extension type_name
- 40, // [40:40] is the sub-list for extension extendee
- 0, // [0:40] is the sub-list for field type_name
+ 43, // 15: policy.obligations.ListObligationsRequest.search:type_name -> policy.Search
+ 39, // 16: policy.obligations.ListObligationsResponse.obligations:type_name -> policy.Obligation
+ 44, // 17: policy.obligations.ListObligationsResponse.pagination:type_name -> policy.PageResponse
+ 45, // 18: policy.obligations.GetObligationValueResponse.value:type_name -> policy.ObligationValue
+ 34, // 19: policy.obligations.GetObligationValuesByFQNsResponse.fqn_value_map:type_name -> policy.obligations.GetObligationValuesByFQNsResponse.FqnValueMapEntry
+ 3, // 20: policy.obligations.CreateObligationValueRequest.triggers:type_name -> policy.obligations.ValueTriggerRequest
+ 40, // 21: policy.obligations.CreateObligationValueRequest.metadata:type_name -> common.MetadataMutable
+ 45, // 22: policy.obligations.CreateObligationValueResponse.value:type_name -> policy.ObligationValue
+ 3, // 23: policy.obligations.UpdateObligationValueRequest.triggers:type_name -> policy.obligations.ValueTriggerRequest
+ 40, // 24: policy.obligations.UpdateObligationValueRequest.metadata:type_name -> common.MetadataMutable
+ 41, // 25: policy.obligations.UpdateObligationValueRequest.metadata_update_behavior:type_name -> common.MetadataUpdateEnum
+ 45, // 26: policy.obligations.UpdateObligationValueResponse.value:type_name -> policy.ObligationValue
+ 45, // 27: policy.obligations.DeleteObligationValueResponse.value:type_name -> policy.ObligationValue
+ 46, // 28: policy.obligations.GetObligationTriggerResponse.trigger:type_name -> policy.ObligationTrigger
+ 37, // 29: policy.obligations.AddObligationTriggerRequest.obligation_value:type_name -> common.IdFqnIdentifier
+ 36, // 30: policy.obligations.AddObligationTriggerRequest.action:type_name -> common.IdNameIdentifier
+ 37, // 31: policy.obligations.AddObligationTriggerRequest.attribute_value:type_name -> common.IdFqnIdentifier
+ 38, // 32: policy.obligations.AddObligationTriggerRequest.context:type_name -> policy.RequestContext
+ 40, // 33: policy.obligations.AddObligationTriggerRequest.metadata:type_name -> common.MetadataMutable
+ 46, // 34: policy.obligations.AddObligationTriggerResponse.trigger:type_name -> policy.ObligationTrigger
+ 46, // 35: policy.obligations.RemoveObligationTriggerResponse.trigger:type_name -> policy.ObligationTrigger
+ 42, // 36: policy.obligations.ListObligationTriggersRequest.pagination:type_name -> policy.PageRequest
+ 43, // 37: policy.obligations.ListObligationTriggersRequest.search:type_name -> policy.Search
+ 46, // 38: policy.obligations.ListObligationTriggersResponse.triggers:type_name -> policy.ObligationTrigger
+ 44, // 39: policy.obligations.ListObligationTriggersResponse.pagination:type_name -> policy.PageResponse
+ 39, // 40: policy.obligations.GetObligationsByFQNsResponse.FqnObligationMapEntry.value:type_name -> policy.Obligation
+ 45, // 41: policy.obligations.GetObligationValuesByFQNsResponse.FqnValueMapEntry.value:type_name -> policy.ObligationValue
+ 13, // 42: policy.obligations.Service.ListObligations:input_type -> policy.obligations.ListObligationsRequest
+ 2, // 43: policy.obligations.Service.GetObligation:input_type -> policy.obligations.GetObligationRequest
+ 5, // 44: policy.obligations.Service.GetObligationsByFQNs:input_type -> policy.obligations.GetObligationsByFQNsRequest
+ 7, // 45: policy.obligations.Service.CreateObligation:input_type -> policy.obligations.CreateObligationRequest
+ 9, // 46: policy.obligations.Service.UpdateObligation:input_type -> policy.obligations.UpdateObligationRequest
+ 11, // 47: policy.obligations.Service.DeleteObligation:input_type -> policy.obligations.DeleteObligationRequest
+ 15, // 48: policy.obligations.Service.GetObligationValue:input_type -> policy.obligations.GetObligationValueRequest
+ 17, // 49: policy.obligations.Service.GetObligationValuesByFQNs:input_type -> policy.obligations.GetObligationValuesByFQNsRequest
+ 19, // 50: policy.obligations.Service.CreateObligationValue:input_type -> policy.obligations.CreateObligationValueRequest
+ 21, // 51: policy.obligations.Service.UpdateObligationValue:input_type -> policy.obligations.UpdateObligationValueRequest
+ 23, // 52: policy.obligations.Service.DeleteObligationValue:input_type -> policy.obligations.DeleteObligationValueRequest
+ 25, // 53: policy.obligations.Service.GetObligationTrigger:input_type -> policy.obligations.GetObligationTriggerRequest
+ 27, // 54: policy.obligations.Service.AddObligationTrigger:input_type -> policy.obligations.AddObligationTriggerRequest
+ 29, // 55: policy.obligations.Service.RemoveObligationTrigger:input_type -> policy.obligations.RemoveObligationTriggerRequest
+ 31, // 56: policy.obligations.Service.ListObligationTriggers:input_type -> policy.obligations.ListObligationTriggersRequest
+ 14, // 57: policy.obligations.Service.ListObligations:output_type -> policy.obligations.ListObligationsResponse
+ 4, // 58: policy.obligations.Service.GetObligation:output_type -> policy.obligations.GetObligationResponse
+ 6, // 59: policy.obligations.Service.GetObligationsByFQNs:output_type -> policy.obligations.GetObligationsByFQNsResponse
+ 8, // 60: policy.obligations.Service.CreateObligation:output_type -> policy.obligations.CreateObligationResponse
+ 10, // 61: policy.obligations.Service.UpdateObligation:output_type -> policy.obligations.UpdateObligationResponse
+ 12, // 62: policy.obligations.Service.DeleteObligation:output_type -> policy.obligations.DeleteObligationResponse
+ 16, // 63: policy.obligations.Service.GetObligationValue:output_type -> policy.obligations.GetObligationValueResponse
+ 18, // 64: policy.obligations.Service.GetObligationValuesByFQNs:output_type -> policy.obligations.GetObligationValuesByFQNsResponse
+ 20, // 65: policy.obligations.Service.CreateObligationValue:output_type -> policy.obligations.CreateObligationValueResponse
+ 22, // 66: policy.obligations.Service.UpdateObligationValue:output_type -> policy.obligations.UpdateObligationValueResponse
+ 24, // 67: policy.obligations.Service.DeleteObligationValue:output_type -> policy.obligations.DeleteObligationValueResponse
+ 26, // 68: policy.obligations.Service.GetObligationTrigger:output_type -> policy.obligations.GetObligationTriggerResponse
+ 28, // 69: policy.obligations.Service.AddObligationTrigger:output_type -> policy.obligations.AddObligationTriggerResponse
+ 30, // 70: policy.obligations.Service.RemoveObligationTrigger:output_type -> policy.obligations.RemoveObligationTriggerResponse
+ 32, // 71: policy.obligations.Service.ListObligationTriggers:output_type -> policy.obligations.ListObligationTriggersResponse
+ 57, // [57:72] is the sub-list for method output_type
+ 42, // [42:57] is the sub-list for method input_type
+ 42, // [42:42] is the sub-list for extension type_name
+ 42, // [42:42] is the sub-list for extension extendee
+ 0, // [0:42] is the sub-list for field type_name
}
func init() { file_policy_obligations_obligations_proto_init() }
diff --git a/protocol/go/policy/registeredresources/registered_resources.pb.go b/protocol/go/policy/registeredresources/registered_resources.pb.go
index 5662a78482..f1c2032dc4 100644
--- a/protocol/go/policy/registeredresources/registered_resources.pb.go
+++ b/protocol/go/policy/registeredresources/registered_resources.pb.go
@@ -421,6 +421,8 @@ type ListRegisteredResourcesRequest struct {
// - field UNSPECIFIED defaults to created_at with the specified direction
// - both UNSPECIFIED or sort omitted defaults to created_at DESC
Sort []*RegisteredResourcesSort `protobuf:"bytes,11,rep,name=sort,proto3" json:"sort,omitempty"`
+ // Optional
+ Search *policy.Search `protobuf:"bytes,12,opt,name=search,proto3" json:"search,omitempty"`
}
func (x *ListRegisteredResourcesRequest) Reset() {
@@ -483,6 +485,13 @@ func (x *ListRegisteredResourcesRequest) GetSort() []*RegisteredResourcesSort {
return nil
}
+func (x *ListRegisteredResourcesRequest) GetSearch() *policy.Search {
+ if x != nil {
+ return x.Search
+ }
+ return nil
+}
+
type ListRegisteredResourcesResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -1239,6 +1248,8 @@ type ListRegisteredResourceValuesRequest struct {
ResourceId string `protobuf:"bytes,1,opt,name=resource_id,json=resourceId,proto3" json:"resource_id,omitempty"`
// Optional
Pagination *policy.PageRequest `protobuf:"bytes,10,opt,name=pagination,proto3" json:"pagination,omitempty"`
+ // Optional
+ Search *policy.Search `protobuf:"bytes,11,opt,name=search,proto3" json:"search,omitempty"`
}
func (x *ListRegisteredResourceValuesRequest) Reset() {
@@ -1287,6 +1298,13 @@ func (x *ListRegisteredResourceValuesRequest) GetPagination() *policy.PageReques
return nil
}
+func (x *ListRegisteredResourceValuesRequest) GetSearch() *policy.Search {
+ if x != nil {
+ return x.Search
+ }
+ return nil
+}
+
type ListRegisteredResourceValuesResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -1677,7 +1695,7 @@ var file_policy_registeredresources_registered_resources_proto_rawDesc = []byte{
0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x70, 0x6f,
0x6c, 0x69, 0x63, 0x79, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69,
0x6f, 0x6e, 0x42, 0x08, 0xba, 0x48, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x64, 0x69,
- 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xac, 0x02, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74,
+ 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xd4, 0x02, 0x0a, 0x1e, 0x4c, 0x69, 0x73, 0x74,
0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72,
0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x0c, 0x6e, 0x61,
0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
@@ -1694,196 +1712,201 @@ var file_policy_registeredresources_registered_resources_proto_rawDesc = []byte{
0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65,
0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x53, 0x6f, 0x72, 0x74,
0x42, 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, 0x02, 0x10, 0x01, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74,
- 0x3a, 0x24, 0xba, 0x48, 0x21, 0x22, 0x1f, 0x0a, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61,
- 0x63, 0x65, 0x5f, 0x69, 0x64, 0x0a, 0x0d, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65,
- 0x5f, 0x66, 0x71, 0x6e, 0x10, 0x00, 0x22, 0x91, 0x01, 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x52,
+ 0x12, 0x26, 0x0a, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68,
+ 0x52, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x3a, 0x24, 0xba, 0x48, 0x21, 0x22, 0x1f, 0x0a,
+ 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x0a, 0x0d, 0x6e,
+ 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x10, 0x00, 0x22, 0x91,
+ 0x01, 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65,
+ 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18,
+ 0x01, 0x20, 0x03, 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, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x72, 0x65,
- 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e,
+ 0x65, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x34, 0x0a, 0x0a,
+ 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65,
+ 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69,
+ 0x6f, 0x6e, 0x22, 0x89, 0x04, 0x0a, 0x1f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x67,
+ 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64,
+ 0x12, 0xc0, 0x02, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42,
+ 0xab, 0x02, 0xba, 0x48, 0xa7, 0x02, 0xba, 0x01, 0x9b, 0x02, 0x0a, 0x0e, 0x72, 0x72, 0x5f, 0x6e,
+ 0x61, 0x6d, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0xb3, 0x01, 0x52, 0x65, 0x67,
+ 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x20, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
+ 0x20, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x6e,
+ 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x73, 0x74,
+ 0x72, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x68,
+ 0x79, 0x70, 0x68, 0x65, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72,
+ 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x20, 0x62, 0x75, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61,
+ 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x6c,
+ 0x61, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x2e, 0x20, 0x54,
+ 0x68, 0x65, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x77,
+ 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65,
+ 0x64, 0x20, 0x74, 0x6f, 0x20, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x20, 0x63, 0x61, 0x73, 0x65, 0x2e,
+ 0x1a, 0x53, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x20, 0x3e, 0x20, 0x30,
+ 0x20, 0x3f, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28,
+ 0x27, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x3f, 0x3a,
+ 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2a, 0x5b, 0x61,
+ 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x24, 0x27, 0x29, 0x20, 0x3a,
+ 0x20, 0x74, 0x72, 0x75, 0x65, 0xc8, 0x01, 0x00, 0x72, 0x03, 0x18, 0xfd, 0x01, 0x52, 0x04, 0x6e,
+ 0x61, 0x6d, 0x65, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18,
+ 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d,
+ 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x08,
+ 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x54, 0x0a, 0x18, 0x6d, 0x65, 0x74, 0x61,
+ 0x64, 0x61, 0x74, 0x61, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x65, 0x68, 0x61,
+ 0x76, 0x69, 0x6f, 0x72, 0x18, 0x65, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x6d,
+ 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x55, 0x70, 0x64, 0x61,
+ 0x74, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x16, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
+ 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x22, 0x5a,
+ 0x0a, 0x20, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72,
+ 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x12, 0x36, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01,
+ 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, 0x22, 0x3b, 0x0a, 0x1f, 0x44, 0x65,
+ 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65,
+ 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a,
+ 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03,
+ 0xb0, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x5a, 0x0a, 0x20, 0x44, 0x65, 0x6c, 0x65, 0x74,
+ 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75,
+ 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x08, 0x72,
+ 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 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, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75,
- 0x72, 0x63, 0x65, 0x73, 0x12, 0x34, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63,
- 0x79, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a,
- 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x89, 0x04, 0x0a, 0x1f, 0x55,
- 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52,
- 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18,
- 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72,
- 0x03, 0xb0, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0xc0, 0x02, 0x0a, 0x04, 0x6e, 0x61, 0x6d,
- 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0xab, 0x02, 0xba, 0x48, 0xa7, 0x02, 0xba, 0x01,
- 0x9b, 0x02, 0x0a, 0x0e, 0x72, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x6d,
- 0x61, 0x74, 0x12, 0xb3, 0x01, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x20,
- 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x4e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75,
- 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, 0x75,
- 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x61, 0x6c,
- 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e, 0x73, 0x20, 0x61,
- 0x6e, 0x64, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x20, 0x62,
- 0x75, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69,
- 0x72, 0x73, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72,
- 0x61, 0x63, 0x74, 0x65, 0x72, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65,
- 0x64, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x6e,
- 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x6c, 0x6f, 0x77,
- 0x65, 0x72, 0x20, 0x63, 0x61, 0x73, 0x65, 0x2e, 0x1a, 0x53, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x74,
- 0x68, 0x69, 0x73, 0x29, 0x20, 0x3e, 0x20, 0x30, 0x20, 0x3f, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e,
- 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d,
- 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x3f, 0x3a, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30,
- 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2a, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39,
- 0x5d, 0x29, 0x3f, 0x24, 0x27, 0x29, 0x20, 0x3a, 0x20, 0x74, 0x72, 0x75, 0x65, 0xc8, 0x01, 0x00,
- 0x72, 0x03, 0x18, 0xfd, 0x01, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x33, 0x0a, 0x08, 0x6d,
- 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e,
- 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d,
- 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
- 0x12, 0x54, 0x0a, 0x18, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x75, 0x70, 0x64,
- 0x61, 0x74, 0x65, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x18, 0x65, 0x20, 0x01,
- 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61,
- 0x64, 0x61, 0x74, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x16,
- 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x65,
- 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x22, 0x5a, 0x0a, 0x20, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
+ 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75,
+ 0x72, 0x63, 0x65, 0x22, 0xad, 0x04, 0x0a, 0x14, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x74,
+ 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x27, 0x0a, 0x09,
+ 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42,
+ 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x08, 0x61, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0xb2, 0x02, 0x0a, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x8e, 0x02, 0xba, 0x48,
+ 0x8a, 0x02, 0xba, 0x01, 0x81, 0x02, 0x0a, 0x12, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e,
+ 0x61, 0x6d, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0xad, 0x01, 0x41, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65,
+ 0x20, 0x61, 0x6e, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63,
+ 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e,
+ 0x67, 0x20, 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x75, 0x6e,
+ 0x64, 0x65, 0x72, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x20, 0x62, 0x75, 0x74, 0x20, 0x6e, 0x6f,
+ 0x74, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x6f,
+ 0x72, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72,
+ 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x61, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65,
+ 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x6c,
+ 0x6f, 0x77, 0x65, 0x72, 0x20, 0x63, 0x61, 0x73, 0x65, 0x2e, 0x1a, 0x3b, 0x74, 0x68, 0x69, 0x73,
+ 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41,
+ 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x3f, 0x3a, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a,
+ 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2a, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d,
+ 0x39, 0x5d, 0x29, 0x3f, 0x24, 0x27, 0x29, 0x72, 0x03, 0x18, 0xfd, 0x01, 0x48, 0x00, 0x52, 0x0a,
+ 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x12, 0x61, 0x74,
+ 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x69, 0x64,
+ 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01,
+ 0x48, 0x01, 0x52, 0x10, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c,
+ 0x75, 0x65, 0x49, 0x64, 0x12, 0x3c, 0x0a, 0x13, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
+ 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28,
+ 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x10, 0x01, 0x88, 0x01, 0x01, 0x48, 0x01, 0x52,
+ 0x11, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46,
+ 0x71, 0x6e, 0x42, 0x1a, 0x0a, 0x11, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x65,
+ 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x05, 0xba, 0x48, 0x02, 0x08, 0x01, 0x42, 0x23,
+ 0x0a, 0x1a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x05, 0xba, 0x48,
+ 0x02, 0x08, 0x01, 0x22, 0xa0, 0x04, 0x0a, 0x24, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65,
+ 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
+ 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x0b,
+ 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x73,
+ 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0xad, 0x02, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x96, 0x02, 0xba, 0x48, 0x92, 0x02, 0xba, 0x01,
+ 0x86, 0x02, 0x0a, 0x0f, 0x72, 0x72, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x6f, 0x72,
+ 0x6d, 0x61, 0x74, 0x12, 0xb5, 0x01, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64,
+ 0x20, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20,
+ 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61,
+ 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2c, 0x20,
+ 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e, 0x73,
+ 0x20, 0x61, 0x6e, 0x64, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73,
+ 0x20, 0x62, 0x75, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20,
+ 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x63, 0x68,
+ 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x73, 0x74, 0x6f,
+ 0x72, 0x65, 0x64, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62,
+ 0x65, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20,
+ 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x20, 0x63, 0x61, 0x73, 0x65, 0x2e, 0x1a, 0x3b, 0x74, 0x68, 0x69,
+ 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5e, 0x5b, 0x61, 0x2d, 0x7a,
+ 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x3f, 0x3a, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d,
+ 0x5a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2a, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30,
+ 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x24, 0x27, 0x29, 0xc8, 0x01, 0x01, 0x72, 0x03, 0x18, 0xfd, 0x01,
+ 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x68, 0x0a, 0x17, 0x61, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75,
+ 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63,
+ 0x79, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x72, 0x65, 0x73, 0x6f,
+ 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x72,
+ 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x61, 0x63, 0x74, 0x69,
+ 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65,
+ 0x73, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74,
+ 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x6d, 0x65,
+ 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x5e, 0x0a, 0x25, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72,
- 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x08, 0x72, 0x65,
- 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 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, 0x22, 0x3b, 0x0a, 0x1f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x67, 0x69,
- 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65,
- 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22,
- 0x5a, 0x0a, 0x20, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65,
- 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f,
- 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18,
- 0x01, 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, 0x22, 0xad, 0x04, 0x0a, 0x14,
- 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56,
- 0x61, 0x6c, 0x75, 0x65, 0x12, 0x27, 0x0a, 0x09, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69,
- 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01,
- 0x01, 0x48, 0x00, 0x52, 0x08, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0xb2, 0x02,
- 0x0a, 0x0b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x09, 0x42, 0x8e, 0x02, 0xba, 0x48, 0x8a, 0x02, 0xba, 0x01, 0x81, 0x02, 0x0a, 0x12,
- 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x6d,
- 0x61, 0x74, 0x12, 0xad, 0x01, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6e, 0x61, 0x6d, 0x65,
- 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x6c, 0x70, 0x68,
- 0x61, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2c,
- 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e,
- 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x73, 0x63, 0x6f, 0x72, 0x65,
- 0x73, 0x20, 0x62, 0x75, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65,
- 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x63,
- 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x73, 0x74,
- 0x6f, 0x72, 0x65, 0x64, 0x20, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6e, 0x61, 0x6d, 0x65,
- 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69,
- 0x7a, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x20, 0x63, 0x61, 0x73,
- 0x65, 0x2e, 0x1a, 0x3b, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73,
- 0x28, 0x27, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28, 0x3f,
- 0x3a, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2a, 0x5b,
- 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x24, 0x27, 0x29, 0x72,
- 0x03, 0x18, 0xfd, 0x01, 0x48, 0x00, 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61,
- 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x12, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f,
- 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08,
- 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x48, 0x01, 0x52, 0x10, 0x61, 0x74, 0x74, 0x72,
- 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x49, 0x64, 0x12, 0x3c, 0x0a, 0x13,
- 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f,
- 0x66, 0x71, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05,
- 0x10, 0x01, 0x88, 0x01, 0x01, 0x48, 0x01, 0x52, 0x11, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
- 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x46, 0x71, 0x6e, 0x42, 0x1a, 0x0a, 0x11, 0x61, 0x63,
- 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12,
- 0x05, 0xba, 0x48, 0x02, 0x08, 0x01, 0x42, 0x23, 0x0a, 0x1a, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62,
- 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69,
- 0x66, 0x69, 0x65, 0x72, 0x12, 0x05, 0xba, 0x48, 0x02, 0x08, 0x01, 0x22, 0xa0, 0x04, 0x0a, 0x24,
- 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64,
- 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
- 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03,
- 0xb0, 0x01, 0x01, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12,
- 0xad, 0x02, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42,
- 0x96, 0x02, 0xba, 0x48, 0x92, 0x02, 0xba, 0x01, 0x86, 0x02, 0x0a, 0x0f, 0x72, 0x72, 0x5f, 0x76,
- 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0xb5, 0x01, 0x52, 0x65,
- 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x20, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63,
- 0x65, 0x20, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20,
- 0x61, 0x6e, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x20,
- 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67,
- 0x20, 0x68, 0x79, 0x70, 0x68, 0x65, 0x6e, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x75, 0x6e, 0x64,
- 0x65, 0x72, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x20, 0x62, 0x75, 0x74, 0x20, 0x6e, 0x6f, 0x74,
- 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x6f, 0x72,
- 0x20, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x61, 0x63, 0x74, 0x65, 0x72, 0x2e,
- 0x20, 0x54, 0x68, 0x65, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x64, 0x20, 0x76, 0x61, 0x6c, 0x75,
- 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c,
- 0x69, 0x7a, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x20, 0x63, 0x61,
- 0x73, 0x65, 0x2e, 0x1a, 0x3b, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65,
- 0x73, 0x28, 0x27, 0x5e, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x28,
- 0x3f, 0x3a, 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5f, 0x2d, 0x5d, 0x2a,
- 0x5b, 0x61, 0x2d, 0x7a, 0x41, 0x2d, 0x5a, 0x30, 0x2d, 0x39, 0x5d, 0x29, 0x3f, 0x24, 0x27, 0x29,
- 0xc8, 0x01, 0x01, 0x72, 0x03, 0x18, 0xfd, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12,
- 0x68, 0x0a, 0x17, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62,
- 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b,
- 0x32, 0x30, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74,
- 0x65, 0x72, 0x65, 0x64, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x41, 0x63,
- 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c,
- 0x75, 0x65, 0x52, 0x15, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62,
- 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74,
- 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f,
- 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x75, 0x74,
- 0x61, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x5e,
- 0x0a, 0x25, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72,
+ 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
+ 0x35, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 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,
- 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
- 0x18, 0x01, 0x20, 0x01, 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, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x74,
- 0x0a, 0x21, 0x47, 0x65, 0x74, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52,
- 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75,
- 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42,
- 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x48, 0x00, 0x52, 0x02, 0x69, 0x64, 0x12,
- 0x1e, 0x0a, 0x03, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48,
- 0x07, 0x72, 0x05, 0x10, 0x01, 0x88, 0x01, 0x01, 0x48, 0x00, 0x52, 0x03, 0x66, 0x71, 0x6e, 0x42,
- 0x13, 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x05, 0xba,
- 0x48, 0x02, 0x08, 0x01, 0x22, 0x5b, 0x0a, 0x22, 0x47, 0x65, 0x74, 0x52, 0x65, 0x67, 0x69, 0x73,
+ 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x74, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x52, 0x65, 0x67,
+ 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56,
+ 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x02, 0x69,
+ 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01,
+ 0x01, 0x48, 0x00, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1e, 0x0a, 0x03, 0x66, 0x71, 0x6e, 0x18, 0x02,
+ 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x10, 0x01, 0x88, 0x01, 0x01,
+ 0x48, 0x00, 0x52, 0x03, 0x66, 0x71, 0x6e, 0x42, 0x13, 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74,
+ 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x05, 0xba, 0x48, 0x02, 0x08, 0x01, 0x22, 0x5b, 0x0a, 0x22,
+ 0x47, 0x65, 0x74, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73,
+ 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
+ 0x73, 0x65, 0x12, 0x35, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 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, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x05, 0x76, 0x61,
- 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 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, 0x05, 0x76, 0x61, 0x6c, 0x75,
- 0x65, 0x22, 0x53, 0x0a, 0x28, 0x47, 0x65, 0x74, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72,
- 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73,
- 0x42, 0x79, 0x46, 0x51, 0x4e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a,
- 0x04, 0x66, 0x71, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x42, 0x13, 0xba, 0x48, 0x10,
- 0x92, 0x01, 0x0d, 0x08, 0x01, 0x18, 0x01, 0x22, 0x07, 0x72, 0x05, 0x10, 0x01, 0x88, 0x01, 0x01,
- 0x52, 0x04, 0x66, 0x71, 0x6e, 0x73, 0x22, 0x88, 0x02, 0x0a, 0x29, 0x47, 0x65, 0x74, 0x52, 0x65,
- 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
- 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x79, 0x46, 0x51, 0x4e, 0x73, 0x52, 0x65, 0x73, 0x70,
- 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7a, 0x0a, 0x0d, 0x66, 0x71, 0x6e, 0x5f, 0x76, 0x61, 0x6c, 0x75,
- 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x56, 0x2e, 0x70, 0x6f,
- 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x72,
- 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x67, 0x69,
- 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x61,
- 0x6c, 0x75, 0x65, 0x73, 0x42, 0x79, 0x46, 0x51, 0x4e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x2e, 0x46, 0x71, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x45, 0x6e,
- 0x74, 0x72, 0x79, 0x52, 0x0b, 0x66, 0x71, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70,
- 0x1a, 0x5f, 0x0a, 0x10, 0x46, 0x71, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x45,
- 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x35, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
- 0x02, 0x20, 0x01, 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, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,
- 0x01, 0x22, 0xb2, 0x02, 0x0a, 0x23, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74,
- 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75,
- 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0xd5, 0x01, 0x0a, 0x0b, 0x72, 0x65,
- 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42,
- 0xb3, 0x01, 0xba, 0x48, 0xaf, 0x01, 0xba, 0x01, 0xab, 0x01, 0x0a, 0x14, 0x6f, 0x70, 0x74, 0x69,
- 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74,
- 0x12, 0x23, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64,
- 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64,
- 0x20, 0x55, 0x55, 0x49, 0x44, 0x1a, 0x6e, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x74, 0x68, 0x69, 0x73,
- 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d,
- 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41,
- 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d,
- 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46,
- 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d,
- 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b,
- 0x31, 0x32, 0x7d, 0x27, 0x29, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49,
- 0x64, 0x12, 0x33, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18,
- 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50,
- 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69,
- 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x95, 0x01, 0x0a, 0x24, 0x4c, 0x69, 0x73, 0x74, 0x52,
+ 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x53, 0x0a, 0x28, 0x47, 0x65, 0x74,
+ 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72,
+ 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x79, 0x46, 0x51, 0x4e, 0x73, 0x52, 0x65,
+ 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x27, 0x0a, 0x04, 0x66, 0x71, 0x6e, 0x73, 0x18, 0x01, 0x20,
+ 0x03, 0x28, 0x09, 0x42, 0x13, 0xba, 0x48, 0x10, 0x92, 0x01, 0x0d, 0x08, 0x01, 0x18, 0x01, 0x22,
+ 0x07, 0x72, 0x05, 0x10, 0x01, 0x88, 0x01, 0x01, 0x52, 0x04, 0x66, 0x71, 0x6e, 0x73, 0x22, 0x88,
+ 0x02, 0x0a, 0x29, 0x47, 0x65, 0x74, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64,
+ 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x79,
+ 0x46, 0x51, 0x4e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7a, 0x0a, 0x0d,
+ 0x66, 0x71, 0x6e, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x18, 0x01, 0x20,
+ 0x03, 0x28, 0x0b, 0x32, 0x56, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x72, 0x65, 0x67,
+ 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73,
+ 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65,
+ 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x42, 0x79, 0x46, 0x51,
+ 0x4e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x46, 0x71, 0x6e, 0x56, 0x61,
+ 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x66, 0x71, 0x6e,
+ 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x1a, 0x5f, 0x0a, 0x10, 0x46, 0x71, 0x6e, 0x56,
+ 0x61, 0x6c, 0x75, 0x65, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
+ 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x35,
+ 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 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, 0x05,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xda, 0x02, 0x0a, 0x23, 0x4c, 0x69,
+ 0x73, 0x74, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f,
+ 0x75, 0x72, 0x63, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x12, 0xd5, 0x01, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69,
+ 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0xb3, 0x01, 0xba, 0x48, 0xaf, 0x01, 0xba, 0x01,
+ 0xab, 0x01, 0x0a, 0x14, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x75, 0x69,
+ 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x23, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
+ 0x61, 0x6c, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65,
+ 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x55, 0x55, 0x49, 0x44, 0x1a, 0x6e, 0x73,
+ 0x69, 0x7a, 0x65, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x7c,
+ 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27,
+ 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b,
+ 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30,
+ 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d,
+ 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39,
+ 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x27, 0x29, 0x52, 0x0a, 0x72,
+ 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x64, 0x12, 0x33, 0x0a, 0x0a, 0x70, 0x61, 0x67,
+ 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e,
+ 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
+ 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26,
+ 0x0a, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e,
+ 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x06,
+ 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x22, 0x95, 0x01, 0x0a, 0x24, 0x4c, 0x69, 0x73, 0x74, 0x52,
0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63,
0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
0x37, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32,
@@ -2140,9 +2163,10 @@ var file_policy_registeredresources_registered_resources_proto_goTypes = []inter
(*policy.RegisteredResource)(nil), // 27: policy.RegisteredResource
(policy.SortDirection)(0), // 28: policy.SortDirection
(*policy.PageRequest)(nil), // 29: policy.PageRequest
- (*policy.PageResponse)(nil), // 30: policy.PageResponse
- (common.MetadataUpdateEnum)(0), // 31: common.MetadataUpdateEnum
- (*policy.RegisteredResourceValue)(nil), // 32: policy.RegisteredResourceValue
+ (*policy.Search)(nil), // 30: policy.Search
+ (*policy.PageResponse)(nil), // 31: policy.PageResponse
+ (common.MetadataUpdateEnum)(0), // 32: common.MetadataUpdateEnum
+ (*policy.RegisteredResourceValue)(nil), // 33: policy.RegisteredResourceValue
}
var file_policy_registeredresources_registered_resources_proto_depIdxs = []int32{
26, // 0: policy.registeredresources.CreateRegisteredResourceRequest.metadata:type_name -> common.MetadataMutable
@@ -2152,53 +2176,55 @@ var file_policy_registeredresources_registered_resources_proto_depIdxs = []int32
28, // 4: policy.registeredresources.RegisteredResourcesSort.direction:type_name -> policy.SortDirection
29, // 5: policy.registeredresources.ListRegisteredResourcesRequest.pagination:type_name -> policy.PageRequest
5, // 6: policy.registeredresources.ListRegisteredResourcesRequest.sort:type_name -> policy.registeredresources.RegisteredResourcesSort
- 27, // 7: policy.registeredresources.ListRegisteredResourcesResponse.resources:type_name -> policy.RegisteredResource
- 30, // 8: policy.registeredresources.ListRegisteredResourcesResponse.pagination:type_name -> policy.PageResponse
- 26, // 9: policy.registeredresources.UpdateRegisteredResourceRequest.metadata:type_name -> common.MetadataMutable
- 31, // 10: policy.registeredresources.UpdateRegisteredResourceRequest.metadata_update_behavior:type_name -> common.MetadataUpdateEnum
- 27, // 11: policy.registeredresources.UpdateRegisteredResourceResponse.resource:type_name -> policy.RegisteredResource
- 27, // 12: policy.registeredresources.DeleteRegisteredResourceResponse.resource:type_name -> policy.RegisteredResource
- 12, // 13: policy.registeredresources.CreateRegisteredResourceValueRequest.action_attribute_values:type_name -> policy.registeredresources.ActionAttributeValue
- 26, // 14: policy.registeredresources.CreateRegisteredResourceValueRequest.metadata:type_name -> common.MetadataMutable
- 32, // 15: policy.registeredresources.CreateRegisteredResourceValueResponse.value:type_name -> policy.RegisteredResourceValue
- 32, // 16: policy.registeredresources.GetRegisteredResourceValueResponse.value:type_name -> policy.RegisteredResourceValue
- 25, // 17: policy.registeredresources.GetRegisteredResourceValuesByFQNsResponse.fqn_value_map:type_name -> policy.registeredresources.GetRegisteredResourceValuesByFQNsResponse.FqnValueMapEntry
- 29, // 18: policy.registeredresources.ListRegisteredResourceValuesRequest.pagination:type_name -> policy.PageRequest
- 32, // 19: policy.registeredresources.ListRegisteredResourceValuesResponse.values:type_name -> policy.RegisteredResourceValue
- 30, // 20: policy.registeredresources.ListRegisteredResourceValuesResponse.pagination:type_name -> policy.PageResponse
- 12, // 21: policy.registeredresources.UpdateRegisteredResourceValueRequest.action_attribute_values:type_name -> policy.registeredresources.ActionAttributeValue
- 26, // 22: policy.registeredresources.UpdateRegisteredResourceValueRequest.metadata:type_name -> common.MetadataMutable
- 31, // 23: policy.registeredresources.UpdateRegisteredResourceValueRequest.metadata_update_behavior:type_name -> common.MetadataUpdateEnum
- 32, // 24: policy.registeredresources.UpdateRegisteredResourceValueResponse.value:type_name -> policy.RegisteredResourceValue
- 32, // 25: policy.registeredresources.DeleteRegisteredResourceValueResponse.value:type_name -> policy.RegisteredResourceValue
- 32, // 26: policy.registeredresources.GetRegisteredResourceValuesByFQNsResponse.FqnValueMapEntry.value:type_name -> policy.RegisteredResourceValue
- 1, // 27: policy.registeredresources.RegisteredResourcesService.CreateRegisteredResource:input_type -> policy.registeredresources.CreateRegisteredResourceRequest
- 3, // 28: policy.registeredresources.RegisteredResourcesService.GetRegisteredResource:input_type -> policy.registeredresources.GetRegisteredResourceRequest
- 6, // 29: policy.registeredresources.RegisteredResourcesService.ListRegisteredResources:input_type -> policy.registeredresources.ListRegisteredResourcesRequest
- 8, // 30: policy.registeredresources.RegisteredResourcesService.UpdateRegisteredResource:input_type -> policy.registeredresources.UpdateRegisteredResourceRequest
- 10, // 31: policy.registeredresources.RegisteredResourcesService.DeleteRegisteredResource:input_type -> policy.registeredresources.DeleteRegisteredResourceRequest
- 13, // 32: policy.registeredresources.RegisteredResourcesService.CreateRegisteredResourceValue:input_type -> policy.registeredresources.CreateRegisteredResourceValueRequest
- 15, // 33: policy.registeredresources.RegisteredResourcesService.GetRegisteredResourceValue:input_type -> policy.registeredresources.GetRegisteredResourceValueRequest
- 17, // 34: policy.registeredresources.RegisteredResourcesService.GetRegisteredResourceValuesByFQNs:input_type -> policy.registeredresources.GetRegisteredResourceValuesByFQNsRequest
- 19, // 35: policy.registeredresources.RegisteredResourcesService.ListRegisteredResourceValues:input_type -> policy.registeredresources.ListRegisteredResourceValuesRequest
- 21, // 36: policy.registeredresources.RegisteredResourcesService.UpdateRegisteredResourceValue:input_type -> policy.registeredresources.UpdateRegisteredResourceValueRequest
- 23, // 37: policy.registeredresources.RegisteredResourcesService.DeleteRegisteredResourceValue:input_type -> policy.registeredresources.DeleteRegisteredResourceValueRequest
- 2, // 38: policy.registeredresources.RegisteredResourcesService.CreateRegisteredResource:output_type -> policy.registeredresources.CreateRegisteredResourceResponse
- 4, // 39: policy.registeredresources.RegisteredResourcesService.GetRegisteredResource:output_type -> policy.registeredresources.GetRegisteredResourceResponse
- 7, // 40: policy.registeredresources.RegisteredResourcesService.ListRegisteredResources:output_type -> policy.registeredresources.ListRegisteredResourcesResponse
- 9, // 41: policy.registeredresources.RegisteredResourcesService.UpdateRegisteredResource:output_type -> policy.registeredresources.UpdateRegisteredResourceResponse
- 11, // 42: policy.registeredresources.RegisteredResourcesService.DeleteRegisteredResource:output_type -> policy.registeredresources.DeleteRegisteredResourceResponse
- 14, // 43: policy.registeredresources.RegisteredResourcesService.CreateRegisteredResourceValue:output_type -> policy.registeredresources.CreateRegisteredResourceValueResponse
- 16, // 44: policy.registeredresources.RegisteredResourcesService.GetRegisteredResourceValue:output_type -> policy.registeredresources.GetRegisteredResourceValueResponse
- 18, // 45: policy.registeredresources.RegisteredResourcesService.GetRegisteredResourceValuesByFQNs:output_type -> policy.registeredresources.GetRegisteredResourceValuesByFQNsResponse
- 20, // 46: policy.registeredresources.RegisteredResourcesService.ListRegisteredResourceValues:output_type -> policy.registeredresources.ListRegisteredResourceValuesResponse
- 22, // 47: policy.registeredresources.RegisteredResourcesService.UpdateRegisteredResourceValue:output_type -> policy.registeredresources.UpdateRegisteredResourceValueResponse
- 24, // 48: policy.registeredresources.RegisteredResourcesService.DeleteRegisteredResourceValue:output_type -> policy.registeredresources.DeleteRegisteredResourceValueResponse
- 38, // [38:49] is the sub-list for method output_type
- 27, // [27:38] 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
+ 30, // 7: policy.registeredresources.ListRegisteredResourcesRequest.search:type_name -> policy.Search
+ 27, // 8: policy.registeredresources.ListRegisteredResourcesResponse.resources:type_name -> policy.RegisteredResource
+ 31, // 9: policy.registeredresources.ListRegisteredResourcesResponse.pagination:type_name -> policy.PageResponse
+ 26, // 10: policy.registeredresources.UpdateRegisteredResourceRequest.metadata:type_name -> common.MetadataMutable
+ 32, // 11: policy.registeredresources.UpdateRegisteredResourceRequest.metadata_update_behavior:type_name -> common.MetadataUpdateEnum
+ 27, // 12: policy.registeredresources.UpdateRegisteredResourceResponse.resource:type_name -> policy.RegisteredResource
+ 27, // 13: policy.registeredresources.DeleteRegisteredResourceResponse.resource:type_name -> policy.RegisteredResource
+ 12, // 14: policy.registeredresources.CreateRegisteredResourceValueRequest.action_attribute_values:type_name -> policy.registeredresources.ActionAttributeValue
+ 26, // 15: policy.registeredresources.CreateRegisteredResourceValueRequest.metadata:type_name -> common.MetadataMutable
+ 33, // 16: policy.registeredresources.CreateRegisteredResourceValueResponse.value:type_name -> policy.RegisteredResourceValue
+ 33, // 17: policy.registeredresources.GetRegisteredResourceValueResponse.value:type_name -> policy.RegisteredResourceValue
+ 25, // 18: policy.registeredresources.GetRegisteredResourceValuesByFQNsResponse.fqn_value_map:type_name -> policy.registeredresources.GetRegisteredResourceValuesByFQNsResponse.FqnValueMapEntry
+ 29, // 19: policy.registeredresources.ListRegisteredResourceValuesRequest.pagination:type_name -> policy.PageRequest
+ 30, // 20: policy.registeredresources.ListRegisteredResourceValuesRequest.search:type_name -> policy.Search
+ 33, // 21: policy.registeredresources.ListRegisteredResourceValuesResponse.values:type_name -> policy.RegisteredResourceValue
+ 31, // 22: policy.registeredresources.ListRegisteredResourceValuesResponse.pagination:type_name -> policy.PageResponse
+ 12, // 23: policy.registeredresources.UpdateRegisteredResourceValueRequest.action_attribute_values:type_name -> policy.registeredresources.ActionAttributeValue
+ 26, // 24: policy.registeredresources.UpdateRegisteredResourceValueRequest.metadata:type_name -> common.MetadataMutable
+ 32, // 25: policy.registeredresources.UpdateRegisteredResourceValueRequest.metadata_update_behavior:type_name -> common.MetadataUpdateEnum
+ 33, // 26: policy.registeredresources.UpdateRegisteredResourceValueResponse.value:type_name -> policy.RegisteredResourceValue
+ 33, // 27: policy.registeredresources.DeleteRegisteredResourceValueResponse.value:type_name -> policy.RegisteredResourceValue
+ 33, // 28: policy.registeredresources.GetRegisteredResourceValuesByFQNsResponse.FqnValueMapEntry.value:type_name -> policy.RegisteredResourceValue
+ 1, // 29: policy.registeredresources.RegisteredResourcesService.CreateRegisteredResource:input_type -> policy.registeredresources.CreateRegisteredResourceRequest
+ 3, // 30: policy.registeredresources.RegisteredResourcesService.GetRegisteredResource:input_type -> policy.registeredresources.GetRegisteredResourceRequest
+ 6, // 31: policy.registeredresources.RegisteredResourcesService.ListRegisteredResources:input_type -> policy.registeredresources.ListRegisteredResourcesRequest
+ 8, // 32: policy.registeredresources.RegisteredResourcesService.UpdateRegisteredResource:input_type -> policy.registeredresources.UpdateRegisteredResourceRequest
+ 10, // 33: policy.registeredresources.RegisteredResourcesService.DeleteRegisteredResource:input_type -> policy.registeredresources.DeleteRegisteredResourceRequest
+ 13, // 34: policy.registeredresources.RegisteredResourcesService.CreateRegisteredResourceValue:input_type -> policy.registeredresources.CreateRegisteredResourceValueRequest
+ 15, // 35: policy.registeredresources.RegisteredResourcesService.GetRegisteredResourceValue:input_type -> policy.registeredresources.GetRegisteredResourceValueRequest
+ 17, // 36: policy.registeredresources.RegisteredResourcesService.GetRegisteredResourceValuesByFQNs:input_type -> policy.registeredresources.GetRegisteredResourceValuesByFQNsRequest
+ 19, // 37: policy.registeredresources.RegisteredResourcesService.ListRegisteredResourceValues:input_type -> policy.registeredresources.ListRegisteredResourceValuesRequest
+ 21, // 38: policy.registeredresources.RegisteredResourcesService.UpdateRegisteredResourceValue:input_type -> policy.registeredresources.UpdateRegisteredResourceValueRequest
+ 23, // 39: policy.registeredresources.RegisteredResourcesService.DeleteRegisteredResourceValue:input_type -> policy.registeredresources.DeleteRegisteredResourceValueRequest
+ 2, // 40: policy.registeredresources.RegisteredResourcesService.CreateRegisteredResource:output_type -> policy.registeredresources.CreateRegisteredResourceResponse
+ 4, // 41: policy.registeredresources.RegisteredResourcesService.GetRegisteredResource:output_type -> policy.registeredresources.GetRegisteredResourceResponse
+ 7, // 42: policy.registeredresources.RegisteredResourcesService.ListRegisteredResources:output_type -> policy.registeredresources.ListRegisteredResourcesResponse
+ 9, // 43: policy.registeredresources.RegisteredResourcesService.UpdateRegisteredResource:output_type -> policy.registeredresources.UpdateRegisteredResourceResponse
+ 11, // 44: policy.registeredresources.RegisteredResourcesService.DeleteRegisteredResource:output_type -> policy.registeredresources.DeleteRegisteredResourceResponse
+ 14, // 45: policy.registeredresources.RegisteredResourcesService.CreateRegisteredResourceValue:output_type -> policy.registeredresources.CreateRegisteredResourceValueResponse
+ 16, // 46: policy.registeredresources.RegisteredResourcesService.GetRegisteredResourceValue:output_type -> policy.registeredresources.GetRegisteredResourceValueResponse
+ 18, // 47: policy.registeredresources.RegisteredResourcesService.GetRegisteredResourceValuesByFQNs:output_type -> policy.registeredresources.GetRegisteredResourceValuesByFQNsResponse
+ 20, // 48: policy.registeredresources.RegisteredResourcesService.ListRegisteredResourceValues:output_type -> policy.registeredresources.ListRegisteredResourceValuesResponse
+ 22, // 49: policy.registeredresources.RegisteredResourcesService.UpdateRegisteredResourceValue:output_type -> policy.registeredresources.UpdateRegisteredResourceValueResponse
+ 24, // 50: policy.registeredresources.RegisteredResourcesService.DeleteRegisteredResourceValue:output_type -> policy.registeredresources.DeleteRegisteredResourceValueResponse
+ 40, // [40:51] is the sub-list for method output_type
+ 29, // [29:40] is the sub-list for method input_type
+ 29, // [29:29] is the sub-list for extension type_name
+ 29, // [29:29] is the sub-list for extension extendee
+ 0, // [0:29] is the sub-list for field type_name
}
func init() { file_policy_registeredresources_registered_resources_proto_init() }
diff --git a/protocol/go/policy/selectors.pb.go b/protocol/go/policy/selectors.pb.go
index 0449d03658..085d7a6cc7 100644
--- a/protocol/go/policy/selectors.pb.go
+++ b/protocol/go/policy/selectors.pb.go
@@ -259,6 +259,53 @@ func (x *AttributeValueSelector) GetWithAttribute() *AttributeValueSelector_Attr
return nil
}
+type Search struct {
+ state protoimpl.MessageState
+ sizeCache protoimpl.SizeCache
+ unknownFields protoimpl.UnknownFields
+
+ Term string `protobuf:"bytes,1,opt,name=term,proto3" json:"term,omitempty"`
+}
+
+func (x *Search) Reset() {
+ *x = Search{}
+ if protoimpl.UnsafeEnabled {
+ mi := &file_policy_selectors_proto_msgTypes[3]
+ ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+ ms.StoreMessageInfo(mi)
+ }
+}
+
+func (x *Search) String() string {
+ return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Search) ProtoMessage() {}
+
+func (x *Search) ProtoReflect() protoreflect.Message {
+ mi := &file_policy_selectors_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 Search.ProtoReflect.Descriptor instead.
+func (*Search) Descriptor() ([]byte, []int) {
+ return file_policy_selectors_proto_rawDescGZIP(), []int{3}
+}
+
+func (x *Search) GetTerm() string {
+ if x != nil {
+ return x.Term
+ }
+ return ""
+}
+
type PageRequest struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -276,7 +323,7 @@ type PageRequest struct {
func (x *PageRequest) Reset() {
*x = PageRequest{}
if protoimpl.UnsafeEnabled {
- mi := &file_policy_selectors_proto_msgTypes[3]
+ mi := &file_policy_selectors_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -289,7 +336,7 @@ func (x *PageRequest) String() string {
func (*PageRequest) ProtoMessage() {}
func (x *PageRequest) ProtoReflect() protoreflect.Message {
- mi := &file_policy_selectors_proto_msgTypes[3]
+ mi := &file_policy_selectors_proto_msgTypes[4]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -302,7 +349,7 @@ func (x *PageRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use PageRequest.ProtoReflect.Descriptor instead.
func (*PageRequest) Descriptor() ([]byte, []int) {
- return file_policy_selectors_proto_rawDescGZIP(), []int{3}
+ return file_policy_selectors_proto_rawDescGZIP(), []int{4}
}
func (x *PageRequest) GetLimit() int32 {
@@ -336,7 +383,7 @@ type PageResponse struct {
func (x *PageResponse) Reset() {
*x = PageResponse{}
if protoimpl.UnsafeEnabled {
- mi := &file_policy_selectors_proto_msgTypes[4]
+ mi := &file_policy_selectors_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -349,7 +396,7 @@ func (x *PageResponse) String() string {
func (*PageResponse) ProtoMessage() {}
func (x *PageResponse) ProtoReflect() protoreflect.Message {
- mi := &file_policy_selectors_proto_msgTypes[4]
+ mi := &file_policy_selectors_proto_msgTypes[5]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -362,7 +409,7 @@ func (x *PageResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use PageResponse.ProtoReflect.Descriptor instead.
func (*PageResponse) Descriptor() ([]byte, []int) {
- return file_policy_selectors_proto_rawDescGZIP(), []int{4}
+ return file_policy_selectors_proto_rawDescGZIP(), []int{5}
}
func (x *PageResponse) GetCurrentOffset() int32 {
@@ -399,7 +446,7 @@ type AttributeNamespaceSelector_AttributeSelector struct {
func (x *AttributeNamespaceSelector_AttributeSelector) Reset() {
*x = AttributeNamespaceSelector_AttributeSelector{}
if protoimpl.UnsafeEnabled {
- mi := &file_policy_selectors_proto_msgTypes[5]
+ mi := &file_policy_selectors_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -412,7 +459,7 @@ func (x *AttributeNamespaceSelector_AttributeSelector) String() string {
func (*AttributeNamespaceSelector_AttributeSelector) ProtoMessage() {}
func (x *AttributeNamespaceSelector_AttributeSelector) ProtoReflect() protoreflect.Message {
- mi := &file_policy_selectors_proto_msgTypes[5]
+ mi := &file_policy_selectors_proto_msgTypes[6]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -456,7 +503,7 @@ type AttributeNamespaceSelector_AttributeSelector_ValueSelector struct {
func (x *AttributeNamespaceSelector_AttributeSelector_ValueSelector) Reset() {
*x = AttributeNamespaceSelector_AttributeSelector_ValueSelector{}
if protoimpl.UnsafeEnabled {
- mi := &file_policy_selectors_proto_msgTypes[6]
+ mi := &file_policy_selectors_proto_msgTypes[7]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -469,7 +516,7 @@ func (x *AttributeNamespaceSelector_AttributeSelector_ValueSelector) String() st
func (*AttributeNamespaceSelector_AttributeSelector_ValueSelector) ProtoMessage() {}
func (x *AttributeNamespaceSelector_AttributeSelector_ValueSelector) ProtoReflect() protoreflect.Message {
- mi := &file_policy_selectors_proto_msgTypes[6]
+ mi := &file_policy_selectors_proto_msgTypes[7]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -515,7 +562,7 @@ type AttributeDefinitionSelector_NamespaceSelector struct {
func (x *AttributeDefinitionSelector_NamespaceSelector) Reset() {
*x = AttributeDefinitionSelector_NamespaceSelector{}
if protoimpl.UnsafeEnabled {
- mi := &file_policy_selectors_proto_msgTypes[7]
+ mi := &file_policy_selectors_proto_msgTypes[8]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -528,7 +575,7 @@ func (x *AttributeDefinitionSelector_NamespaceSelector) String() string {
func (*AttributeDefinitionSelector_NamespaceSelector) ProtoMessage() {}
func (x *AttributeDefinitionSelector_NamespaceSelector) ProtoReflect() protoreflect.Message {
- mi := &file_policy_selectors_proto_msgTypes[7]
+ mi := &file_policy_selectors_proto_msgTypes[8]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -558,7 +605,7 @@ type AttributeDefinitionSelector_ValueSelector struct {
func (x *AttributeDefinitionSelector_ValueSelector) Reset() {
*x = AttributeDefinitionSelector_ValueSelector{}
if protoimpl.UnsafeEnabled {
- mi := &file_policy_selectors_proto_msgTypes[8]
+ mi := &file_policy_selectors_proto_msgTypes[9]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -571,7 +618,7 @@ func (x *AttributeDefinitionSelector_ValueSelector) String() string {
func (*AttributeDefinitionSelector_ValueSelector) ProtoMessage() {}
func (x *AttributeDefinitionSelector_ValueSelector) ProtoReflect() protoreflect.Message {
- mi := &file_policy_selectors_proto_msgTypes[8]
+ mi := &file_policy_selectors_proto_msgTypes[9]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -621,7 +668,7 @@ type AttributeValueSelector_AttributeSelector struct {
func (x *AttributeValueSelector_AttributeSelector) Reset() {
*x = AttributeValueSelector_AttributeSelector{}
if protoimpl.UnsafeEnabled {
- mi := &file_policy_selectors_proto_msgTypes[9]
+ mi := &file_policy_selectors_proto_msgTypes[10]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -634,7 +681,7 @@ func (x *AttributeValueSelector_AttributeSelector) String() string {
func (*AttributeValueSelector_AttributeSelector) ProtoMessage() {}
func (x *AttributeValueSelector_AttributeSelector) ProtoReflect() protoreflect.Message {
- mi := &file_policy_selectors_proto_msgTypes[9]
+ mi := &file_policy_selectors_proto_msgTypes[10]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -673,7 +720,7 @@ type AttributeValueSelector_AttributeSelector_NamespaceSelector struct {
func (x *AttributeValueSelector_AttributeSelector_NamespaceSelector) Reset() {
*x = AttributeValueSelector_AttributeSelector_NamespaceSelector{}
if protoimpl.UnsafeEnabled {
- mi := &file_policy_selectors_proto_msgTypes[10]
+ mi := &file_policy_selectors_proto_msgTypes[11]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -686,7 +733,7 @@ func (x *AttributeValueSelector_AttributeSelector_NamespaceSelector) String() st
func (*AttributeValueSelector_AttributeSelector_NamespaceSelector) ProtoMessage() {}
func (x *AttributeValueSelector_AttributeSelector_NamespaceSelector) ProtoReflect() protoreflect.Message {
- mi := &file_policy_selectors_proto_msgTypes[10]
+ mi := &file_policy_selectors_proto_msgTypes[11]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -792,33 +839,35 @@ var file_policy_selectors_proto_rawDesc = []byte{
0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65,
0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x0d, 0x77, 0x69, 0x74, 0x68, 0x4e, 0x61, 0x6d, 0x65,
0x73, 0x70, 0x61, 0x63, 0x65, 0x1a, 0x13, 0x0a, 0x11, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61,
- 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x22, 0x3b, 0x0a, 0x0b, 0x50, 0x61,
- 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d,
- 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12,
- 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52,
- 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x6c, 0x0a, 0x0c, 0x50, 0x61, 0x67, 0x65, 0x52,
- 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x75, 0x72, 0x72, 0x65,
- 0x6e, 0x74, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
- 0x0d, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x1f,
- 0x0a, 0x0b, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12,
- 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05,
- 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x2a, 0x60, 0x0a, 0x0d, 0x53, 0x6f, 0x72, 0x74, 0x44, 0x69, 0x72,
- 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x1a, 0x53, 0x4f, 0x52, 0x54, 0x5f, 0x44,
- 0x49, 0x52, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49,
- 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x4f, 0x52, 0x54, 0x5f, 0x44,
- 0x49, 0x52, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x41, 0x53, 0x43, 0x10, 0x01, 0x12, 0x17,
- 0x0a, 0x13, 0x53, 0x4f, 0x52, 0x54, 0x5f, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e,
- 0x5f, 0x44, 0x45, 0x53, 0x43, 0x10, 0x02, 0x42, 0x84, 0x01, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x2e,
- 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x42, 0x0e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72,
- 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,
+ 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x22, 0x1c, 0x0a, 0x06, 0x53, 0x65,
+ 0x61, 0x72, 0x63, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x72, 0x6d, 0x22, 0x3b, 0x0a, 0x0b, 0x50, 0x61, 0x67, 0x65,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74,
+ 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x16, 0x0a,
+ 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6f,
+ 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x6c, 0x0a, 0x0c, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73,
+ 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74,
+ 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x63,
+ 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x1f, 0x0a, 0x0b,
+ 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28,
+ 0x05, 0x52, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a,
+ 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74, 0x6f,
+ 0x74, 0x61, 0x6c, 0x2a, 0x60, 0x0a, 0x0d, 0x53, 0x6f, 0x72, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x1a, 0x53, 0x4f, 0x52, 0x54, 0x5f, 0x44, 0x49, 0x52,
+ 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49,
+ 0x45, 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x4f, 0x52, 0x54, 0x5f, 0x44, 0x49, 0x52,
+ 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x41, 0x53, 0x43, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13,
+ 0x53, 0x4f, 0x52, 0x54, 0x5f, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44,
+ 0x45, 0x53, 0x43, 0x10, 0x02, 0x42, 0x84, 0x01, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x6f,
+ 0x6c, 0x69, 0x63, 0x79, 0x42, 0x0e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 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 (
@@ -834,28 +883,29 @@ func file_policy_selectors_proto_rawDescGZIP() []byte {
}
var file_policy_selectors_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
-var file_policy_selectors_proto_msgTypes = make([]protoimpl.MessageInfo, 11)
+var file_policy_selectors_proto_msgTypes = make([]protoimpl.MessageInfo, 12)
var file_policy_selectors_proto_goTypes = []interface{}{
- (SortDirection)(0), // 0: policy.SortDirection
- (*AttributeNamespaceSelector)(nil), // 1: policy.AttributeNamespaceSelector
- (*AttributeDefinitionSelector)(nil), // 2: policy.AttributeDefinitionSelector
- (*AttributeValueSelector)(nil), // 3: policy.AttributeValueSelector
- (*PageRequest)(nil), // 4: policy.PageRequest
- (*PageResponse)(nil), // 5: policy.PageResponse
- (*AttributeNamespaceSelector_AttributeSelector)(nil), // 6: policy.AttributeNamespaceSelector.AttributeSelector
- (*AttributeNamespaceSelector_AttributeSelector_ValueSelector)(nil), // 7: policy.AttributeNamespaceSelector.AttributeSelector.ValueSelector
- (*AttributeDefinitionSelector_NamespaceSelector)(nil), // 8: policy.AttributeDefinitionSelector.NamespaceSelector
- (*AttributeDefinitionSelector_ValueSelector)(nil), // 9: policy.AttributeDefinitionSelector.ValueSelector
- (*AttributeValueSelector_AttributeSelector)(nil), // 10: policy.AttributeValueSelector.AttributeSelector
- (*AttributeValueSelector_AttributeSelector_NamespaceSelector)(nil), // 11: policy.AttributeValueSelector.AttributeSelector.NamespaceSelector
+ (SortDirection)(0), // 0: policy.SortDirection
+ (*AttributeNamespaceSelector)(nil), // 1: policy.AttributeNamespaceSelector
+ (*AttributeDefinitionSelector)(nil), // 2: policy.AttributeDefinitionSelector
+ (*AttributeValueSelector)(nil), // 3: policy.AttributeValueSelector
+ (*Search)(nil), // 4: policy.Search
+ (*PageRequest)(nil), // 5: policy.PageRequest
+ (*PageResponse)(nil), // 6: policy.PageResponse
+ (*AttributeNamespaceSelector_AttributeSelector)(nil), // 7: policy.AttributeNamespaceSelector.AttributeSelector
+ (*AttributeNamespaceSelector_AttributeSelector_ValueSelector)(nil), // 8: policy.AttributeNamespaceSelector.AttributeSelector.ValueSelector
+ (*AttributeDefinitionSelector_NamespaceSelector)(nil), // 9: policy.AttributeDefinitionSelector.NamespaceSelector
+ (*AttributeDefinitionSelector_ValueSelector)(nil), // 10: policy.AttributeDefinitionSelector.ValueSelector
+ (*AttributeValueSelector_AttributeSelector)(nil), // 11: policy.AttributeValueSelector.AttributeSelector
+ (*AttributeValueSelector_AttributeSelector_NamespaceSelector)(nil), // 12: policy.AttributeValueSelector.AttributeSelector.NamespaceSelector
}
var file_policy_selectors_proto_depIdxs = []int32{
- 6, // 0: policy.AttributeNamespaceSelector.with_attributes:type_name -> policy.AttributeNamespaceSelector.AttributeSelector
- 8, // 1: policy.AttributeDefinitionSelector.with_namespace:type_name -> policy.AttributeDefinitionSelector.NamespaceSelector
- 9, // 2: policy.AttributeDefinitionSelector.with_values:type_name -> policy.AttributeDefinitionSelector.ValueSelector
- 10, // 3: policy.AttributeValueSelector.with_attribute:type_name -> policy.AttributeValueSelector.AttributeSelector
- 7, // 4: policy.AttributeNamespaceSelector.AttributeSelector.with_values:type_name -> policy.AttributeNamespaceSelector.AttributeSelector.ValueSelector
- 11, // 5: policy.AttributeValueSelector.AttributeSelector.with_namespace:type_name -> policy.AttributeValueSelector.AttributeSelector.NamespaceSelector
+ 7, // 0: policy.AttributeNamespaceSelector.with_attributes:type_name -> policy.AttributeNamespaceSelector.AttributeSelector
+ 9, // 1: policy.AttributeDefinitionSelector.with_namespace:type_name -> policy.AttributeDefinitionSelector.NamespaceSelector
+ 10, // 2: policy.AttributeDefinitionSelector.with_values:type_name -> policy.AttributeDefinitionSelector.ValueSelector
+ 11, // 3: policy.AttributeValueSelector.with_attribute:type_name -> policy.AttributeValueSelector.AttributeSelector
+ 8, // 4: policy.AttributeNamespaceSelector.AttributeSelector.with_values:type_name -> policy.AttributeNamespaceSelector.AttributeSelector.ValueSelector
+ 12, // 5: policy.AttributeValueSelector.AttributeSelector.with_namespace:type_name -> policy.AttributeValueSelector.AttributeSelector.NamespaceSelector
6, // [6:6] is the sub-list for method output_type
6, // [6:6] is the sub-list for method input_type
6, // [6:6] is the sub-list for extension type_name
@@ -906,7 +956,7 @@ func file_policy_selectors_proto_init() {
}
}
file_policy_selectors_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*PageRequest); i {
+ switch v := v.(*Search); i {
case 0:
return &v.state
case 1:
@@ -918,7 +968,7 @@ func file_policy_selectors_proto_init() {
}
}
file_policy_selectors_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*PageResponse); i {
+ switch v := v.(*PageRequest); i {
case 0:
return &v.state
case 1:
@@ -930,7 +980,7 @@ func file_policy_selectors_proto_init() {
}
}
file_policy_selectors_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*AttributeNamespaceSelector_AttributeSelector); i {
+ switch v := v.(*PageResponse); i {
case 0:
return &v.state
case 1:
@@ -942,7 +992,7 @@ func file_policy_selectors_proto_init() {
}
}
file_policy_selectors_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*AttributeNamespaceSelector_AttributeSelector_ValueSelector); i {
+ switch v := v.(*AttributeNamespaceSelector_AttributeSelector); i {
case 0:
return &v.state
case 1:
@@ -954,7 +1004,7 @@ func file_policy_selectors_proto_init() {
}
}
file_policy_selectors_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*AttributeDefinitionSelector_NamespaceSelector); i {
+ switch v := v.(*AttributeNamespaceSelector_AttributeSelector_ValueSelector); i {
case 0:
return &v.state
case 1:
@@ -966,7 +1016,7 @@ func file_policy_selectors_proto_init() {
}
}
file_policy_selectors_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*AttributeDefinitionSelector_ValueSelector); i {
+ switch v := v.(*AttributeDefinitionSelector_NamespaceSelector); i {
case 0:
return &v.state
case 1:
@@ -978,7 +1028,7 @@ func file_policy_selectors_proto_init() {
}
}
file_policy_selectors_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
- switch v := v.(*AttributeValueSelector_AttributeSelector); i {
+ switch v := v.(*AttributeDefinitionSelector_ValueSelector); i {
case 0:
return &v.state
case 1:
@@ -990,6 +1040,18 @@ func file_policy_selectors_proto_init() {
}
}
file_policy_selectors_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
+ switch v := v.(*AttributeValueSelector_AttributeSelector); i {
+ case 0:
+ return &v.state
+ case 1:
+ return &v.sizeCache
+ case 2:
+ return &v.unknownFields
+ default:
+ return nil
+ }
+ }
+ file_policy_selectors_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*AttributeValueSelector_AttributeSelector_NamespaceSelector); i {
case 0:
return &v.state
@@ -1008,7 +1070,7 @@ func file_policy_selectors_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_policy_selectors_proto_rawDesc,
NumEnums: 1,
- NumMessages: 11,
+ NumMessages: 12,
NumExtensions: 0,
NumServices: 0,
},
diff --git a/protocol/go/policy/subjectmapping/subject_mapping.pb.go b/protocol/go/policy/subjectmapping/subject_mapping.pb.go
index 3c1bf6c2f1..e21c8fcb56 100644
--- a/protocol/go/policy/subjectmapping/subject_mapping.pb.go
+++ b/protocol/go/policy/subjectmapping/subject_mapping.pb.go
@@ -382,6 +382,8 @@ type ListSubjectMappingsRequest struct {
// - field UNSPECIFIED defaults to created_at with the specified direction
// - both UNSPECIFIED or sort omitted defaults to created_at DESC
Sort []*SubjectMappingsSort `protobuf:"bytes,11,rep,name=sort,proto3" json:"sort,omitempty"`
+ // Optional
+ Search *policy.Search `protobuf:"bytes,12,opt,name=search,proto3" json:"search,omitempty"`
}
func (x *ListSubjectMappingsRequest) Reset() {
@@ -444,6 +446,13 @@ func (x *ListSubjectMappingsRequest) GetSort() []*SubjectMappingsSort {
return nil
}
+func (x *ListSubjectMappingsRequest) GetSearch() *policy.Search {
+ if x != nil {
+ return x.Search
+ }
+ return nil
+}
+
type ListSubjectMappingsResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -1054,6 +1063,8 @@ type ListSubjectConditionSetsRequest struct {
// - field UNSPECIFIED defaults to created_at with the specified direction
// - both UNSPECIFIED or sort omitted defaults to created_at DESC
Sort []*SubjectConditionSetsSort `protobuf:"bytes,11,rep,name=sort,proto3" json:"sort,omitempty"`
+ // Optional
+ Search *policy.Search `protobuf:"bytes,12,opt,name=search,proto3" json:"search,omitempty"`
}
func (x *ListSubjectConditionSetsRequest) Reset() {
@@ -1116,6 +1127,13 @@ func (x *ListSubjectConditionSetsRequest) GetSort() []*SubjectConditionSetsSort
return nil
}
+func (x *ListSubjectConditionSetsRequest) GetSearch() *policy.Search {
+ if x != nil {
+ return x.Search
+ }
+ return nil
+}
+
type ListSubjectConditionSetsResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
@@ -1691,7 +1709,7 @@ var file_policy_subjectmapping_subject_mapping_proto_rawDesc = []byte{
0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
0x2e, 0x53, 0x6f, 0x72, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x08,
0xba, 0x48, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74,
- 0x69, 0x6f, 0x6e, 0x22, 0x9f, 0x02, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x75, 0x62, 0x6a,
+ 0x69, 0x6f, 0x6e, 0x22, 0xc7, 0x02, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x75, 0x62, 0x6a,
0x65, 0x63, 0x74, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x12, 0x2b, 0x0a, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f,
0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0,
@@ -1706,177 +1724,182 @@ var file_policy_subjectmapping_subject_mapping_proto_rawDesc = []byte{
0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x73, 0x75, 0x62,
0x6a, 0x65, 0x63, 0x74, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x53, 0x75, 0x62, 0x6a,
0x65, 0x63, 0x74, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x73, 0x53, 0x6f, 0x72, 0x74, 0x42,
- 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, 0x02, 0x10, 0x01, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x3a,
- 0x24, 0xba, 0x48, 0x21, 0x22, 0x1f, 0x0a, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63,
- 0x65, 0x5f, 0x69, 0x64, 0x0a, 0x0d, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f,
- 0x66, 0x71, 0x6e, 0x10, 0x00, 0x22, 0x96, 0x01, 0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x75,
- 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73,
- 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x10, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74,
- 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32,
- 0x16, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74,
- 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x0f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74,
- 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x34, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69,
- 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70,
- 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xb7,
- 0x06, 0x0a, 0x1b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74,
- 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36,
- 0x0a, 0x12, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75,
- 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72,
- 0x03, 0xb0, 0x01, 0x01, 0x52, 0x10, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56,
- 0x61, 0x6c, 0x75, 0x65, 0x49, 0x64, 0x12, 0xb8, 0x01, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f,
- 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63,
- 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x8d, 0x01, 0xba, 0x48, 0x89, 0x01, 0xba,
- 0x01, 0x80, 0x01, 0x0a, 0x1b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65,
- 0x5f, 0x6f, 0x72, 0x5f, 0x69, 0x64, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79,
- 0x12, 0x2f, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x72,
- 0x20, 0x49, 0x44, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20,
- 0x65, 0x6d, 0x70, 0x74, 0x79, 0x20, 0x69, 0x66, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65,
- 0x64, 0x1a, 0x30, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x61, 0x6c, 0x6c, 0x28, 0x69, 0x74, 0x65, 0x6d,
- 0x2c, 0x20, 0x69, 0x74, 0x65, 0x6d, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x27,
- 0x27, 0x20, 0x7c, 0x7c, 0x20, 0x69, 0x74, 0x65, 0x6d, 0x2e, 0x69, 0x64, 0x20, 0x21, 0x3d, 0x20,
- 0x27, 0x27, 0x29, 0x92, 0x01, 0x02, 0x08, 0x01, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e,
- 0x73, 0x12, 0xfe, 0x01, 0x0a, 0x21, 0x65, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x73,
- 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e,
- 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0xb3, 0x01,
- 0xba, 0x48, 0xaf, 0x01, 0xba, 0x01, 0xab, 0x01, 0x0a, 0x14, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
- 0x61, 0x6c, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x23,
- 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x6d,
- 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x55,
- 0x55, 0x49, 0x44, 0x1a, 0x6e, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x20,
- 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74,
- 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46,
- 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d,
- 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b,
- 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34,
- 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x31, 0x32,
- 0x7d, 0x27, 0x29, 0x52, 0x1d, 0x65, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x75, 0x62,
- 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74,
- 0x49, 0x64, 0x12, 0x6b, 0x0a, 0x19, 0x6e, 0x65, 0x77, 0x5f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63,
- 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x74, 0x18,
- 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x73,
- 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x53, 0x75,
- 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65,
- 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x16, 0x6e, 0x65, 0x77, 0x53, 0x75, 0x62, 0x6a,
- 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x12,
- 0x2b, 0x0a, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18,
- 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52,
- 0x0b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x0d,
- 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x06, 0x20,
- 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x10, 0x01, 0x88, 0x01, 0x01, 0x52,
- 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x46, 0x71, 0x6e, 0x12, 0x33, 0x0a,
- 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
- 0x61, 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61,
- 0x74, 0x61, 0x3a, 0x24, 0xba, 0x48, 0x21, 0x22, 0x1f, 0x0a, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73,
- 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x0a, 0x0d, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61,
- 0x63, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x10, 0x00, 0x22, 0x5f, 0x0a, 0x1c, 0x43, 0x72, 0x65, 0x61,
- 0x74, 0x65, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x0f, 0x73, 0x75, 0x62, 0x6a,
- 0x65, 0x63, 0x74, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x53, 0x75, 0x62, 0x6a, 0x65,
- 0x63, 0x74, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x0e, 0x73, 0x75, 0x62, 0x6a, 0x65,
- 0x63, 0x74, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x22, 0xfc, 0x04, 0x0a, 0x1b, 0x55, 0x70,
- 0x64, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x61, 0x70, 0x70, 0x69,
- 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52,
- 0x02, 0x69, 0x64, 0x12, 0xed, 0x01, 0x0a, 0x18, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f,
- 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64,
- 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0xb3, 0x01, 0xba, 0x48, 0xaf, 0x01, 0xba, 0x01, 0xab,
- 0x01, 0x0a, 0x14, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x75, 0x69, 0x64,
- 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x23, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61,
- 0x6c, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20,
- 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x55, 0x55, 0x49, 0x44, 0x1a, 0x6e, 0x73, 0x69,
- 0x7a, 0x65, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x7c, 0x7c,
- 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5b,
- 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30,
- 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d,
+ 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, 0x02, 0x10, 0x01, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x12,
+ 0x26, 0x0a, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52,
+ 0x06, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x3a, 0x24, 0xba, 0x48, 0x21, 0x22, 0x1f, 0x0a, 0x0c,
+ 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x0a, 0x0d, 0x6e, 0x61,
+ 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x10, 0x00, 0x22, 0x96, 0x01,
+ 0x0a, 0x1b, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x61, 0x70,
+ 0x70, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a,
+ 0x10, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67,
+ 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
+ 0x2e, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52,
+ 0x0f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x73,
+ 0x12, 0x34, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x61,
+ 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69,
+ 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xb7, 0x06, 0x0a, 0x1b, 0x43, 0x72, 0x65, 0x61, 0x74,
+ 0x65, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52,
+ 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x36, 0x0a, 0x12, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62,
+ 0x75, 0x74, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x10, 0x61, 0x74,
+ 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x49, 0x64, 0x12, 0xb8,
+ 0x01, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b,
+ 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x42, 0x8d, 0x01, 0xba, 0x48, 0x89, 0x01, 0xba, 0x01, 0x80, 0x01, 0x0a, 0x1b, 0x61, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x6f, 0x72, 0x5f, 0x69, 0x64, 0x5f, 0x6e,
+ 0x6f, 0x74, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x2f, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x49, 0x44, 0x20, 0x6d, 0x75, 0x73, 0x74,
+ 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x20, 0x69, 0x66,
+ 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x30, 0x74, 0x68, 0x69, 0x73, 0x2e,
+ 0x61, 0x6c, 0x6c, 0x28, 0x69, 0x74, 0x65, 0x6d, 0x2c, 0x20, 0x69, 0x74, 0x65, 0x6d, 0x2e, 0x6e,
+ 0x61, 0x6d, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x27, 0x27, 0x20, 0x7c, 0x7c, 0x20, 0x69, 0x74, 0x65,
+ 0x6d, 0x2e, 0x69, 0x64, 0x20, 0x21, 0x3d, 0x20, 0x27, 0x27, 0x29, 0x92, 0x01, 0x02, 0x08, 0x01,
+ 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0xfe, 0x01, 0x0a, 0x21, 0x65, 0x78,
+ 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x63,
+ 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18,
+ 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0xb3, 0x01, 0xba, 0x48, 0xaf, 0x01, 0xba, 0x01, 0xab, 0x01,
+ 0x0a, 0x14, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x5f,
+ 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x23, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c,
+ 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61,
+ 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x55, 0x55, 0x49, 0x44, 0x1a, 0x6e, 0x73, 0x69, 0x7a,
+ 0x65, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x7c, 0x7c, 0x20,
+ 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5b, 0x30,
+ 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d,
0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39,
0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61,
- 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x27, 0x29, 0x52, 0x15, 0x73, 0x75,
+ 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d,
+ 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x31, 0x32, 0x7d, 0x27, 0x29, 0x52, 0x1d, 0x65, 0x78, 0x69,
+ 0x73, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x64,
+ 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x49, 0x64, 0x12, 0x6b, 0x0a, 0x19, 0x6e, 0x65,
+ 0x77, 0x5f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74,
+ 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e,
+ 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x6d, 0x61,
+ 0x70, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e,
+ 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52,
+ 0x16, 0x6e, 0x65, 0x77, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69,
+ 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x12, 0x2b, 0x0a, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba,
+ 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x0b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x0d, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63,
+ 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07,
+ 0x72, 0x05, 0x10, 0x01, 0x88, 0x01, 0x01, 0x52, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x46, 0x71, 0x6e, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
+ 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e,
+ 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65,
+ 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x3a, 0x24, 0xba, 0x48, 0x21, 0x22,
+ 0x1f, 0x0a, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x0a,
+ 0x0d, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x10, 0x00,
+ 0x22, 0x5f, 0x0a, 0x1c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63,
+ 0x74, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x12, 0x3f, 0x0a, 0x0f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6d, 0x61, 0x70, 0x70,
+ 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x6f, 0x6c, 0x69,
+ 0x63, 0x79, 0x2e, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e,
+ 0x67, 0x52, 0x0e, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e,
+ 0x67, 0x22, 0xfc, 0x04, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x6a,
+ 0x65, 0x63, 0x74, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+ 0x74, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba,
+ 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x12, 0xed, 0x01, 0x0a, 0x18,
+ 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f,
+ 0x6e, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0xb3,
+ 0x01, 0xba, 0x48, 0xaf, 0x01, 0xba, 0x01, 0xab, 0x01, 0x0a, 0x14, 0x6f, 0x70, 0x74, 0x69, 0x6f,
+ 0x6e, 0x61, 0x6c, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12,
+ 0x23, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x20,
+ 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20,
+ 0x55, 0x55, 0x49, 0x44, 0x1a, 0x6e, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x74, 0x68, 0x69, 0x73, 0x29,
+ 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x6d, 0x61,
+ 0x74, 0x63, 0x68, 0x65, 0x73, 0x28, 0x27, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d,
+ 0x46, 0x5d, 0x7b, 0x38, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46,
+ 0x5d, 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d,
+ 0x7b, 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b,
+ 0x34, 0x7d, 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x66, 0x41, 0x2d, 0x46, 0x5d, 0x7b, 0x31,
+ 0x32, 0x7d, 0x27, 0x29, 0x52, 0x15, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e,
+ 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x49, 0x64, 0x12, 0xc7, 0x01, 0x0a, 0x07,
+ 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e,
+ 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x9c, 0x01,
+ 0xba, 0x48, 0x98, 0x01, 0xba, 0x01, 0x94, 0x01, 0x0a, 0x1b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e,
+ 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x6f, 0x72, 0x5f, 0x69, 0x64, 0x5f, 0x6e, 0x6f, 0x74, 0x5f,
+ 0x65, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x2f, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6e, 0x61,
+ 0x6d, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x49, 0x44, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6e, 0x6f,
+ 0x74, 0x20, 0x62, 0x65, 0x20, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x20, 0x69, 0x66, 0x20, 0x70, 0x72,
+ 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x44, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x73, 0x69, 0x7a,
+ 0x65, 0x28, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73,
+ 0x2e, 0x61, 0x6c, 0x6c, 0x28, 0x69, 0x74, 0x65, 0x6d, 0x2c, 0x20, 0x69, 0x74, 0x65, 0x6d, 0x2e,
+ 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x27, 0x27, 0x20, 0x7c, 0x7c, 0x20, 0x69, 0x74,
+ 0x65, 0x6d, 0x2e, 0x69, 0x64, 0x20, 0x21, 0x3d, 0x20, 0x27, 0x27, 0x29, 0x52, 0x07, 0x61, 0x63,
+ 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
+ 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e,
+ 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65,
+ 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x54, 0x0a, 0x18, 0x6d, 0x65,
+ 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x65,
+ 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x18, 0x65, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x63,
+ 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x55, 0x70,
+ 0x64, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x16, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61,
+ 0x74, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72,
+ 0x22, 0x5f, 0x0a, 0x1c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63,
+ 0x74, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
+ 0x12, 0x3f, 0x0a, 0x0f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6d, 0x61, 0x70, 0x70,
+ 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x6f, 0x6c, 0x69,
+ 0x63, 0x79, 0x2e, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e,
+ 0x67, 0x52, 0x0e, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e,
+ 0x67, 0x22, 0x37, 0x0a, 0x1b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x75, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+ 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48,
+ 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0x5f, 0x0a, 0x1c, 0x44, 0x65,
+ 0x6c, 0x65, 0x74, 0x65, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x61, 0x70, 0x70, 0x69,
+ 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x0f, 0x73, 0x75,
+ 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x53, 0x75, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x0e, 0x73, 0x75, 0x62,
+ 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x22, 0x39, 0x0a, 0x1d, 0x47,
+ 0x65, 0x74, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69,
+ 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x02,
+ 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0,
+ 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0xc9, 0x01, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x53, 0x75,
0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65,
- 0x74, 0x49, 0x64, 0x12, 0xc7, 0x01, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18,
- 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41,
- 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x9c, 0x01, 0xba, 0x48, 0x98, 0x01, 0xba, 0x01, 0x94, 0x01,
- 0x0a, 0x1b, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x6f, 0x72,
- 0x5f, 0x69, 0x64, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x2f, 0x41,
- 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x72, 0x20, 0x49, 0x44,
- 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, 0x65, 0x6d, 0x70,
- 0x74, 0x79, 0x20, 0x69, 0x66, 0x20, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x1a, 0x44,
- 0x74, 0x68, 0x69, 0x73, 0x2e, 0x73, 0x69, 0x7a, 0x65, 0x28, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30,
- 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x68, 0x69, 0x73, 0x2e, 0x61, 0x6c, 0x6c, 0x28, 0x69, 0x74, 0x65,
- 0x6d, 0x2c, 0x20, 0x69, 0x74, 0x65, 0x6d, 0x2e, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x21, 0x3d, 0x20,
- 0x27, 0x27, 0x20, 0x7c, 0x7c, 0x20, 0x69, 0x74, 0x65, 0x6d, 0x2e, 0x69, 0x64, 0x20, 0x21, 0x3d,
- 0x20, 0x27, 0x27, 0x29, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x33, 0x0a,
- 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74,
- 0x61, 0x4d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61,
- 0x74, 0x61, 0x12, 0x54, 0x0a, 0x18, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x75,
- 0x70, 0x64, 0x61, 0x74, 0x65, 0x5f, 0x62, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x18, 0x65,
- 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65,
- 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x75, 0x6d,
- 0x52, 0x16, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
- 0x42, 0x65, 0x68, 0x61, 0x76, 0x69, 0x6f, 0x72, 0x22, 0x5f, 0x0a, 0x1c, 0x55, 0x70, 0x64, 0x61,
- 0x74, 0x65, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67,
- 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x0f, 0x73, 0x75, 0x62, 0x6a,
- 0x65, 0x63, 0x74, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x53, 0x75, 0x62, 0x6a, 0x65,
- 0x63, 0x74, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x0e, 0x73, 0x75, 0x62, 0x6a, 0x65,
- 0x63, 0x74, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x22, 0x37, 0x0a, 0x1b, 0x44, 0x65, 0x6c,
- 0x65, 0x74, 0x65, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e,
- 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x02,
- 0x69, 0x64, 0x22, 0x5f, 0x0a, 0x1c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x75, 0x62, 0x6a,
- 0x65, 0x63, 0x74, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
- 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x0f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6d, 0x61,
- 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x6f,
- 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x61, 0x70, 0x70,
- 0x69, 0x6e, 0x67, 0x52, 0x0e, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x61, 0x70, 0x70,
- 0x69, 0x6e, 0x67, 0x22, 0x39, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63,
- 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x71,
- 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
- 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x02, 0x69, 0x64, 0x22, 0xc9,
- 0x01, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e,
- 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
- 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, 0x01, 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, 0x56, 0x0a, 0x1b, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64,
- 0x5f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67,
- 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
- 0x2e, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52,
- 0x19, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x53, 0x75, 0x62, 0x6a, 0x65,
- 0x63, 0x74, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x73, 0x22, 0xae, 0x01, 0x0a, 0x18, 0x53,
- 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53,
- 0x65, 0x74, 0x73, 0x53, 0x6f, 0x72, 0x74, 0x12, 0x53, 0x0a, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x33, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e,
- 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x53,
- 0x6f, 0x72, 0x74, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74,
- 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x73, 0x54, 0x79, 0x70, 0x65, 0x42, 0x08, 0xba, 0x48, 0x05,
- 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x3d, 0x0a, 0x09,
- 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32,
- 0x15, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x44, 0x69, 0x72,
- 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x08, 0xba, 0x48, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01,
- 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xa9, 0x02, 0x0a, 0x1f,
- 0x4c, 0x69, 0x73, 0x74, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69,
- 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
- 0x2b, 0x0a, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52,
- 0x0b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x0d,
- 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07, 0x72, 0x05, 0x10, 0x01, 0x88, 0x01, 0x01, 0x52,
- 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x46, 0x71, 0x6e, 0x12, 0x33, 0x0a,
- 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28,
- 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52,
- 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x12, 0x4d, 0x0a, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b,
- 0x32, 0x2f, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63,
- 0x74, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74,
- 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x73, 0x53, 0x6f, 0x72,
- 0x74, 0x42, 0x08, 0xba, 0x48, 0x05, 0x92, 0x01, 0x02, 0x10, 0x01, 0x52, 0x04, 0x73, 0x6f, 0x72,
- 0x74, 0x3a, 0x24, 0xba, 0x48, 0x21, 0x22, 0x1f, 0x0a, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70,
+ 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 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, 0x01, 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, 0x56, 0x0a, 0x1b, 0x61, 0x73,
+ 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74,
+ 0x5f, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32,
+ 0x16, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74,
+ 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x19, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61,
+ 0x74, 0x65, 0x64, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x61, 0x70, 0x70, 0x69, 0x6e,
+ 0x67, 0x73, 0x22, 0xae, 0x01, 0x0a, 0x18, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f,
+ 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x73, 0x53, 0x6f, 0x72, 0x74, 0x12,
+ 0x53, 0x0a, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x33,
+ 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x6d,
+ 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x53, 0x75, 0x62, 0x6a, 0x65,
+ 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x73, 0x54,
+ 0x79, 0x70, 0x65, 0x42, 0x08, 0xba, 0x48, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x66,
+ 0x69, 0x65, 0x6c, 0x64, 0x12, 0x3d, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f,
+ 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
+ 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x08,
+ 0xba, 0x48, 0x05, 0x82, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74,
+ 0x69, 0x6f, 0x6e, 0x22, 0xd1, 0x02, 0x0a, 0x1f, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x75, 0x62, 0x6a,
+ 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x73,
+ 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x08, 0xba,
+ 0x48, 0x05, 0x72, 0x03, 0xb0, 0x01, 0x01, 0x52, 0x0b, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x49, 0x64, 0x12, 0x2f, 0x0a, 0x0d, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63,
+ 0x65, 0x5f, 0x66, 0x71, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0a, 0xba, 0x48, 0x07,
+ 0x72, 0x05, 0x10, 0x01, 0x88, 0x01, 0x01, 0x52, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x46, 0x71, 0x6e, 0x12, 0x33, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74,
+ 0x69, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x6f, 0x6c, 0x69,
+ 0x63, 0x79, 0x2e, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x0a,
+ 0x70, 0x61, 0x67, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4d, 0x0a, 0x04, 0x73, 0x6f,
+ 0x72, 0x74, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63,
+ 0x79, 0x2e, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67,
+ 0x2e, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f,
+ 0x6e, 0x53, 0x65, 0x74, 0x73, 0x53, 0x6f, 0x72, 0x74, 0x42, 0x08, 0xba, 0x48, 0x05, 0x92, 0x01,
+ 0x02, 0x10, 0x01, 0x52, 0x04, 0x73, 0x6f, 0x72, 0x74, 0x12, 0x26, 0x0a, 0x06, 0x73, 0x65, 0x61,
+ 0x72, 0x63, 0x68, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x6f, 0x6c, 0x69,
+ 0x63, 0x79, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x06, 0x73, 0x65, 0x61, 0x72, 0x63,
+ 0x68, 0x3a, 0x24, 0xba, 0x48, 0x21, 0x22, 0x1f, 0x0a, 0x0c, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70,
0x61, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x0a, 0x0d, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63,
0x65, 0x5f, 0x66, 0x71, 0x6e, 0x10, 0x00, 0x22, 0xab, 0x01, 0x0a, 0x20, 0x4c, 0x69, 0x73, 0x74,
0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e,
@@ -2164,12 +2187,13 @@ var file_policy_subjectmapping_subject_mapping_proto_goTypes = []interface{}{
(*policy.SubjectMapping)(nil), // 30: policy.SubjectMapping
(policy.SortDirection)(0), // 31: policy.SortDirection
(*policy.PageRequest)(nil), // 32: policy.PageRequest
- (*policy.PageResponse)(nil), // 33: policy.PageResponse
- (*policy.Action)(nil), // 34: policy.Action
- (*common.MetadataMutable)(nil), // 35: common.MetadataMutable
- (common.MetadataUpdateEnum)(0), // 36: common.MetadataUpdateEnum
- (*policy.SubjectConditionSet)(nil), // 37: policy.SubjectConditionSet
- (*policy.SubjectSet)(nil), // 38: policy.SubjectSet
+ (*policy.Search)(nil), // 33: policy.Search
+ (*policy.PageResponse)(nil), // 34: policy.PageResponse
+ (*policy.Action)(nil), // 35: policy.Action
+ (*common.MetadataMutable)(nil), // 36: common.MetadataMutable
+ (common.MetadataUpdateEnum)(0), // 37: common.MetadataUpdateEnum
+ (*policy.SubjectConditionSet)(nil), // 38: policy.SubjectConditionSet
+ (*policy.SubjectSet)(nil), // 39: policy.SubjectSet
}
var file_policy_subjectmapping_subject_mapping_proto_depIdxs = []int32{
29, // 0: policy.subjectmapping.MatchSubjectMappingsRequest.subject_properties:type_name -> policy.SubjectProperty
@@ -2179,64 +2203,66 @@ var file_policy_subjectmapping_subject_mapping_proto_depIdxs = []int32{
31, // 4: policy.subjectmapping.SubjectMappingsSort.direction:type_name -> policy.SortDirection
32, // 5: policy.subjectmapping.ListSubjectMappingsRequest.pagination:type_name -> policy.PageRequest
6, // 6: policy.subjectmapping.ListSubjectMappingsRequest.sort:type_name -> policy.subjectmapping.SubjectMappingsSort
- 30, // 7: policy.subjectmapping.ListSubjectMappingsResponse.subject_mappings:type_name -> policy.SubjectMapping
- 33, // 8: policy.subjectmapping.ListSubjectMappingsResponse.pagination:type_name -> policy.PageResponse
- 34, // 9: policy.subjectmapping.CreateSubjectMappingRequest.actions:type_name -> policy.Action
- 20, // 10: policy.subjectmapping.CreateSubjectMappingRequest.new_subject_condition_set:type_name -> policy.subjectmapping.SubjectConditionSetCreate
- 35, // 11: policy.subjectmapping.CreateSubjectMappingRequest.metadata:type_name -> common.MetadataMutable
- 30, // 12: policy.subjectmapping.CreateSubjectMappingResponse.subject_mapping:type_name -> policy.SubjectMapping
- 34, // 13: policy.subjectmapping.UpdateSubjectMappingRequest.actions:type_name -> policy.Action
- 35, // 14: policy.subjectmapping.UpdateSubjectMappingRequest.metadata:type_name -> common.MetadataMutable
- 36, // 15: policy.subjectmapping.UpdateSubjectMappingRequest.metadata_update_behavior:type_name -> common.MetadataUpdateEnum
- 30, // 16: policy.subjectmapping.UpdateSubjectMappingResponse.subject_mapping:type_name -> policy.SubjectMapping
- 30, // 17: policy.subjectmapping.DeleteSubjectMappingResponse.subject_mapping:type_name -> policy.SubjectMapping
- 37, // 18: policy.subjectmapping.GetSubjectConditionSetResponse.subject_condition_set:type_name -> policy.SubjectConditionSet
- 30, // 19: policy.subjectmapping.GetSubjectConditionSetResponse.associated_subject_mappings:type_name -> policy.SubjectMapping
- 1, // 20: policy.subjectmapping.SubjectConditionSetsSort.field:type_name -> policy.subjectmapping.SortSubjectConditionSetsType
- 31, // 21: policy.subjectmapping.SubjectConditionSetsSort.direction:type_name -> policy.SortDirection
- 32, // 22: policy.subjectmapping.ListSubjectConditionSetsRequest.pagination:type_name -> policy.PageRequest
- 17, // 23: policy.subjectmapping.ListSubjectConditionSetsRequest.sort:type_name -> policy.subjectmapping.SubjectConditionSetsSort
- 37, // 24: policy.subjectmapping.ListSubjectConditionSetsResponse.subject_condition_sets:type_name -> policy.SubjectConditionSet
- 33, // 25: policy.subjectmapping.ListSubjectConditionSetsResponse.pagination:type_name -> policy.PageResponse
- 38, // 26: policy.subjectmapping.SubjectConditionSetCreate.subject_sets:type_name -> policy.SubjectSet
- 35, // 27: policy.subjectmapping.SubjectConditionSetCreate.metadata:type_name -> common.MetadataMutable
- 20, // 28: policy.subjectmapping.CreateSubjectConditionSetRequest.subject_condition_set:type_name -> policy.subjectmapping.SubjectConditionSetCreate
- 37, // 29: policy.subjectmapping.CreateSubjectConditionSetResponse.subject_condition_set:type_name -> policy.SubjectConditionSet
- 38, // 30: policy.subjectmapping.UpdateSubjectConditionSetRequest.subject_sets:type_name -> policy.SubjectSet
- 35, // 31: policy.subjectmapping.UpdateSubjectConditionSetRequest.metadata:type_name -> common.MetadataMutable
- 36, // 32: policy.subjectmapping.UpdateSubjectConditionSetRequest.metadata_update_behavior:type_name -> common.MetadataUpdateEnum
- 37, // 33: policy.subjectmapping.UpdateSubjectConditionSetResponse.subject_condition_set:type_name -> policy.SubjectConditionSet
- 37, // 34: policy.subjectmapping.DeleteSubjectConditionSetResponse.subject_condition_set:type_name -> policy.SubjectConditionSet
- 37, // 35: policy.subjectmapping.DeleteAllUnmappedSubjectConditionSetsResponse.subject_condition_sets:type_name -> policy.SubjectConditionSet
- 2, // 36: policy.subjectmapping.SubjectMappingService.MatchSubjectMappings:input_type -> policy.subjectmapping.MatchSubjectMappingsRequest
- 7, // 37: policy.subjectmapping.SubjectMappingService.ListSubjectMappings:input_type -> policy.subjectmapping.ListSubjectMappingsRequest
- 4, // 38: policy.subjectmapping.SubjectMappingService.GetSubjectMapping:input_type -> policy.subjectmapping.GetSubjectMappingRequest
- 9, // 39: policy.subjectmapping.SubjectMappingService.CreateSubjectMapping:input_type -> policy.subjectmapping.CreateSubjectMappingRequest
- 11, // 40: policy.subjectmapping.SubjectMappingService.UpdateSubjectMapping:input_type -> policy.subjectmapping.UpdateSubjectMappingRequest
- 13, // 41: policy.subjectmapping.SubjectMappingService.DeleteSubjectMapping:input_type -> policy.subjectmapping.DeleteSubjectMappingRequest
- 18, // 42: policy.subjectmapping.SubjectMappingService.ListSubjectConditionSets:input_type -> policy.subjectmapping.ListSubjectConditionSetsRequest
- 15, // 43: policy.subjectmapping.SubjectMappingService.GetSubjectConditionSet:input_type -> policy.subjectmapping.GetSubjectConditionSetRequest
- 21, // 44: policy.subjectmapping.SubjectMappingService.CreateSubjectConditionSet:input_type -> policy.subjectmapping.CreateSubjectConditionSetRequest
- 23, // 45: policy.subjectmapping.SubjectMappingService.UpdateSubjectConditionSet:input_type -> policy.subjectmapping.UpdateSubjectConditionSetRequest
- 25, // 46: policy.subjectmapping.SubjectMappingService.DeleteSubjectConditionSet:input_type -> policy.subjectmapping.DeleteSubjectConditionSetRequest
- 27, // 47: policy.subjectmapping.SubjectMappingService.DeleteAllUnmappedSubjectConditionSets:input_type -> policy.subjectmapping.DeleteAllUnmappedSubjectConditionSetsRequest
- 3, // 48: policy.subjectmapping.SubjectMappingService.MatchSubjectMappings:output_type -> policy.subjectmapping.MatchSubjectMappingsResponse
- 8, // 49: policy.subjectmapping.SubjectMappingService.ListSubjectMappings:output_type -> policy.subjectmapping.ListSubjectMappingsResponse
- 5, // 50: policy.subjectmapping.SubjectMappingService.GetSubjectMapping:output_type -> policy.subjectmapping.GetSubjectMappingResponse
- 10, // 51: policy.subjectmapping.SubjectMappingService.CreateSubjectMapping:output_type -> policy.subjectmapping.CreateSubjectMappingResponse
- 12, // 52: policy.subjectmapping.SubjectMappingService.UpdateSubjectMapping:output_type -> policy.subjectmapping.UpdateSubjectMappingResponse
- 14, // 53: policy.subjectmapping.SubjectMappingService.DeleteSubjectMapping:output_type -> policy.subjectmapping.DeleteSubjectMappingResponse
- 19, // 54: policy.subjectmapping.SubjectMappingService.ListSubjectConditionSets:output_type -> policy.subjectmapping.ListSubjectConditionSetsResponse
- 16, // 55: policy.subjectmapping.SubjectMappingService.GetSubjectConditionSet:output_type -> policy.subjectmapping.GetSubjectConditionSetResponse
- 22, // 56: policy.subjectmapping.SubjectMappingService.CreateSubjectConditionSet:output_type -> policy.subjectmapping.CreateSubjectConditionSetResponse
- 24, // 57: policy.subjectmapping.SubjectMappingService.UpdateSubjectConditionSet:output_type -> policy.subjectmapping.UpdateSubjectConditionSetResponse
- 26, // 58: policy.subjectmapping.SubjectMappingService.DeleteSubjectConditionSet:output_type -> policy.subjectmapping.DeleteSubjectConditionSetResponse
- 28, // 59: policy.subjectmapping.SubjectMappingService.DeleteAllUnmappedSubjectConditionSets:output_type -> policy.subjectmapping.DeleteAllUnmappedSubjectConditionSetsResponse
- 48, // [48:60] is the sub-list for method output_type
- 36, // [36:48] is the sub-list for method input_type
- 36, // [36:36] is the sub-list for extension type_name
- 36, // [36:36] is the sub-list for extension extendee
- 0, // [0:36] is the sub-list for field type_name
+ 33, // 7: policy.subjectmapping.ListSubjectMappingsRequest.search:type_name -> policy.Search
+ 30, // 8: policy.subjectmapping.ListSubjectMappingsResponse.subject_mappings:type_name -> policy.SubjectMapping
+ 34, // 9: policy.subjectmapping.ListSubjectMappingsResponse.pagination:type_name -> policy.PageResponse
+ 35, // 10: policy.subjectmapping.CreateSubjectMappingRequest.actions:type_name -> policy.Action
+ 20, // 11: policy.subjectmapping.CreateSubjectMappingRequest.new_subject_condition_set:type_name -> policy.subjectmapping.SubjectConditionSetCreate
+ 36, // 12: policy.subjectmapping.CreateSubjectMappingRequest.metadata:type_name -> common.MetadataMutable
+ 30, // 13: policy.subjectmapping.CreateSubjectMappingResponse.subject_mapping:type_name -> policy.SubjectMapping
+ 35, // 14: policy.subjectmapping.UpdateSubjectMappingRequest.actions:type_name -> policy.Action
+ 36, // 15: policy.subjectmapping.UpdateSubjectMappingRequest.metadata:type_name -> common.MetadataMutable
+ 37, // 16: policy.subjectmapping.UpdateSubjectMappingRequest.metadata_update_behavior:type_name -> common.MetadataUpdateEnum
+ 30, // 17: policy.subjectmapping.UpdateSubjectMappingResponse.subject_mapping:type_name -> policy.SubjectMapping
+ 30, // 18: policy.subjectmapping.DeleteSubjectMappingResponse.subject_mapping:type_name -> policy.SubjectMapping
+ 38, // 19: policy.subjectmapping.GetSubjectConditionSetResponse.subject_condition_set:type_name -> policy.SubjectConditionSet
+ 30, // 20: policy.subjectmapping.GetSubjectConditionSetResponse.associated_subject_mappings:type_name -> policy.SubjectMapping
+ 1, // 21: policy.subjectmapping.SubjectConditionSetsSort.field:type_name -> policy.subjectmapping.SortSubjectConditionSetsType
+ 31, // 22: policy.subjectmapping.SubjectConditionSetsSort.direction:type_name -> policy.SortDirection
+ 32, // 23: policy.subjectmapping.ListSubjectConditionSetsRequest.pagination:type_name -> policy.PageRequest
+ 17, // 24: policy.subjectmapping.ListSubjectConditionSetsRequest.sort:type_name -> policy.subjectmapping.SubjectConditionSetsSort
+ 33, // 25: policy.subjectmapping.ListSubjectConditionSetsRequest.search:type_name -> policy.Search
+ 38, // 26: policy.subjectmapping.ListSubjectConditionSetsResponse.subject_condition_sets:type_name -> policy.SubjectConditionSet
+ 34, // 27: policy.subjectmapping.ListSubjectConditionSetsResponse.pagination:type_name -> policy.PageResponse
+ 39, // 28: policy.subjectmapping.SubjectConditionSetCreate.subject_sets:type_name -> policy.SubjectSet
+ 36, // 29: policy.subjectmapping.SubjectConditionSetCreate.metadata:type_name -> common.MetadataMutable
+ 20, // 30: policy.subjectmapping.CreateSubjectConditionSetRequest.subject_condition_set:type_name -> policy.subjectmapping.SubjectConditionSetCreate
+ 38, // 31: policy.subjectmapping.CreateSubjectConditionSetResponse.subject_condition_set:type_name -> policy.SubjectConditionSet
+ 39, // 32: policy.subjectmapping.UpdateSubjectConditionSetRequest.subject_sets:type_name -> policy.SubjectSet
+ 36, // 33: policy.subjectmapping.UpdateSubjectConditionSetRequest.metadata:type_name -> common.MetadataMutable
+ 37, // 34: policy.subjectmapping.UpdateSubjectConditionSetRequest.metadata_update_behavior:type_name -> common.MetadataUpdateEnum
+ 38, // 35: policy.subjectmapping.UpdateSubjectConditionSetResponse.subject_condition_set:type_name -> policy.SubjectConditionSet
+ 38, // 36: policy.subjectmapping.DeleteSubjectConditionSetResponse.subject_condition_set:type_name -> policy.SubjectConditionSet
+ 38, // 37: policy.subjectmapping.DeleteAllUnmappedSubjectConditionSetsResponse.subject_condition_sets:type_name -> policy.SubjectConditionSet
+ 2, // 38: policy.subjectmapping.SubjectMappingService.MatchSubjectMappings:input_type -> policy.subjectmapping.MatchSubjectMappingsRequest
+ 7, // 39: policy.subjectmapping.SubjectMappingService.ListSubjectMappings:input_type -> policy.subjectmapping.ListSubjectMappingsRequest
+ 4, // 40: policy.subjectmapping.SubjectMappingService.GetSubjectMapping:input_type -> policy.subjectmapping.GetSubjectMappingRequest
+ 9, // 41: policy.subjectmapping.SubjectMappingService.CreateSubjectMapping:input_type -> policy.subjectmapping.CreateSubjectMappingRequest
+ 11, // 42: policy.subjectmapping.SubjectMappingService.UpdateSubjectMapping:input_type -> policy.subjectmapping.UpdateSubjectMappingRequest
+ 13, // 43: policy.subjectmapping.SubjectMappingService.DeleteSubjectMapping:input_type -> policy.subjectmapping.DeleteSubjectMappingRequest
+ 18, // 44: policy.subjectmapping.SubjectMappingService.ListSubjectConditionSets:input_type -> policy.subjectmapping.ListSubjectConditionSetsRequest
+ 15, // 45: policy.subjectmapping.SubjectMappingService.GetSubjectConditionSet:input_type -> policy.subjectmapping.GetSubjectConditionSetRequest
+ 21, // 46: policy.subjectmapping.SubjectMappingService.CreateSubjectConditionSet:input_type -> policy.subjectmapping.CreateSubjectConditionSetRequest
+ 23, // 47: policy.subjectmapping.SubjectMappingService.UpdateSubjectConditionSet:input_type -> policy.subjectmapping.UpdateSubjectConditionSetRequest
+ 25, // 48: policy.subjectmapping.SubjectMappingService.DeleteSubjectConditionSet:input_type -> policy.subjectmapping.DeleteSubjectConditionSetRequest
+ 27, // 49: policy.subjectmapping.SubjectMappingService.DeleteAllUnmappedSubjectConditionSets:input_type -> policy.subjectmapping.DeleteAllUnmappedSubjectConditionSetsRequest
+ 3, // 50: policy.subjectmapping.SubjectMappingService.MatchSubjectMappings:output_type -> policy.subjectmapping.MatchSubjectMappingsResponse
+ 8, // 51: policy.subjectmapping.SubjectMappingService.ListSubjectMappings:output_type -> policy.subjectmapping.ListSubjectMappingsResponse
+ 5, // 52: policy.subjectmapping.SubjectMappingService.GetSubjectMapping:output_type -> policy.subjectmapping.GetSubjectMappingResponse
+ 10, // 53: policy.subjectmapping.SubjectMappingService.CreateSubjectMapping:output_type -> policy.subjectmapping.CreateSubjectMappingResponse
+ 12, // 54: policy.subjectmapping.SubjectMappingService.UpdateSubjectMapping:output_type -> policy.subjectmapping.UpdateSubjectMappingResponse
+ 14, // 55: policy.subjectmapping.SubjectMappingService.DeleteSubjectMapping:output_type -> policy.subjectmapping.DeleteSubjectMappingResponse
+ 19, // 56: policy.subjectmapping.SubjectMappingService.ListSubjectConditionSets:output_type -> policy.subjectmapping.ListSubjectConditionSetsResponse
+ 16, // 57: policy.subjectmapping.SubjectMappingService.GetSubjectConditionSet:output_type -> policy.subjectmapping.GetSubjectConditionSetResponse
+ 22, // 58: policy.subjectmapping.SubjectMappingService.CreateSubjectConditionSet:output_type -> policy.subjectmapping.CreateSubjectConditionSetResponse
+ 24, // 59: policy.subjectmapping.SubjectMappingService.UpdateSubjectConditionSet:output_type -> policy.subjectmapping.UpdateSubjectConditionSetResponse
+ 26, // 60: policy.subjectmapping.SubjectMappingService.DeleteSubjectConditionSet:output_type -> policy.subjectmapping.DeleteSubjectConditionSetResponse
+ 28, // 61: policy.subjectmapping.SubjectMappingService.DeleteAllUnmappedSubjectConditionSets:output_type -> policy.subjectmapping.DeleteAllUnmappedSubjectConditionSetsResponse
+ 50, // [50:62] is the sub-list for method output_type
+ 38, // [38:50] is the sub-list for method input_type
+ 38, // [38:38] is the sub-list for extension type_name
+ 38, // [38:38] is the sub-list for extension extendee
+ 0, // [0:38] is the sub-list for field type_name
}
func init() { file_policy_subjectmapping_subject_mapping_proto_init() }
diff --git a/service/policy/attributes/attributes.proto b/service/policy/attributes/attributes.proto
index f43caa5130..a965901486 100644
--- a/service/policy/attributes/attributes.proto
+++ b/service/policy/attributes/attributes.proto
@@ -90,6 +90,9 @@ message ListAttributesRequest {
// - field UNSPECIFIED defaults to created_at with the specified direction
// - both UNSPECIFIED or sort omitted defaults to created_at DESC
repeated AttributesSort sort = 11 [(buf.validate.field).repeated.max_items = 1];
+
+ // Optional
+ policy.Search search = 12;
}
message ListAttributesResponse {
repeated policy.Attribute attributes = 1;
diff --git a/service/policy/kasregistry/key_access_server_registry.proto b/service/policy/kasregistry/key_access_server_registry.proto
index 5d0e805f7e..86e9fbc9a6 100644
--- a/service/policy/kasregistry/key_access_server_registry.proto
+++ b/service/policy/kasregistry/key_access_server_registry.proto
@@ -64,6 +64,9 @@ message ListKeyAccessServersRequest {
// - field UNSPECIFIED defaults to created_at with the specified direction
// - both UNSPECIFIED or sort omitted defaults to created_at DESC
repeated KeyAccessServersSort sort = 11 [(buf.validate.field).repeated.max_items = 1];
+
+ // Optional
+ policy.Search search = 12;
}
message ListKeyAccessServersResponse {
repeated KeyAccessServer key_access_servers = 1;
@@ -501,6 +504,9 @@ message ListKeysRequest {
// - field UNSPECIFIED defaults to created_at with the specified direction
// - both UNSPECIFIED or sort omitted defaults to created_at DESC
repeated KasKeysSort sort = 11 [(buf.validate.field).repeated.max_items = 1];
+
+ // Optional
+ policy.Search search = 12;
}
// Response to a ListKeysRequest, containing the list of asymmetric keys and pagination information
diff --git a/service/policy/namespaces/namespaces.proto b/service/policy/namespaces/namespaces.proto
index 3093ba13b9..e4b2c414e1 100644
--- a/service/policy/namespaces/namespaces.proto
+++ b/service/policy/namespaces/namespaces.proto
@@ -105,6 +105,9 @@ message ListNamespacesRequest {
// - field UNSPECIFIED defaults to created_at with the specified direction
// - both UNSPECIFIED or sort omitted defaults to created_at DESC
repeated NamespacesSort sort = 11 [(buf.validate.field).repeated.max_items = 1];
+
+ // Optional
+ policy.Search search = 12;
}
message ListNamespacesResponse {
repeated policy.Namespace namespaces = 1;
diff --git a/service/policy/obligations/obligations.proto b/service/policy/obligations/obligations.proto
index d6ad3a9763..126970104a 100644
--- a/service/policy/obligations/obligations.proto
+++ b/service/policy/obligations/obligations.proto
@@ -171,6 +171,9 @@ message ListObligationsRequest {
// - field UNSPECIFIED defaults to created_at with the specified direction
// - both UNSPECIFIED or sort omitted defaults to created_at DESC
repeated ObligationsSort sort = 11 [(buf.validate.field).repeated.max_items = 1];
+
+ // Optional
+ policy.Search search = 12;
}
message ListObligationsResponse {
@@ -348,6 +351,9 @@ message ListObligationTriggersRequest {
// Optional
policy.PageRequest pagination = 10;
+
+ // Optional
+ policy.Search search = 11;
}
message ListObligationTriggersResponse {
diff --git a/service/policy/registeredresources/registered_resources.proto b/service/policy/registeredresources/registered_resources.proto
index f12a1f4ac3..45b3a6c747 100644
--- a/service/policy/registeredresources/registered_resources.proto
+++ b/service/policy/registeredresources/registered_resources.proto
@@ -125,6 +125,9 @@ message ListRegisteredResourcesRequest {
// - field UNSPECIFIED defaults to created_at with the specified direction
// - both UNSPECIFIED or sort omitted defaults to created_at DESC
repeated RegisteredResourcesSort sort = 11 [(buf.validate.field).repeated.max_items = 1];
+
+ // Optional
+ policy.Search search = 12;
}
message ListRegisteredResourcesResponse {
repeated policy.RegisteredResource resources = 1;
@@ -288,6 +291,9 @@ message ListRegisteredResourceValuesRequest {
// Optional
policy.PageRequest pagination = 10;
+
+ // Optional
+ policy.Search search = 11;
}
message ListRegisteredResourceValuesResponse {
repeated policy.RegisteredResourceValue values = 1;
diff --git a/service/policy/selectors.proto b/service/policy/selectors.proto
index 8ad27001fc..db3b708ef3 100644
--- a/service/policy/selectors.proto
+++ b/service/policy/selectors.proto
@@ -62,6 +62,10 @@ enum SortDirection {
SORT_DIRECTION_DESC = 2;
}
+message Search {
+ string term = 1;
+}
+
message PageRequest {
// Optional
// Set to configured default limit if not provided
diff --git a/service/policy/subjectmapping/subject_mapping.proto b/service/policy/subjectmapping/subject_mapping.proto
index af6da858ba..a20c4e297c 100644
--- a/service/policy/subjectmapping/subject_mapping.proto
+++ b/service/policy/subjectmapping/subject_mapping.proto
@@ -61,6 +61,9 @@ message ListSubjectMappingsRequest {
// - field UNSPECIFIED defaults to created_at with the specified direction
// - both UNSPECIFIED or sort omitted defaults to created_at DESC
repeated SubjectMappingsSort sort = 11 [(buf.validate.field).repeated.max_items = 1];
+
+ // Optional
+ policy.Search search = 12;
}
message ListSubjectMappingsResponse {
repeated policy.SubjectMapping subject_mappings = 1;
@@ -195,6 +198,9 @@ message ListSubjectConditionSetsRequest {
// - field UNSPECIFIED defaults to created_at with the specified direction
// - both UNSPECIFIED or sort omitted defaults to created_at DESC
repeated SubjectConditionSetsSort sort = 11 [(buf.validate.field).repeated.max_items = 1];
+
+ // Optional
+ policy.Search search = 12;
}
message ListSubjectConditionSetsResponse {
repeated policy.SubjectConditionSet subject_condition_sets = 1;
From 6fca8b9e3e8a418e8129fb4857997adff1f6d1fa Mon Sep 17 00:00:00 2001
From: Chris Reed
Date: Fri, 29 May 2026 15:48:53 -0500
Subject: [PATCH 02/10] add a max value.
---
.../policy/attributes/attributes.openapi.yaml | 1 +
.../key_access_server_registry.openapi.yaml | 1 +
.../policy/namespaces/namespaces.openapi.yaml | 1 +
.../obligations/obligations.openapi.yaml | 1 +
.../registered_resources.openapi.yaml | 1 +
docs/openapi/policy/selectors.openapi.yaml | 1 +
.../subject_mapping.openapi.yaml | 1 +
protocol/go/policy/selectors.pb.go | 213 +++++++++---------
service/policy/selectors.proto | 4 +-
service/policy/selectors_test.go | 25 ++
10 files changed, 143 insertions(+), 106 deletions(-)
create mode 100644 service/policy/selectors_test.go
diff --git a/docs/openapi/policy/attributes/attributes.openapi.yaml b/docs/openapi/policy/attributes/attributes.openapi.yaml
index 9505224012..fd2feea974 100644
--- a/docs/openapi/policy/attributes/attributes.openapi.yaml
+++ b/docs/openapi/policy/attributes/attributes.openapi.yaml
@@ -1488,6 +1488,7 @@ components:
term:
type: string
title: term
+ maxLength: 253
title: Search
additionalProperties: false
policy.SimpleKasKey:
diff --git a/docs/openapi/policy/kasregistry/key_access_server_registry.openapi.yaml b/docs/openapi/policy/kasregistry/key_access_server_registry.openapi.yaml
index c11ccb0dad..f89e3c5993 100644
--- a/docs/openapi/policy/kasregistry/key_access_server_registry.openapi.yaml
+++ b/docs/openapi/policy/kasregistry/key_access_server_registry.openapi.yaml
@@ -1050,6 +1050,7 @@ components:
term:
type: string
title: term
+ maxLength: 253
title: Search
additionalProperties: false
policy.SimpleKasKey:
diff --git a/docs/openapi/policy/namespaces/namespaces.openapi.yaml b/docs/openapi/policy/namespaces/namespaces.openapi.yaml
index ab4a51570d..ff9bb5281a 100644
--- a/docs/openapi/policy/namespaces/namespaces.openapi.yaml
+++ b/docs/openapi/policy/namespaces/namespaces.openapi.yaml
@@ -761,6 +761,7 @@ components:
term:
type: string
title: term
+ maxLength: 253
title: Search
additionalProperties: false
policy.SimpleKasKey:
diff --git a/docs/openapi/policy/obligations/obligations.openapi.yaml b/docs/openapi/policy/obligations/obligations.openapi.yaml
index 2f7b22fd34..d0f6952863 100644
--- a/docs/openapi/policy/obligations/obligations.openapi.yaml
+++ b/docs/openapi/policy/obligations/obligations.openapi.yaml
@@ -1320,6 +1320,7 @@ components:
term:
type: string
title: term
+ maxLength: 253
title: Search
additionalProperties: false
policy.SimpleKasKey:
diff --git a/docs/openapi/policy/registeredresources/registered_resources.openapi.yaml b/docs/openapi/policy/registeredresources/registered_resources.openapi.yaml
index 8613e5f855..12a1c901c9 100644
--- a/docs/openapi/policy/registeredresources/registered_resources.openapi.yaml
+++ b/docs/openapi/policy/registeredresources/registered_resources.openapi.yaml
@@ -1212,6 +1212,7 @@ components:
term:
type: string
title: term
+ maxLength: 253
title: Search
additionalProperties: false
policy.SimpleKasKey:
diff --git a/docs/openapi/policy/selectors.openapi.yaml b/docs/openapi/policy/selectors.openapi.yaml
index 89eb2a094b..a477c2c704 100644
--- a/docs/openapi/policy/selectors.openapi.yaml
+++ b/docs/openapi/policy/selectors.openapi.yaml
@@ -170,6 +170,7 @@ components:
term:
type: string
title: term
+ maxLength: 253
title: Search
additionalProperties: false
security: []
diff --git a/docs/openapi/policy/subjectmapping/subject_mapping.openapi.yaml b/docs/openapi/policy/subjectmapping/subject_mapping.openapi.yaml
index 32a6fe61c2..60aa821de2 100644
--- a/docs/openapi/policy/subjectmapping/subject_mapping.openapi.yaml
+++ b/docs/openapi/policy/subjectmapping/subject_mapping.openapi.yaml
@@ -1187,6 +1187,7 @@ components:
term:
type: string
title: term
+ maxLength: 253
title: Search
additionalProperties: false
policy.SimpleKasKey:
diff --git a/protocol/go/policy/selectors.pb.go b/protocol/go/policy/selectors.pb.go
index 085d7a6cc7..ccf607c280 100644
--- a/protocol/go/policy/selectors.pb.go
+++ b/protocol/go/policy/selectors.pb.go
@@ -7,6 +7,7 @@
package policy
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"
reflect "reflect"
@@ -754,53 +755,27 @@ var File_policy_selectors_proto protoreflect.FileDescriptor
var file_policy_selectors_proto_rawDesc = []byte{
0x0a, 0x16, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f,
0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
- 0x22, 0xcc, 0x03, 0x0a, 0x1a, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x4e, 0x61,
- 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12,
- 0x5d, 0x0a, 0x0f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
- 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63,
- 0x79, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73,
- 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x41, 0x74, 0x74,
- 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x0e,
- 0x77, 0x69, 0x74, 0x68, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x1a, 0xce,
- 0x02, 0x0a, 0x11, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x53, 0x65, 0x6c, 0x65,
- 0x63, 0x74, 0x6f, 0x72, 0x12, 0x33, 0x0a, 0x16, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x6b, 0x65, 0x79,
- 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x77, 0x69, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63,
- 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x63, 0x0a, 0x0b, 0x77, 0x69, 0x74,
- 0x68, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42,
- 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
- 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74,
- 0x6f, 0x72, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x53, 0x65, 0x6c, 0x65,
- 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74,
- 0x6f, 0x72, 0x52, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x1a, 0x9e,
- 0x01, 0x0a, 0x0d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72,
- 0x12, 0x33, 0x0a, 0x16, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x63, 0x63,
- 0x65, 0x73, 0x73, 0x5f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08,
- 0x52, 0x13, 0x77, 0x69, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47,
- 0x72, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x73, 0x75,
- 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6d, 0x61, 0x70, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08,
- 0x52, 0x0f, 0x77, 0x69, 0x74, 0x68, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x61, 0x70,
- 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72,
- 0x63, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x77,
- 0x69, 0x74, 0x68, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x61, 0x70, 0x73, 0x22,
- 0xba, 0x03, 0x0a, 0x1b, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x44, 0x65, 0x66,
- 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12,
- 0x33, 0x0a, 0x16, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65,
- 0x73, 0x73, 0x5f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52,
- 0x13, 0x77, 0x69, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72,
- 0x61, 0x6e, 0x74, 0x73, 0x12, 0x5c, 0x0a, 0x0e, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x6e, 0x61, 0x6d,
- 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70,
- 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x44,
- 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f,
- 0x72, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63,
- 0x74, 0x6f, 0x72, 0x52, 0x0d, 0x77, 0x69, 0x74, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61,
- 0x63, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65,
- 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79,
- 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69,
- 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x56, 0x61, 0x6c,
- 0x75, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x0a, 0x77, 0x69, 0x74, 0x68,
- 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x1a, 0x13, 0x0a, 0x11, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70,
- 0x61, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x1a, 0x9e, 0x01, 0x0a, 0x0d,
+ 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, 0x22, 0xcc, 0x03,
+ 0x0a, 0x1a, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73,
+ 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x5d, 0x0a, 0x0f,
+ 0x77, 0x69, 0x74, 0x68, 0x5f, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x18,
+ 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41,
+ 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63,
+ 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62,
+ 0x75, 0x74, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x0e, 0x77, 0x69, 0x74,
+ 0x68, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x1a, 0xce, 0x02, 0x0a, 0x11,
+ 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f,
+ 0x72, 0x12, 0x33, 0x0a, 0x16, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x63,
+ 0x63, 0x65, 0x73, 0x73, 0x5f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x08, 0x52, 0x13, 0x77, 0x69, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73,
+ 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x63, 0x0a, 0x0b, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x76,
+ 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x70, 0x6f,
+ 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x4e, 0x61,
+ 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e,
+ 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f,
+ 0x72, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52,
+ 0x0a, 0x77, 0x69, 0x74, 0x68, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x1a, 0x9e, 0x01, 0x0a, 0x0d,
0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x33, 0x0a,
0x16, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73,
0x5f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x77,
@@ -810,64 +785,92 @@ var file_policy_selectors_proto_rawDesc = []byte{
0x69, 0x74, 0x68, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x61, 0x70, 0x73, 0x12, 0x2c,
0x0a, 0x12, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f,
0x6d, 0x61, 0x70, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x77, 0x69, 0x74, 0x68,
- 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x61, 0x70, 0x73, 0x22, 0xcb, 0x03, 0x0a,
- 0x16, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53,
- 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x33, 0x0a, 0x16, 0x77, 0x69, 0x74, 0x68, 0x5f,
- 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x67, 0x72, 0x61, 0x6e, 0x74,
- 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x77, 0x69, 0x74, 0x68, 0x4b, 0x65, 0x79,
- 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x2a, 0x0a, 0x11,
- 0x77, 0x69, 0x74, 0x68, 0x5f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6d, 0x61, 0x70,
- 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x77, 0x69, 0x74, 0x68, 0x53, 0x75, 0x62,
- 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x61, 0x70, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x77, 0x69, 0x74, 0x68,
- 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x73, 0x18, 0x03,
- 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x77, 0x69, 0x74, 0x68, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72,
- 0x63, 0x65, 0x4d, 0x61, 0x70, 0x73, 0x12, 0x57, 0x0a, 0x0e, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x61,
- 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30,
- 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74,
- 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x41,
- 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72,
- 0x52, 0x0d, 0x77, 0x69, 0x74, 0x68, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x1a,
- 0xc8, 0x01, 0x0a, 0x11, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x53, 0x65, 0x6c,
- 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x33, 0x0a, 0x16, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x6b, 0x65,
- 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x77, 0x69, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x41, 0x63,
- 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x69, 0x0a, 0x0e, 0x77, 0x69,
- 0x74, 0x68, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01,
- 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x74, 0x74, 0x72,
- 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74,
- 0x6f, 0x72, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x53, 0x65, 0x6c, 0x65,
- 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65,
- 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x0d, 0x77, 0x69, 0x74, 0x68, 0x4e, 0x61, 0x6d, 0x65,
- 0x73, 0x70, 0x61, 0x63, 0x65, 0x1a, 0x13, 0x0a, 0x11, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61,
- 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x22, 0x1c, 0x0a, 0x06, 0x53, 0x65,
- 0x61, 0x72, 0x63, 0x68, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x72, 0x6d, 0x22, 0x3b, 0x0a, 0x0b, 0x50, 0x61, 0x67, 0x65,
- 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x16, 0x0a,
- 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6f,
- 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x6c, 0x0a, 0x0c, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73,
- 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74,
- 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x63,
- 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x1f, 0x0a, 0x0b,
- 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28,
- 0x05, 0x52, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a,
- 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74, 0x6f,
- 0x74, 0x61, 0x6c, 0x2a, 0x60, 0x0a, 0x0d, 0x53, 0x6f, 0x72, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63,
- 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x1a, 0x53, 0x4f, 0x52, 0x54, 0x5f, 0x44, 0x49, 0x52,
- 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49,
- 0x45, 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x53, 0x4f, 0x52, 0x54, 0x5f, 0x44, 0x49, 0x52,
- 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x41, 0x53, 0x43, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13,
- 0x53, 0x4f, 0x52, 0x54, 0x5f, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44,
- 0x45, 0x53, 0x43, 0x10, 0x02, 0x42, 0x84, 0x01, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x6f,
- 0x6c, 0x69, 0x63, 0x79, 0x42, 0x0e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 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,
+ 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x61, 0x70, 0x73, 0x22, 0xba, 0x03, 0x0a,
+ 0x1b, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69,
+ 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x33, 0x0a, 0x16,
+ 0x77, 0x69, 0x74, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f,
+ 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x77, 0x69,
+ 0x74, 0x68, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x6e, 0x74,
+ 0x73, 0x12, 0x5c, 0x0a, 0x0e, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70,
+ 0x61, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x6f, 0x6c, 0x69,
+ 0x63, 0x79, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x44, 0x65, 0x66, 0x69,
+ 0x6e, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x4e,
+ 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72,
+ 0x52, 0x0d, 0x77, 0x69, 0x74, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12,
+ 0x52, 0x0a, 0x0b, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x0b,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x74,
+ 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x44, 0x65, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x6f,
+ 0x6e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53,
+ 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x0a, 0x77, 0x69, 0x74, 0x68, 0x56, 0x61, 0x6c,
+ 0x75, 0x65, 0x73, 0x1a, 0x13, 0x0a, 0x11, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65,
+ 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x1a, 0x9e, 0x01, 0x0a, 0x0d, 0x56, 0x61, 0x6c,
+ 0x75, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x33, 0x0a, 0x16, 0x77, 0x69,
+ 0x74, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x67, 0x72,
+ 0x61, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x77, 0x69, 0x74, 0x68,
+ 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x12,
+ 0x2a, 0x0a, 0x11, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f,
+ 0x6d, 0x61, 0x70, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x77, 0x69, 0x74, 0x68,
+ 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x4d, 0x61, 0x70, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x77,
+ 0x69, 0x74, 0x68, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6d, 0x61, 0x70,
+ 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x77, 0x69, 0x74, 0x68, 0x52, 0x65, 0x73,
+ 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d, 0x61, 0x70, 0x73, 0x22, 0xcb, 0x03, 0x0a, 0x16, 0x41, 0x74,
+ 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x65, 0x6c, 0x65,
+ 0x63, 0x74, 0x6f, 0x72, 0x12, 0x33, 0x0a, 0x16, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x6b, 0x65, 0x79,
+ 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x08, 0x52, 0x13, 0x77, 0x69, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63,
+ 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x77, 0x69, 0x74,
+ 0x68, 0x5f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x6d, 0x61, 0x70, 0x73, 0x18, 0x02,
+ 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x77, 0x69, 0x74, 0x68, 0x53, 0x75, 0x62, 0x6a, 0x65, 0x63,
+ 0x74, 0x4d, 0x61, 0x70, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x72, 0x65,
+ 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28,
+ 0x08, 0x52, 0x10, 0x77, 0x69, 0x74, 0x68, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4d,
+ 0x61, 0x70, 0x73, 0x12, 0x57, 0x0a, 0x0e, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x61, 0x74, 0x74, 0x72,
+ 0x69, 0x62, 0x75, 0x74, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x6f,
+ 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x56, 0x61,
+ 0x6c, 0x75, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e, 0x41, 0x74, 0x74, 0x72,
+ 0x69, 0x62, 0x75, 0x74, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x0d, 0x77,
+ 0x69, 0x74, 0x68, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x1a, 0xc8, 0x01, 0x0a,
+ 0x11, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74,
+ 0x6f, 0x72, 0x12, 0x33, 0x0a, 0x16, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x61,
+ 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01,
+ 0x28, 0x08, 0x52, 0x13, 0x77, 0x69, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x41, 0x63, 0x63, 0x65, 0x73,
+ 0x73, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x69, 0x0a, 0x0e, 0x77, 0x69, 0x74, 0x68, 0x5f,
+ 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32,
+ 0x42, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75,
+ 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x2e,
+ 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f,
+ 0x72, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63,
+ 0x74, 0x6f, 0x72, 0x52, 0x0d, 0x77, 0x69, 0x74, 0x68, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61,
+ 0x63, 0x65, 0x1a, 0x13, 0x0a, 0x11, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x53,
+ 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x22, 0x26, 0x0a, 0x06, 0x53, 0x65, 0x61, 0x72, 0x63,
+ 0x68, 0x12, 0x1c, 0x0a, 0x04, 0x74, 0x65, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42,
+ 0x08, 0xba, 0x48, 0x05, 0x72, 0x03, 0x18, 0xfd, 0x01, 0x52, 0x04, 0x74, 0x65, 0x72, 0x6d, 0x22,
+ 0x3b, 0x0a, 0x0b, 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14,
+ 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6c,
+ 0x69, 0x6d, 0x69, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02,
+ 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x22, 0x6c, 0x0a, 0x0c,
+ 0x50, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x25, 0x0a, 0x0e,
+ 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x01,
+ 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x4f, 0x66, 0x66,
+ 0x73, 0x65, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x6f, 0x66, 0x66, 0x73,
+ 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x4f, 0x66,
+ 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x03, 0x20,
+ 0x01, 0x28, 0x05, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x2a, 0x60, 0x0a, 0x0d, 0x53, 0x6f,
+ 0x72, 0x74, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x1a, 0x53,
+ 0x4f, 0x52, 0x54, 0x5f, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e,
+ 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x53,
+ 0x4f, 0x52, 0x54, 0x5f, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x41, 0x53,
+ 0x43, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x53, 0x4f, 0x52, 0x54, 0x5f, 0x44, 0x49, 0x52, 0x45,
+ 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x53, 0x43, 0x10, 0x02, 0x42, 0x84, 0x01, 0x0a,
+ 0x0a, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x42, 0x0e, 0x53, 0x65, 0x6c,
+ 0x65, 0x63, 0x74, 0x6f, 0x72, 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/selectors.proto b/service/policy/selectors.proto
index db3b708ef3..502fdab5f4 100644
--- a/service/policy/selectors.proto
+++ b/service/policy/selectors.proto
@@ -2,6 +2,8 @@ syntax = "proto3";
package policy;
+import "buf/validate/validate.proto";
+
// Deprecated: never utilized
message AttributeNamespaceSelector {
// Deprecated
@@ -63,7 +65,7 @@ enum SortDirection {
}
message Search {
- string term = 1;
+ string term = 1 [(buf.validate.field).string.max_len = 253];
}
message PageRequest {
diff --git a/service/policy/selectors_test.go b/service/policy/selectors_test.go
new file mode 100644
index 0000000000..10dbfd4726
--- /dev/null
+++ b/service/policy/selectors_test.go
@@ -0,0 +1,25 @@
+package policy_test
+
+import (
+ "strings"
+ "testing"
+
+ "buf.build/go/protovalidate"
+ "github.com/opentdf/platform/protocol/go/policy"
+ "github.com/stretchr/testify/require"
+)
+
+func TestSearchTermValidation(t *testing.T) {
+ v, err := protovalidate.New()
+ require.NoError(t, err)
+
+ require.NoError(t, v.Validate(&policy.Search{
+ Term: strings.Repeat("a", 253),
+ }))
+
+ err = v.Validate(&policy.Search{
+ Term: strings.Repeat("a", 254),
+ })
+ require.Error(t, err)
+ require.Contains(t, err.Error(), "string.max_len")
+}
From fe0ee3fdb3b733950a52dcf9d0b62e9a773eb701 Mon Sep 17 00:00:00 2001
From: Chris Reed <87077975+c-r33d@users.noreply.github.com>
Date: Mon, 1 Jun 2026 13:03:15 -0500
Subject: [PATCH 03/10] feat(policy): ListNamespaces search (#3552)
### Proposed Changes
1.) Add substring searching to ListNamespaces, `fqn` field.
2.) Escape characters used by `LIKE\ILIKE` from incoming input
3.) Specify `\` as the escape character
### 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
## Summary by CodeRabbit
* **New Features**
* Added search functionality to namespace listing with support for name
and FQN matching
* Search is case-insensitive and supports prefix matching
* Search integrates with namespace state filtering (ACTIVE/INACTIVE)
* Special wildcard characters are properly escaped to prevent unexpected
matches
* **Tests**
* Added comprehensive test coverage for search functionality,
pagination, and edge cases
---
service/integration/namespaces_test.go | 215 +++++++++++++++++--
service/policy/db/namespaces.go | 2 +
service/policy/db/namespaces.sql.go | 36 +++-
service/policy/db/queries/namespaces.sql | 9 +-
service/policy/db/utils.go | 21 ++
service/policy/db/utils_test.go | 59 +++++
service/policy/namespaces/namespaces_test.go | 10 +
7 files changed, 326 insertions(+), 26 deletions(-)
diff --git a/service/integration/namespaces_test.go b/service/integration/namespaces_test.go
index e4e9dbd985..2d8ef27c09 100644
--- a/service/integration/namespaces_test.go
+++ b/service/integration/namespaces_test.go
@@ -273,7 +273,7 @@ func (s *NamespacesSuite) Test_ListNamespaces_OrdersByCreatedAt_Succeeds() {
func (s *NamespacesSuite) Test_ListNamespaces_SortByName_ASC() {
ids := s.createSortTestNamespaces([]string{"aaa-sort", "bbb-sort", "ccc-sort"})
- defer s.deleteSortTestNamespaces(ids)
+ defer s.deleteTestNamespaces(ids)
listRsp, err := s.db.PolicyClient.ListNamespaces(s.ctx, &namespaces.ListNamespacesRequest{
State: common.ActiveStateEnum_ACTIVE_STATE_ENUM_ANY,
@@ -290,7 +290,7 @@ func (s *NamespacesSuite) Test_ListNamespaces_SortByName_ASC() {
func (s *NamespacesSuite) Test_ListNamespaces_SortByName_DESC() {
ids := s.createSortTestNamespaces([]string{"aaa-sortdesc", "bbb-sortdesc", "ccc-sortdesc"})
- defer s.deleteSortTestNamespaces(ids)
+ defer s.deleteTestNamespaces(ids)
listRsp, err := s.db.PolicyClient.ListNamespaces(s.ctx, &namespaces.ListNamespacesRequest{
State: common.ActiveStateEnum_ACTIVE_STATE_ENUM_ANY,
@@ -307,7 +307,7 @@ func (s *NamespacesSuite) Test_ListNamespaces_SortByName_DESC() {
func (s *NamespacesSuite) Test_ListNamespaces_SortByCreatedAt_ASC() {
ids := s.createSortTestNamespaces([]string{"createdasc-ns-0", "createdasc-ns-1", "createdasc-ns-2"})
- defer s.deleteSortTestNamespaces(ids)
+ defer s.deleteTestNamespaces(ids)
listRsp, err := s.db.PolicyClient.ListNamespaces(s.ctx, &namespaces.ListNamespacesRequest{
State: common.ActiveStateEnum_ACTIVE_STATE_ENUM_ANY,
@@ -324,7 +324,7 @@ func (s *NamespacesSuite) Test_ListNamespaces_SortByCreatedAt_ASC() {
func (s *NamespacesSuite) Test_ListNamespaces_SortByCreatedAt_DESC() {
ids := s.createSortTestNamespaces([]string{"createddesc-ns-0", "createddesc-ns-1", "createddesc-ns-2"})
- defer s.deleteSortTestNamespaces(ids)
+ defer s.deleteTestNamespaces(ids)
listRsp, err := s.db.PolicyClient.ListNamespaces(s.ctx, &namespaces.ListNamespacesRequest{
State: common.ActiveStateEnum_ACTIVE_STATE_ENUM_ANY,
@@ -341,7 +341,7 @@ func (s *NamespacesSuite) Test_ListNamespaces_SortByCreatedAt_DESC() {
func (s *NamespacesSuite) Test_ListNamespaces_SortByFqn_ASC() {
ids := s.createSortTestNamespaces([]string{"aaa-fqnsort", "bbb-fqnsort", "ccc-fqnsort"})
- defer s.deleteSortTestNamespaces(ids)
+ defer s.deleteTestNamespaces(ids)
listRsp, err := s.db.PolicyClient.ListNamespaces(s.ctx, &namespaces.ListNamespacesRequest{
State: common.ActiveStateEnum_ACTIVE_STATE_ENUM_ANY,
@@ -358,7 +358,7 @@ func (s *NamespacesSuite) Test_ListNamespaces_SortByFqn_ASC() {
func (s *NamespacesSuite) Test_ListNamespaces_SortByFqn_DESC() {
ids := s.createSortTestNamespaces([]string{"aaa-fqnsortdesc", "bbb-fqnsortdesc", "ccc-fqnsortdesc"})
- defer s.deleteSortTestNamespaces(ids)
+ defer s.deleteTestNamespaces(ids)
listRsp, err := s.db.PolicyClient.ListNamespaces(s.ctx, &namespaces.ListNamespacesRequest{
State: common.ActiveStateEnum_ACTIVE_STATE_ENUM_ANY,
@@ -375,7 +375,7 @@ func (s *NamespacesSuite) Test_ListNamespaces_SortByFqn_DESC() {
func (s *NamespacesSuite) Test_ListNamespaces_SortByUpdatedAt_DESC() {
ids := s.createSortTestNamespaces([]string{"upd-sort-ns-0", "upd-sort-ns-1", "upd-sort-ns-2"})
- defer s.deleteSortTestNamespaces(ids)
+ defer s.deleteTestNamespaces(ids)
// Update the first namespace so its updated_at is the most recent
time.Sleep(5 * time.Millisecond)
@@ -403,7 +403,7 @@ func (s *NamespacesSuite) Test_ListNamespaces_SortByUpdatedAt_DESC() {
func (s *NamespacesSuite) Test_ListNamespaces_SortByUpdatedAt_ASC() {
ids := s.createSortTestNamespaces([]string{"upd-sort-asc-ns-0", "upd-sort-asc-ns-1", "upd-sort-asc-ns-2"})
- defer s.deleteSortTestNamespaces(ids)
+ defer s.deleteTestNamespaces(ids)
// Update the last namespace so its updated_at is the most recent
time.Sleep(5 * time.Millisecond)
@@ -438,7 +438,7 @@ func (s *NamespacesSuite) Test_ListNamespaces_SortTieBreaker_CreatedAtWithIDFall
s.Require().NoError(err)
ids[i] = created.GetId()
}
- defer s.deleteSortTestNamespaces(ids)
+ defer s.deleteTestNamespaces(ids)
s.Require().NoError(forceCreatedAtTie(s.ctx, s.db, "attribute_namespaces", ids))
@@ -458,7 +458,7 @@ func (s *NamespacesSuite) Test_ListNamespaces_SortTieBreaker_CreatedAtWithIDFall
func (s *NamespacesSuite) Test_ListNamespaces_SortByUnspecifiedField_DefaultsToCreatedAt() {
ids := s.createSortTestNamespaces([]string{"unspecified-sort-ns-0", "unspecified-sort-ns-1", "unspecified-sort-ns-2"})
- defer s.deleteSortTestNamespaces(ids)
+ defer s.deleteTestNamespaces(ids)
listRsp, err := s.db.PolicyClient.ListNamespaces(s.ctx, &namespaces.ListNamespacesRequest{
State: common.ActiveStateEnum_ACTIVE_STATE_ENUM_ANY,
@@ -475,7 +475,7 @@ func (s *NamespacesSuite) Test_ListNamespaces_SortByUnspecifiedField_DefaultsToC
func (s *NamespacesSuite) Test_ListNamespaces_SortByUnspecifiedDirection_DefaultsToDESC() {
ids := s.createSortTestNamespaces([]string{"unspecified-dir-ns-0", "unspecified-dir-ns-1", "unspecified-dir-ns-2"})
- defer s.deleteSortTestNamespaces(ids)
+ defer s.deleteTestNamespaces(ids)
listRsp, err := s.db.PolicyClient.ListNamespaces(s.ctx, &namespaces.ListNamespacesRequest{
State: common.ActiveStateEnum_ACTIVE_STATE_ENUM_ANY,
@@ -492,7 +492,7 @@ func (s *NamespacesSuite) Test_ListNamespaces_SortByUnspecifiedDirection_Default
func (s *NamespacesSuite) Test_ListNamespaces_SortByBothUnspecified_DefaultsToCreatedAtDESC() {
ids := s.createSortTestNamespaces([]string{"both-unspecified-ns-0", "both-unspecified-ns-1", "both-unspecified-ns-2"})
- defer s.deleteSortTestNamespaces(ids)
+ defer s.deleteTestNamespaces(ids)
listRsp, err := s.db.PolicyClient.ListNamespaces(s.ctx, &namespaces.ListNamespacesRequest{
State: common.ActiveStateEnum_ACTIVE_STATE_ENUM_ANY,
@@ -509,7 +509,7 @@ func (s *NamespacesSuite) Test_ListNamespaces_SortByBothUnspecified_DefaultsToCr
func (s *NamespacesSuite) Test_ListNamespaces_SortOmitted() {
ids := s.createSortTestNamespaces([]string{"sort-omitted-ns-0", "sort-omitted-ns-1", "sort-omitted-ns-2"})
- defer s.deleteSortTestNamespaces(ids)
+ defer s.deleteTestNamespaces(ids)
listRsp, err := s.db.PolicyClient.ListNamespaces(s.ctx, &namespaces.ListNamespacesRequest{
State: common.ActiveStateEnum_ACTIVE_STATE_ENUM_ANY,
@@ -582,6 +582,191 @@ func (s *NamespacesSuite) Test_ListNamespaces_Offset_Succeeds() {
}
}
+func (s *NamespacesSuite) Test_ListNamespaces_SearchByNameAndFqn_Succeeds() {
+ suffix := time.Now().UnixNano()
+ alpha, err := s.db.PolicyClient.CreateNamespace(s.ctx, &namespaces.CreateNamespaceRequest{
+ Name: fmt.Sprintf("dspx-search-alpha-%d.com", suffix),
+ })
+ s.Require().NoError(err)
+ beta, err := s.db.PolicyClient.CreateNamespace(s.ctx, &namespaces.CreateNamespaceRequest{
+ Name: fmt.Sprintf("dspx-search-beta-%d.com", suffix),
+ })
+ s.Require().NoError(err)
+ other, err := s.db.PolicyClient.CreateNamespace(s.ctx, &namespaces.CreateNamespaceRequest{
+ Name: fmt.Sprintf("dspx-other-%d.com", suffix),
+ })
+ s.Require().NoError(err)
+ defer s.deleteTestNamespaces([]string{alpha.GetId(), beta.GetId(), other.GetId()})
+
+ byName, err := s.db.PolicyClient.ListNamespaces(s.ctx, &namespaces.ListNamespacesRequest{
+ State: common.ActiveStateEnum_ACTIVE_STATE_ENUM_ANY,
+ Search: &policy.Search{Term: strings.ToUpper(alpha.GetName())},
+ })
+ s.Require().NoError(err)
+ s.Require().Len(byName.GetNamespaces(), 1)
+ s.Equal(alpha.GetId(), byName.GetNamespaces()[0].GetId())
+ s.Equal(int32(1), byName.GetPagination().GetTotal())
+
+ byFqn, err := s.db.PolicyClient.ListNamespaces(s.ctx, &namespaces.ListNamespacesRequest{
+ State: common.ActiveStateEnum_ACTIVE_STATE_ENUM_ANY,
+ Search: &policy.Search{Term: strings.ToUpper(beta.GetFqn())},
+ })
+ s.Require().NoError(err)
+ s.Require().Len(byFqn.GetNamespaces(), 1)
+ s.Equal(beta.GetId(), byFqn.GetNamespaces()[0].GetId())
+ s.Equal(int32(1), byFqn.GetPagination().GetTotal())
+}
+
+func (s *NamespacesSuite) Test_ListNamespaces_SearchByNamePrefix_Succeeds() {
+ suffix := time.Now().UnixNano()
+ searchPrefix := fmt.Sprintf("dspx-search-%d-ab", suffix)
+ matched, err := s.db.PolicyClient.CreateNamespace(s.ctx, &namespaces.CreateNamespaceRequest{
+ Name: searchPrefix + "c.com",
+ })
+ s.Require().NoError(err)
+ other, err := s.db.PolicyClient.CreateNamespace(s.ctx, &namespaces.CreateNamespaceRequest{
+ Name: fmt.Sprintf("dspx-search-%d-other.com", suffix),
+ })
+ s.Require().NoError(err)
+ defer s.deleteTestNamespaces([]string{matched.GetId(), other.GetId()})
+
+ list, err := s.db.PolicyClient.ListNamespaces(s.ctx, &namespaces.ListNamespacesRequest{
+ State: common.ActiveStateEnum_ACTIVE_STATE_ENUM_ANY,
+ Search: &policy.Search{Term: searchPrefix},
+ })
+ s.Require().NoError(err)
+ s.Require().Len(list.GetNamespaces(), 1)
+ s.Equal(matched.GetId(), list.GetNamespaces()[0].GetId())
+ s.Equal(int32(1), list.GetPagination().GetTotal())
+}
+
+func (s *NamespacesSuite) Test_ListNamespaces_SearchEscapesLikeWildcardLiterals_Succeeds() {
+ suffix := time.Now().UnixNano()
+ searchDomain := fmt.Sprintf("dspx-search-like-%d.com", suffix)
+ alpha, err := s.db.PolicyClient.CreateNamespace(s.ctx, &namespaces.CreateNamespaceRequest{
+ Name: "wildcarda." + searchDomain,
+ })
+ s.Require().NoError(err)
+ beta, err := s.db.PolicyClient.CreateNamespace(s.ctx, &namespaces.CreateNamespaceRequest{
+ Name: "wildcardb." + searchDomain,
+ })
+ s.Require().NoError(err)
+ defer s.deleteTestNamespaces([]string{alpha.GetId(), beta.GetId()})
+
+ for _, query := range []string{
+ "wildcard_." + searchDomain,
+ "wildcard%." + searchDomain,
+ } {
+ list, err := s.db.PolicyClient.ListNamespaces(s.ctx, &namespaces.ListNamespacesRequest{
+ State: common.ActiveStateEnum_ACTIVE_STATE_ENUM_ANY,
+ Search: &policy.Search{Term: query},
+ })
+ s.Require().NoError(err)
+ s.Empty(list.GetNamespaces())
+ s.Equal(int32(0), list.GetPagination().GetTotal())
+ }
+}
+
+func (s *NamespacesSuite) Test_ListNamespaces_SearchCombinesWithState_Succeeds() {
+ suffix := time.Now().UnixNano()
+ searchQuery := fmt.Sprintf("dspx-search-state-%d.com", suffix)
+ active, err := s.db.PolicyClient.CreateNamespace(s.ctx, &namespaces.CreateNamespaceRequest{
+ Name: "active." + searchQuery,
+ })
+ s.Require().NoError(err)
+ inactive, err := s.db.PolicyClient.CreateNamespace(s.ctx, &namespaces.CreateNamespaceRequest{
+ Name: "inactive." + searchQuery,
+ })
+ s.Require().NoError(err)
+ _, err = s.db.PolicyClient.DeactivateNamespace(s.ctx, inactive.GetId())
+ s.Require().NoError(err)
+ defer s.deleteTestNamespaces([]string{active.GetId(), inactive.GetId()})
+
+ activeList, err := s.db.PolicyClient.ListNamespaces(s.ctx, &namespaces.ListNamespacesRequest{
+ State: common.ActiveStateEnum_ACTIVE_STATE_ENUM_ACTIVE,
+ Search: &policy.Search{Term: searchQuery},
+ })
+ s.Require().NoError(err)
+ s.Require().Len(activeList.GetNamespaces(), 1)
+ s.Equal(active.GetId(), activeList.GetNamespaces()[0].GetId())
+
+ inactiveList, err := s.db.PolicyClient.ListNamespaces(s.ctx, &namespaces.ListNamespacesRequest{
+ State: common.ActiveStateEnum_ACTIVE_STATE_ENUM_INACTIVE,
+ Search: &policy.Search{Term: searchQuery},
+ })
+ s.Require().NoError(err)
+ s.Require().Len(inactiveList.GetNamespaces(), 1)
+ s.Equal(inactive.GetId(), inactiveList.GetNamespaces()[0].GetId())
+}
+
+func (s *NamespacesSuite) Test_ListNamespaces_SearchEmptyQuery_Succeeds() {
+ suffix := time.Now().UnixNano()
+ created, err := s.db.PolicyClient.CreateNamespace(s.ctx, &namespaces.CreateNamespaceRequest{
+ Name: fmt.Sprintf("dspx-search-whitespace-%d.com", suffix),
+ })
+ s.Require().NoError(err)
+ defer s.deleteTestNamespaces([]string{created.GetId()})
+
+ noSearch, err := s.db.PolicyClient.ListNamespaces(s.ctx, &namespaces.ListNamespacesRequest{
+ State: common.ActiveStateEnum_ACTIVE_STATE_ENUM_ANY,
+ })
+ s.Require().NoError(err)
+ emptySearch, err := s.db.PolicyClient.ListNamespaces(s.ctx, &namespaces.ListNamespacesRequest{
+ State: common.ActiveStateEnum_ACTIVE_STATE_ENUM_ANY,
+ Search: &policy.Search{Term: ""},
+ })
+ s.Require().NoError(err)
+ s.Equal(noSearch.GetPagination().GetTotal(), emptySearch.GetPagination().GetTotal())
+}
+
+func (s *NamespacesSuite) Test_ListNamespaces_SearchPaginationAppliesAfterFiltering_Succeeds() {
+ suffix := time.Now().UnixNano()
+ searchToken := fmt.Sprintf("dspx-search-page-%d.com", suffix)
+ names := []string{
+ "a." + searchToken,
+ "b." + searchToken,
+ "c." + searchToken,
+ fmt.Sprintf("dspx-search-page-other-%d.com", suffix),
+ }
+ ids := make([]string, len(names))
+ for i, name := range names {
+ created, err := s.db.PolicyClient.CreateNamespace(s.ctx, &namespaces.CreateNamespaceRequest{Name: name})
+ s.Require().NoError(err)
+ ids[i] = created.GetId()
+ }
+ defer s.deleteTestNamespaces(ids)
+
+ firstPage, err := s.db.PolicyClient.ListNamespaces(s.ctx, &namespaces.ListNamespacesRequest{
+ State: common.ActiveStateEnum_ACTIVE_STATE_ENUM_ANY,
+ Search: &policy.Search{Term: searchToken},
+ Pagination: &policy.PageRequest{Limit: 2},
+ Sort: []*namespaces.NamespacesSort{
+ {Field: namespaces.SortNamespacesType_SORT_NAMESPACES_TYPE_NAME, Direction: policy.SortDirection_SORT_DIRECTION_ASC},
+ },
+ })
+ s.Require().NoError(err)
+ s.Require().Len(firstPage.GetNamespaces(), 2)
+ s.Equal(int32(3), firstPage.GetPagination().GetTotal())
+ s.Equal(int32(2), firstPage.GetPagination().GetNextOffset())
+ s.Equal(ids[0], firstPage.GetNamespaces()[0].GetId())
+ s.Equal(ids[1], firstPage.GetNamespaces()[1].GetId())
+
+ secondPage, err := s.db.PolicyClient.ListNamespaces(s.ctx, &namespaces.ListNamespacesRequest{
+ State: common.ActiveStateEnum_ACTIVE_STATE_ENUM_ANY,
+ Search: &policy.Search{Term: searchToken},
+ Pagination: &policy.PageRequest{Limit: 2, Offset: 2},
+ Sort: []*namespaces.NamespacesSort{
+ {Field: namespaces.SortNamespacesType_SORT_NAMESPACES_TYPE_NAME, Direction: policy.SortDirection_SORT_DIRECTION_ASC},
+ },
+ })
+ s.Require().NoError(err)
+ s.Require().Len(secondPage.GetNamespaces(), 1)
+ s.Equal(int32(3), secondPage.GetPagination().GetTotal())
+ s.Equal(int32(2), secondPage.GetPagination().GetCurrentOffset())
+ s.Equal(int32(0), secondPage.GetPagination().GetNextOffset())
+ s.Equal(ids[2], secondPage.GetNamespaces()[0].GetId())
+}
+
func (s *NamespacesSuite) Test_UpdateNamespace() {
fixedLabel := "fixed label"
updateLabel := "update label"
@@ -1460,8 +1645,8 @@ func (s *NamespacesSuite) createSortTestNamespaces(prefixes []string) []string {
return ids
}
-// deleteSortTestNamespaces deactivates namespaces created by sort tests.
-func (s *NamespacesSuite) deleteSortTestNamespaces(ids []string) {
+// deleteTestNamespaces removes namespaces created by list tests.
+func (s *NamespacesSuite) deleteTestNamespaces(ids []string) {
s.Require().NoError(forceDeleteRows(s.ctx, s.db, "attribute_namespaces", ids))
}
diff --git a/service/policy/db/namespaces.go b/service/policy/db/namespaces.go
index fd0a399e34..520a86e611 100644
--- a/service/policy/db/namespaces.go
+++ b/service/policy/db/namespaces.go
@@ -98,9 +98,11 @@ func (c PolicyDBClient) ListNamespaces(ctx context.Context, r *namespaces.ListNa
}
sortField, sortDirection := GetNamespacesSortParams(r.GetSort())
+ search := pgtypeSubstringSearchPattern(r.GetSearch().GetTerm())
list, err := c.queries.listNamespaces(ctx, listNamespacesParams{
Active: active,
+ Search: search,
Limit: limit,
Offset: offset,
SortField: sortField,
diff --git a/service/policy/db/namespaces.sql.go b/service/policy/db/namespaces.sql.go
index 7bb3937313..ad44b4ea26 100644
--- a/service/policy/db/namespaces.sql.go
+++ b/service/policy/db/namespaces.sql.go
@@ -191,8 +191,8 @@ const listNamespaces = `-- name: listNamespaces :many
WITH params AS (
SELECT
- COALESCE(NULLIF($4::text, ''), 'created_at') AS resolved_field,
- COALESCE(NULLIF($5::text, ''), 'DESC') AS resolved_direction
+ COALESCE(NULLIF($5::text, ''), 'created_at') AS resolved_field,
+ COALESCE(NULLIF($6::text, ''), 'DESC') AS resolved_direction
)
SELECT
COUNT(*) OVER() AS total,
@@ -204,7 +204,14 @@ SELECT
FROM attribute_namespaces ns
LEFT JOIN attribute_fqns fqns ON ns.id = fqns.namespace_id AND fqns.attribute_id IS NULL
CROSS JOIN params p
-WHERE ($1::BOOLEAN IS NULL OR ns.active = $1::BOOLEAN)
+WHERE
+ ($1::BOOLEAN IS NULL OR ns.active = $1::BOOLEAN)
+ -- No search-specific optimization is added here. If needed, consider
+ -- a pg_trgm-backed GIN index on attribute_fqns.fqn.
+ AND (
+ $2::TEXT IS NULL
+ OR fqns.fqn LIKE $2::TEXT ESCAPE '\'
+ )
ORDER BY
CASE WHEN p.resolved_field = 'name' AND p.resolved_direction = 'ASC' THEN ns.name END ASC,
CASE WHEN p.resolved_field = 'name' AND p.resolved_direction = 'DESC' THEN ns.name END DESC,
@@ -215,12 +222,13 @@ ORDER BY
CASE WHEN p.resolved_field = 'updated_at' AND p.resolved_direction = 'ASC' THEN ns.updated_at END ASC,
CASE WHEN p.resolved_field = 'updated_at' AND p.resolved_direction = 'DESC' THEN ns.updated_at END DESC,
ns.id ASC
-LIMIT $3
-OFFSET $2
+LIMIT $4
+OFFSET $3
`
type listNamespacesParams struct {
Active pgtype.Bool `json:"active"`
+ Search pgtype.Text `json:"search"`
Offset int32 `json:"offset_"`
Limit int32 `json:"limit_"`
SortField string `json:"sort_field"`
@@ -242,8 +250,8 @@ type listNamespacesRow struct {
//
// WITH params AS (
// SELECT
-// COALESCE(NULLIF($4::text, ''), 'created_at') AS resolved_field,
-// COALESCE(NULLIF($5::text, ''), 'DESC') AS resolved_direction
+// COALESCE(NULLIF($5::text, ''), 'created_at') AS resolved_field,
+// COALESCE(NULLIF($6::text, ''), 'DESC') AS resolved_direction
// )
// SELECT
// COUNT(*) OVER() AS total,
@@ -255,7 +263,14 @@ type listNamespacesRow struct {
// FROM attribute_namespaces ns
// LEFT JOIN attribute_fqns fqns ON ns.id = fqns.namespace_id AND fqns.attribute_id IS NULL
// CROSS JOIN params p
-// WHERE ($1::BOOLEAN IS NULL OR ns.active = $1::BOOLEAN)
+// WHERE
+// ($1::BOOLEAN IS NULL OR ns.active = $1::BOOLEAN)
+// -- No search-specific optimization is added here. If needed, consider
+// -- a pg_trgm-backed GIN index on attribute_fqns.fqn.
+// AND (
+// $2::TEXT IS NULL
+// OR fqns.fqn LIKE $2::TEXT ESCAPE '\'
+// )
// ORDER BY
// CASE WHEN p.resolved_field = 'name' AND p.resolved_direction = 'ASC' THEN ns.name END ASC,
// CASE WHEN p.resolved_field = 'name' AND p.resolved_direction = 'DESC' THEN ns.name END DESC,
@@ -266,11 +281,12 @@ type listNamespacesRow struct {
// CASE WHEN p.resolved_field = 'updated_at' AND p.resolved_direction = 'ASC' THEN ns.updated_at END ASC,
// CASE WHEN p.resolved_field = 'updated_at' AND p.resolved_direction = 'DESC' THEN ns.updated_at END DESC,
// ns.id ASC
-// LIMIT $3
-// OFFSET $2
+// LIMIT $4
+// OFFSET $3
func (q *Queries) listNamespaces(ctx context.Context, arg listNamespacesParams) ([]listNamespacesRow, error) {
rows, err := q.db.Query(ctx, listNamespaces,
arg.Active,
+ arg.Search,
arg.Offset,
arg.Limit,
arg.SortField,
diff --git a/service/policy/db/queries/namespaces.sql b/service/policy/db/queries/namespaces.sql
index c62c363c46..6ee94df8b6 100644
--- a/service/policy/db/queries/namespaces.sql
+++ b/service/policy/db/queries/namespaces.sql
@@ -18,7 +18,14 @@ SELECT
FROM attribute_namespaces ns
LEFT JOIN attribute_fqns fqns ON ns.id = fqns.namespace_id AND fqns.attribute_id IS NULL
CROSS JOIN params p
-WHERE (sqlc.narg('active')::BOOLEAN IS NULL OR ns.active = sqlc.narg('active')::BOOLEAN)
+WHERE
+ (sqlc.narg('active')::BOOLEAN IS NULL OR ns.active = sqlc.narg('active')::BOOLEAN)
+ -- No search-specific optimization is added here. If needed, consider
+ -- a pg_trgm-backed GIN index on attribute_fqns.fqn.
+ AND (
+ sqlc.narg('search')::TEXT IS NULL
+ OR fqns.fqn LIKE sqlc.narg('search')::TEXT ESCAPE '\'
+ )
ORDER BY
CASE WHEN p.resolved_field = 'name' AND p.resolved_direction = 'ASC' THEN ns.name END ASC,
CASE WHEN p.resolved_field = 'name' AND p.resolved_direction = 'DESC' THEN ns.name END DESC,
diff --git a/service/policy/db/utils.go b/service/policy/db/utils.go
index 7e43fd63cd..a156322ad7 100644
--- a/service/policy/db/utils.go
+++ b/service/policy/db/utils.go
@@ -4,6 +4,7 @@ import (
"encoding/json"
"errors"
"fmt"
+ "strings"
"github.com/google/uuid"
"github.com/jackc/pgx/v5/pgtype"
@@ -162,6 +163,26 @@ func GetRegisteredResourcesSortParams(sort []*registeredresources.RegisteredReso
return getRegisteredResourcesSortField(sort[0].GetField()), getSortDirection(sort[0].GetDirection())
}
+func pgtypeSubstringSearchPattern(query string) pgtype.Text {
+ query = strings.TrimSpace(query)
+ if query == "" {
+ return pgtype.Text{}
+ }
+ // PostgreSQL docs: Chapter 9 "Functions and Operators", Section 9.7.1 "LIKE".
+ // In LIKE patterns, % and _ are wildcards; ESCAPE '\' makes them literals.
+ // The pattern is passed as a sqlc parameter; escaping here keeps LIKE
+ // wildcard characters from expanding the user-provided search term.
+ return pgtypeText("%" + escapeLikePattern(strings.ToLower(query)) + "%")
+}
+
+func escapeLikePattern(query string) string {
+ return strings.NewReplacer(
+ `\`, `\\`,
+ `%`, `\%`,
+ `_`, `\_`,
+ ).Replace(query)
+}
+
// Returns next page's offset if has not yet reached total, or else returns 0
func getNextOffset(currentOffset, limit, total int32) int32 {
next := currentOffset + limit
diff --git a/service/policy/db/utils_test.go b/service/policy/db/utils_test.go
index 4adfbfe5be..a325ddcf06 100644
--- a/service/policy/db/utils_test.go
+++ b/service/policy/db/utils_test.go
@@ -40,6 +40,65 @@ func Test_GetListLimit(t *testing.T) {
}
}
+func TestPgtypeSubstringSearchPattern(t *testing.T) {
+ tests := []struct {
+ name string
+ query string
+ want string
+ valid bool
+ }{
+ {
+ name: "empty query",
+ query: "",
+ valid: false,
+ },
+ {
+ name: "whitespace only query",
+ query: " \t\n ",
+ valid: false,
+ },
+ {
+ name: "trims query",
+ query: " namespace ",
+ want: "%namespace%",
+ valid: true,
+ },
+ {
+ name: "lowercases namespace fqn",
+ query: "HTTPS://Tenant.Example.COM",
+ want: "%https://tenant.example.com%",
+ valid: true,
+ },
+ {
+ name: "escapes like wildcard literals",
+ query: "tenant_%example.com",
+ want: `%tenant\_\%example.com%`,
+ valid: true,
+ },
+ {
+ name: "escapes like escape literal",
+ query: `tenant\example.com`,
+ want: `%tenant\\example.com%`,
+ valid: true,
+ },
+ {
+ name: "keeps sql-ish input in parameter value",
+ query: `%' OR 1=1 --`,
+ want: `%\%' or 1=1 --%`,
+ valid: true,
+ },
+ }
+
+ for _, tc := range tests {
+ t.Run(tc.name, func(t *testing.T) {
+ got := pgtypeSubstringSearchPattern(tc.query)
+
+ assert.Equal(t, tc.valid, got.Valid)
+ assert.Equal(t, tc.want, got.String)
+ })
+ }
+}
+
func Test_GetNextOffset(t *testing.T) {
var defaultTestListLimit int32 = 250
cases := []struct {
diff --git a/service/policy/namespaces/namespaces_test.go b/service/policy/namespaces/namespaces_test.go
index 40c018c3db..4c0eb97ba2 100644
--- a/service/policy/namespaces/namespaces_test.go
+++ b/service/policy/namespaces/namespaces_test.go
@@ -376,6 +376,16 @@ func Test_ListNamespacesRequest_Sort(t *testing.T) {
require.Contains(t, err.Error(), "sort")
}
+func Test_ListNamespacesRequest_Search(t *testing.T) {
+ v := getValidator()
+
+ req := &namespaces.ListNamespacesRequest{
+ Search: &policy.Search{Term: "namespace"},
+ }
+ require.NoError(t, v.Validate(req))
+ require.NoError(t, v.Validate(&namespaces.ListNamespacesRequest{}))
+}
+
func Test_RemovePublicKeyFromNamespace(t *testing.T) {
testCases := []struct {
name string
From 5bfd0c0070fce09699407b44a40aaedd2f1738b2 Mon Sep 17 00:00:00 2001
From: Chris Reed <87077975+c-r33d@users.noreply.github.com>
Date: Tue, 2 Jun 2026 09:14:38 -0500
Subject: [PATCH 04/10] feat(policy): add search support to ListAttributes
(#3554)
## Summary
- Adds ListAttributes RPC search support by wiring request search into
the policy DB list query.
- Applies escaped, case-insensitive matching in the attributes SQL path
and adds integration coverage for search behavior, wildcard literals,
empty search, and pagination after filtering.
## Summary by CodeRabbit
* **New Features**
* Added search functionality for attributes, including filtering by
fully qualified name with wildcard escaping and combined namespace/state
filters.
* **Tests**
* Added comprehensive integration tests for attribute search operations,
including pagination and filter combinations.
* **Chores**
* Updated sqlc tool to version 1.31.1.
---------
Signed-off-by: Chris Reed
---
.github/workflows/checks.yaml | 2 +-
Makefile | 2 +-
service/integration/attributes_test.go | 253 ++++++++++++++++--
service/integration/utils.go | 13 +
service/policy/db/actions.sql.go | 2 +-
service/policy/db/attribute_fqn.sql.go | 2 +-
service/policy/db/attribute_values.sql.go | 2 +-
service/policy/db/attributes.go | 2 +
service/policy/db/attributes.sql.go | 32 ++-
service/policy/db/copyfrom.go | 2 +-
service/policy/db/db.go | 2 +-
.../db/key_access_server_registry.sql.go | 2 +-
service/policy/db/key_management.sql.go | 2 +-
service/policy/db/models.go | 2 +-
service/policy/db/namespaces.sql.go | 2 +-
service/policy/db/obligations.sql.go | 2 +-
service/policy/db/queries/attributes.sql | 6 +
service/policy/db/registered_resources.sql.go | 2 +-
service/policy/db/resource_mapping.sql.go | 2 +-
service/policy/db/subject_mappings.sql.go | 2 +-
20 files changed, 296 insertions(+), 40 deletions(-)
diff --git a/.github/workflows/checks.yaml b/.github/workflows/checks.yaml
index 3dda529664..6c7a78bd71 100644
--- a/.github/workflows/checks.yaml
+++ b/.github/workflows/checks.yaml
@@ -114,7 +114,7 @@ jobs:
if: matrix.directory == 'service'
uses: sqlc-dev/setup-sqlc@bac53b7fb28c039a6c7f5736fd1e89744021bdd6 # v5.0.0
with:
- sqlc-version: '1.31.0'
+ sqlc-version: '1.31.1'
- name: verify sqlc generate
if: matrix.directory == 'service'
run: make policy-sql-gen
diff --git a/Makefile b/Makefile
index 017a9c33ca..b5f285d89f 100644
--- a/Makefile
+++ b/Makefile
@@ -6,7 +6,7 @@
MODS=protocol/go lib/ocrypto lib/fixtures lib/flattening lib/identifier sdk service examples otdfctl tests-bdd
HAND_MODS=lib/ocrypto lib/fixtures lib/flattening lib/identifier sdk service examples otdfctl tests-bdd
REQUIRED_BUF_VERSION=1.70.0
-REQUIRED_SQLC_VERSION=1.31.0
+REQUIRED_SQLC_VERSION=1.31.1
ROOT_DIR:=$(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))
diff --git a/service/integration/attributes_test.go b/service/integration/attributes_test.go
index 2e2c29c32b..49563a7d67 100644
--- a/service/integration/attributes_test.go
+++ b/service/integration/attributes_test.go
@@ -480,6 +480,7 @@ func (s *AttributesSuite) Test_ListAttributes_OrdersByCreatedAt_Succeeds() {
ns, err := s.db.PolicyClient.CreateNamespace(s.ctx, &namespaces.CreateNamespaceRequest{Name: nsName})
s.Require().NoError(err)
s.Require().NotNil(ns)
+ defer deleteNamespaces(s.ctx, s.T(), s.db, []string{ns.GetId()})
create := func(i int) string {
name := fmt.Sprintf("order-test-attr-%d-%d", i, suffix)
@@ -511,7 +512,7 @@ func (s *AttributesSuite) Test_ListAttributes_OrdersByCreatedAt_Succeeds() {
func (s *AttributesSuite) Test_ListAttributes_SortByName_ASC() {
nsID := s.createSortTestNamespace("sort-name-asc")
ids := s.createSortTestAttributes(nsID, []string{"aaa-sort", "bbb-sort", "ccc-sort"})
- defer s.deleteSortTestAttributes(ids)
+ defer deleteNamespaces(s.ctx, s.T(), s.db, []string{nsID})
listRsp, err := s.db.PolicyClient.ListAttributes(s.ctx, &attributes.ListAttributesRequest{
Namespace: nsID,
@@ -529,7 +530,7 @@ func (s *AttributesSuite) Test_ListAttributes_SortByName_ASC() {
func (s *AttributesSuite) Test_ListAttributes_SortByName_DESC() {
nsID := s.createSortTestNamespace("sort-name-desc")
ids := s.createSortTestAttributes(nsID, []string{"aaa-sortdesc", "bbb-sortdesc", "ccc-sortdesc"})
- defer s.deleteSortTestAttributes(ids)
+ defer deleteNamespaces(s.ctx, s.T(), s.db, []string{nsID})
listRsp, err := s.db.PolicyClient.ListAttributes(s.ctx, &attributes.ListAttributesRequest{
Namespace: nsID,
@@ -547,7 +548,7 @@ func (s *AttributesSuite) Test_ListAttributes_SortByName_DESC() {
func (s *AttributesSuite) Test_ListAttributes_SortByCreatedAt_ASC() {
nsID := s.createSortTestNamespace("sort-created-asc")
ids := s.createSortTestAttributes(nsID, []string{"createdasc-attr-0", "createdasc-attr-1", "createdasc-attr-2"})
- defer s.deleteSortTestAttributes(ids)
+ defer deleteNamespaces(s.ctx, s.T(), s.db, []string{nsID})
listRsp, err := s.db.PolicyClient.ListAttributes(s.ctx, &attributes.ListAttributesRequest{
Namespace: nsID,
@@ -565,7 +566,7 @@ func (s *AttributesSuite) Test_ListAttributes_SortByCreatedAt_ASC() {
func (s *AttributesSuite) Test_ListAttributes_SortByCreatedAt_DESC() {
nsID := s.createSortTestNamespace("sort-created-desc")
ids := s.createSortTestAttributes(nsID, []string{"createddesc-attr-0", "createddesc-attr-1", "createddesc-attr-2"})
- defer s.deleteSortTestAttributes(ids)
+ defer deleteNamespaces(s.ctx, s.T(), s.db, []string{nsID})
listRsp, err := s.db.PolicyClient.ListAttributes(s.ctx, &attributes.ListAttributesRequest{
Namespace: nsID,
@@ -583,7 +584,7 @@ func (s *AttributesSuite) Test_ListAttributes_SortByCreatedAt_DESC() {
func (s *AttributesSuite) Test_ListAttributes_SortByUpdatedAt_DESC() {
nsID := s.createSortTestNamespace("sort-updated-desc")
ids := s.createSortTestAttributes(nsID, []string{"upd-sort-attr-0", "upd-sort-attr-1", "upd-sort-attr-2"})
- defer s.deleteSortTestAttributes(ids)
+ defer deleteNamespaces(s.ctx, s.T(), s.db, []string{nsID})
// Update the first attribute so its updated_at is the most recent
time.Sleep(5 * time.Millisecond)
@@ -612,7 +613,7 @@ func (s *AttributesSuite) Test_ListAttributes_SortByUpdatedAt_DESC() {
func (s *AttributesSuite) Test_ListAttributes_SortByUpdatedAt_ASC() {
nsID := s.createSortTestNamespace("sort-updated-asc")
ids := s.createSortTestAttributes(nsID, []string{"upd-sort-asc-attr-0", "upd-sort-asc-attr-1", "upd-sort-asc-attr-2"})
- defer s.deleteSortTestAttributes(ids)
+ defer deleteNamespaces(s.ctx, s.T(), s.db, []string{nsID})
// Update the last attribute so its updated_at is the most recent
time.Sleep(5 * time.Millisecond)
@@ -652,7 +653,7 @@ func (s *AttributesSuite) Test_ListAttributes_SortTieBreaker_CreatedAtWithIDFall
s.Require().NoError(err)
ids[i] = created.GetId()
}
- defer s.deleteSortTestAttributes(ids)
+ defer deleteNamespaces(s.ctx, s.T(), s.db, []string{nsID})
s.Require().NoError(forceCreatedAtTie(s.ctx, s.db, "attribute_definitions", ids))
@@ -673,7 +674,7 @@ func (s *AttributesSuite) Test_ListAttributes_SortTieBreaker_CreatedAtWithIDFall
func (s *AttributesSuite) Test_ListAttributes_SortByUnspecifiedField_DefaultsToCreatedAt() {
nsID := s.createSortTestNamespace("sort-unspecified-field")
ids := s.createSortTestAttributes(nsID, []string{"unspecified-field-attr-0", "unspecified-field-attr-1", "unspecified-field-attr-2"})
- defer s.deleteSortTestAttributes(ids)
+ defer deleteNamespaces(s.ctx, s.T(), s.db, []string{nsID})
listRsp, err := s.db.PolicyClient.ListAttributes(s.ctx, &attributes.ListAttributesRequest{
Namespace: nsID,
@@ -691,7 +692,7 @@ func (s *AttributesSuite) Test_ListAttributes_SortByUnspecifiedField_DefaultsToC
func (s *AttributesSuite) Test_ListAttributes_SortByUnspecifiedDirection_DefaultsToDESC() {
nsID := s.createSortTestNamespace("sort-unspecified-dir")
ids := s.createSortTestAttributes(nsID, []string{"unspecified-dir-attr-0", "unspecified-dir-attr-1", "unspecified-dir-attr-2"})
- defer s.deleteSortTestAttributes(ids)
+ defer deleteNamespaces(s.ctx, s.T(), s.db, []string{nsID})
listRsp, err := s.db.PolicyClient.ListAttributes(s.ctx, &attributes.ListAttributesRequest{
Namespace: nsID,
@@ -709,7 +710,7 @@ func (s *AttributesSuite) Test_ListAttributes_SortByUnspecifiedDirection_Default
func (s *AttributesSuite) Test_ListAttributes_SortByBothUnspecified_DefaultsToCreatedAtDESC() {
nsID := s.createSortTestNamespace("sort-both-unspecified")
ids := s.createSortTestAttributes(nsID, []string{"both-unspecified-attr-0", "both-unspecified-attr-1", "both-unspecified-attr-2"})
- defer s.deleteSortTestAttributes(ids)
+ defer deleteNamespaces(s.ctx, s.T(), s.db, []string{nsID})
listRsp, err := s.db.PolicyClient.ListAttributes(s.ctx, &attributes.ListAttributesRequest{
Namespace: nsID,
@@ -727,7 +728,7 @@ func (s *AttributesSuite) Test_ListAttributes_SortByBothUnspecified_DefaultsToCr
func (s *AttributesSuite) Test_ListAttributes_SortOmitted() {
nsID := s.createSortTestNamespace("sort-omitted")
ids := s.createSortTestAttributes(nsID, []string{"omitted-sort-attr-0", "omitted-sort-attr-1", "omitted-sort-attr-2"})
- defer s.deleteSortTestAttributes(ids)
+ defer deleteNamespaces(s.ctx, s.T(), s.db, []string{nsID})
listRsp, err := s.db.PolicyClient.ListAttributes(s.ctx, &attributes.ListAttributesRequest{
Namespace: nsID,
@@ -820,6 +821,231 @@ func (s *AttributesSuite) Test_ListAttributes_Offset_Succeeds() {
}
}
+func (s *AttributesSuite) Test_ListAttributes_SearchByFqn_Succeeds() {
+ suffix := time.Now().UnixNano()
+ ns, err := s.db.PolicyClient.CreateNamespace(s.ctx, &namespaces.CreateNamespaceRequest{
+ Name: fmt.Sprintf("dspx-search-attrs-%d.com", suffix),
+ })
+ s.Require().NoError(err)
+ defer deleteNamespaces(s.ctx, s.T(), s.db, []string{ns.GetId()})
+
+ alpha, err := s.db.PolicyClient.CreateAttribute(s.ctx, &attributes.CreateAttributeRequest{
+ Name: fmt.Sprintf("dspx-search-alpha-%d", suffix),
+ NamespaceId: ns.GetId(),
+ Rule: policy.AttributeRuleTypeEnum_ATTRIBUTE_RULE_TYPE_ENUM_ALL_OF,
+ })
+ s.Require().NoError(err)
+ beta, err := s.db.PolicyClient.CreateAttribute(s.ctx, &attributes.CreateAttributeRequest{
+ Name: fmt.Sprintf("dspx-search-beta-%d", suffix),
+ NamespaceId: ns.GetId(),
+ Rule: policy.AttributeRuleTypeEnum_ATTRIBUTE_RULE_TYPE_ENUM_ALL_OF,
+ })
+ s.Require().NoError(err)
+
+ byNameSubstring, err := s.db.PolicyClient.ListAttributes(s.ctx, &attributes.ListAttributesRequest{
+ State: common.ActiveStateEnum_ACTIVE_STATE_ENUM_ANY,
+ Search: &policy.Search{Term: strings.ToUpper(alpha.GetName())},
+ })
+ s.Require().NoError(err)
+ s.Require().Len(byNameSubstring.GetAttributes(), 1)
+ s.Equal(alpha.GetId(), byNameSubstring.GetAttributes()[0].GetId())
+ s.Equal(int32(1), byNameSubstring.GetPagination().GetTotal())
+
+ byFqn, err := s.db.PolicyClient.ListAttributes(s.ctx, &attributes.ListAttributesRequest{
+ State: common.ActiveStateEnum_ACTIVE_STATE_ENUM_ANY,
+ Search: &policy.Search{Term: strings.ToUpper(beta.GetFqn())},
+ })
+ s.Require().NoError(err)
+ s.Require().Len(byFqn.GetAttributes(), 1)
+ s.Equal(beta.GetId(), byFqn.GetAttributes()[0].GetId())
+ s.Equal(int32(1), byFqn.GetPagination().GetTotal())
+}
+
+func (s *AttributesSuite) Test_ListAttributes_SearchEscapesLikeWildcardLiterals_Succeeds() {
+ suffix := time.Now().UnixNano()
+ ns, err := s.db.PolicyClient.CreateNamespace(s.ctx, &namespaces.CreateNamespaceRequest{
+ Name: fmt.Sprintf("dspx-search-like-attrs-%d.com", suffix),
+ })
+ s.Require().NoError(err)
+ defer deleteNamespaces(s.ctx, s.T(), s.db, []string{ns.GetId()})
+
+ _, err = s.db.PolicyClient.CreateAttribute(s.ctx, &attributes.CreateAttributeRequest{
+ Name: fmt.Sprintf("wildcarda-%d", suffix),
+ NamespaceId: ns.GetId(),
+ Rule: policy.AttributeRuleTypeEnum_ATTRIBUTE_RULE_TYPE_ENUM_ALL_OF,
+ })
+ s.Require().NoError(err)
+ _, err = s.db.PolicyClient.CreateAttribute(s.ctx, &attributes.CreateAttributeRequest{
+ Name: fmt.Sprintf("wildcardb-%d", suffix),
+ NamespaceId: ns.GetId(),
+ Rule: policy.AttributeRuleTypeEnum_ATTRIBUTE_RULE_TYPE_ENUM_ALL_OF,
+ })
+ s.Require().NoError(err)
+
+ for _, query := range []string{
+ fmt.Sprintf("wildcard_-%d", suffix),
+ fmt.Sprintf("wildcard%%-%d", suffix),
+ } {
+ list, err := s.db.PolicyClient.ListAttributes(s.ctx, &attributes.ListAttributesRequest{
+ State: common.ActiveStateEnum_ACTIVE_STATE_ENUM_ANY,
+ Namespace: ns.GetId(),
+ Search: &policy.Search{Term: query},
+ })
+ s.Require().NoError(err)
+ s.Empty(list.GetAttributes())
+ s.Equal(int32(0), list.GetPagination().GetTotal())
+ }
+}
+
+func (s *AttributesSuite) Test_ListAttributes_SearchCombinesWithStateAndNamespace_Succeeds() {
+ suffix := time.Now().UnixNano()
+ searchQuery := fmt.Sprintf("dspx-search-state-attrs-%d", suffix)
+ firstNS, err := s.db.PolicyClient.CreateNamespace(s.ctx, &namespaces.CreateNamespaceRequest{
+ Name: fmt.Sprintf("dspx-search-state-attrs-a-%d.com", suffix),
+ })
+ s.Require().NoError(err)
+ secondNS, err := s.db.PolicyClient.CreateNamespace(s.ctx, &namespaces.CreateNamespaceRequest{
+ Name: fmt.Sprintf("dspx-search-state-attrs-b-%d.com", suffix),
+ })
+ s.Require().NoError(err)
+ defer deleteNamespaces(s.ctx, s.T(), s.db, []string{firstNS.GetId(), secondNS.GetId()})
+
+ active, err := s.db.PolicyClient.CreateAttribute(s.ctx, &attributes.CreateAttributeRequest{
+ Name: "active-" + searchQuery,
+ NamespaceId: firstNS.GetId(),
+ Rule: policy.AttributeRuleTypeEnum_ATTRIBUTE_RULE_TYPE_ENUM_ALL_OF,
+ })
+ s.Require().NoError(err)
+ inactive, err := s.db.PolicyClient.CreateAttribute(s.ctx, &attributes.CreateAttributeRequest{
+ Name: "inactive-" + searchQuery,
+ NamespaceId: firstNS.GetId(),
+ Rule: policy.AttributeRuleTypeEnum_ATTRIBUTE_RULE_TYPE_ENUM_ALL_OF,
+ })
+ s.Require().NoError(err)
+ _, err = s.db.PolicyClient.CreateAttribute(s.ctx, &attributes.CreateAttributeRequest{
+ Name: "other-namespace-" + searchQuery,
+ NamespaceId: secondNS.GetId(),
+ Rule: policy.AttributeRuleTypeEnum_ATTRIBUTE_RULE_TYPE_ENUM_ALL_OF,
+ })
+ s.Require().NoError(err)
+ _, err = s.db.PolicyClient.DeactivateAttribute(s.ctx, inactive.GetId())
+ s.Require().NoError(err)
+
+ activeList, err := s.db.PolicyClient.ListAttributes(s.ctx, &attributes.ListAttributesRequest{
+ State: common.ActiveStateEnum_ACTIVE_STATE_ENUM_ACTIVE,
+ Namespace: firstNS.GetId(),
+ Search: &policy.Search{Term: searchQuery},
+ })
+ s.Require().NoError(err)
+ s.Require().Len(activeList.GetAttributes(), 1)
+ s.Equal(active.GetId(), activeList.GetAttributes()[0].GetId())
+
+ inactiveList, err := s.db.PolicyClient.ListAttributes(s.ctx, &attributes.ListAttributesRequest{
+ State: common.ActiveStateEnum_ACTIVE_STATE_ENUM_INACTIVE,
+ Namespace: firstNS.GetId(),
+ Search: &policy.Search{Term: searchQuery},
+ })
+ s.Require().NoError(err)
+ s.Require().Len(inactiveList.GetAttributes(), 1)
+ s.Equal(inactive.GetId(), inactiveList.GetAttributes()[0].GetId())
+}
+
+func (s *AttributesSuite) Test_ListAttributes_SearchEmptyAndWhitespaceQuery_Succeeds() {
+ suffix := time.Now().UnixNano()
+ ns, err := s.db.PolicyClient.CreateNamespace(s.ctx, &namespaces.CreateNamespaceRequest{
+ Name: fmt.Sprintf("dspx-search-empty-attrs-%d.com", suffix),
+ })
+ s.Require().NoError(err)
+ defer deleteNamespaces(s.ctx, s.T(), s.db, []string{ns.GetId()})
+
+ _, err = s.db.PolicyClient.CreateAttribute(s.ctx, &attributes.CreateAttributeRequest{
+ Name: fmt.Sprintf("dspx-search-empty-attr-%d", suffix),
+ NamespaceId: ns.GetId(),
+ Rule: policy.AttributeRuleTypeEnum_ATTRIBUTE_RULE_TYPE_ENUM_ALL_OF,
+ })
+ s.Require().NoError(err)
+
+ noSearch, err := s.db.PolicyClient.ListAttributes(s.ctx, &attributes.ListAttributesRequest{
+ State: common.ActiveStateEnum_ACTIVE_STATE_ENUM_ANY,
+ Namespace: ns.GetId(),
+ })
+ s.Require().NoError(err)
+ emptySearch, err := s.db.PolicyClient.ListAttributes(s.ctx, &attributes.ListAttributesRequest{
+ State: common.ActiveStateEnum_ACTIVE_STATE_ENUM_ANY,
+ Namespace: ns.GetId(),
+ Search: &policy.Search{Term: ""},
+ })
+ s.Require().NoError(err)
+ s.Equal(noSearch.GetPagination().GetTotal(), emptySearch.GetPagination().GetTotal())
+
+ whitespaceSearch, err := s.db.PolicyClient.ListAttributes(s.ctx, &attributes.ListAttributesRequest{
+ State: common.ActiveStateEnum_ACTIVE_STATE_ENUM_ANY,
+ Namespace: ns.GetId(),
+ Search: &policy.Search{Term: " "},
+ })
+ s.Require().NoError(err)
+ s.Equal(noSearch.GetPagination().GetTotal(), whitespaceSearch.GetPagination().GetTotal())
+}
+
+func (s *AttributesSuite) Test_ListAttributes_SearchPaginationAppliesAfterFiltering_Succeeds() {
+ suffix := time.Now().UnixNano()
+ searchToken := fmt.Sprintf("dspx-search-page-attrs-%d", suffix)
+ ns, err := s.db.PolicyClient.CreateNamespace(s.ctx, &namespaces.CreateNamespaceRequest{
+ Name: fmt.Sprintf("dspx-page-attrs-ns-%d.com", suffix),
+ })
+ s.Require().NoError(err)
+ defer deleteNamespaces(s.ctx, s.T(), s.db, []string{ns.GetId()})
+
+ names := []string{
+ "a-" + searchToken,
+ "b-" + searchToken,
+ "c-" + searchToken,
+ fmt.Sprintf("dspx-search-page-attrs-other-%d", suffix),
+ }
+ ids := make([]string, len(names))
+ for i, name := range names {
+ created, err := s.db.PolicyClient.CreateAttribute(s.ctx, &attributes.CreateAttributeRequest{
+ Name: name,
+ NamespaceId: ns.GetId(),
+ Rule: policy.AttributeRuleTypeEnum_ATTRIBUTE_RULE_TYPE_ENUM_ALL_OF,
+ })
+ s.Require().NoError(err)
+ ids[i] = created.GetId()
+ }
+
+ firstPage, err := s.db.PolicyClient.ListAttributes(s.ctx, &attributes.ListAttributesRequest{
+ State: common.ActiveStateEnum_ACTIVE_STATE_ENUM_ANY,
+ Namespace: ns.GetId(),
+ Search: &policy.Search{Term: searchToken},
+ Pagination: &policy.PageRequest{Limit: 2},
+ Sort: []*attributes.AttributesSort{
+ {Field: attributes.SortAttributesType_SORT_ATTRIBUTES_TYPE_NAME, Direction: policy.SortDirection_SORT_DIRECTION_ASC},
+ },
+ })
+ s.Require().NoError(err)
+ s.Require().Len(firstPage.GetAttributes(), 2)
+ s.Equal(int32(3), firstPage.GetPagination().GetTotal())
+ s.Equal(int32(2), firstPage.GetPagination().GetNextOffset())
+ s.Equal(ids[0], firstPage.GetAttributes()[0].GetId())
+ s.Equal(ids[1], firstPage.GetAttributes()[1].GetId())
+
+ secondPage, err := s.db.PolicyClient.ListAttributes(s.ctx, &attributes.ListAttributesRequest{
+ State: common.ActiveStateEnum_ACTIVE_STATE_ENUM_ANY,
+ Namespace: ns.GetId(),
+ Search: &policy.Search{Term: searchToken},
+ Pagination: &policy.PageRequest{Limit: 2, Offset: 2},
+ Sort: []*attributes.AttributesSort{
+ {Field: attributes.SortAttributesType_SORT_ATTRIBUTES_TYPE_NAME, Direction: policy.SortDirection_SORT_DIRECTION_ASC},
+ },
+ })
+ s.Require().NoError(err)
+ s.Require().Len(secondPage.GetAttributes(), 1)
+ s.Equal(int32(3), secondPage.GetPagination().GetTotal())
+ s.Equal(int32(2), secondPage.GetPagination().GetCurrentOffset())
+ s.Equal(int32(0), secondPage.GetPagination().GetNextOffset())
+ s.Equal(ids[2], secondPage.GetAttributes()[0].GetId())
+}
+
func (s *AttributesSuite) Test_ListAttributes_FqnsIncluded() {
// create an attribute
attr := &attributes.CreateAttributeRequest{
@@ -1911,11 +2137,6 @@ func (s *AttributesSuite) createSortTestAttributes(nsID string, prefixes []strin
return ids
}
-// deleteSortTestAttributes deactivates attributes created by sort tests.
-func (s *AttributesSuite) deleteSortTestAttributes(ids []string) {
- s.Require().NoError(forceDeleteRows(s.ctx, s.db, "attribute_definitions", ids))
-}
-
func (s *AttributesSuite) getAttributeFixtures() map[string]fixtures.FixtureDataAttribute {
return map[string]fixtures.FixtureDataAttribute{
"example.com/attr/attr1": s.f.GetAttributeKey("example.com/attr/attr1"),
diff --git a/service/integration/utils.go b/service/integration/utils.go
index 27b5121906..dd80e234fb 100644
--- a/service/integration/utils.go
+++ b/service/integration/utils.go
@@ -5,6 +5,7 @@ import (
"fmt"
"testing"
+ "github.com/opentdf/platform/protocol/go/policy/namespaces"
"github.com/opentdf/platform/service/internal/fixtures"
"github.com/stretchr/testify/require"
)
@@ -44,6 +45,18 @@ func forceDeleteRows(ctx context.Context, db fixtures.DBInterface, table string,
return err
}
+func deleteNamespaces(ctx context.Context, tb testing.TB, db fixtures.DBInterface, ids []string) {
+ tb.Helper()
+
+ for _, id := range ids {
+ ns, err := db.PolicyClient.GetNamespace(ctx, &namespaces.GetNamespaceRequest_NamespaceId{NamespaceId: id})
+ require.NoError(tb, err)
+
+ _, err = db.PolicyClient.UnsafeDeleteNamespace(ctx, ns, ns.GetFqn())
+ require.NoError(tb, err)
+ }
+}
+
// forceCreatedAtTie sets created_at to a fixed timestamp for the given IDs,
// guaranteeing that the ORDER BY tiebreaker (id ASC) determines sort order.
func forceCreatedAtTie(ctx context.Context, db fixtures.DBInterface, table string, ids []string) error {
diff --git a/service/policy/db/actions.sql.go b/service/policy/db/actions.sql.go
index e3648ce58b..9b22b85bc7 100644
--- a/service/policy/db/actions.sql.go
+++ b/service/policy/db/actions.sql.go
@@ -1,6 +1,6 @@
// Code generated by sqlc. DO NOT EDIT.
// versions:
-// sqlc v1.31.0
+// sqlc v1.31.1
// source: actions.sql
package db
diff --git a/service/policy/db/attribute_fqn.sql.go b/service/policy/db/attribute_fqn.sql.go
index 6765e8ef51..36ddd6192e 100644
--- a/service/policy/db/attribute_fqn.sql.go
+++ b/service/policy/db/attribute_fqn.sql.go
@@ -1,6 +1,6 @@
// Code generated by sqlc. DO NOT EDIT.
// versions:
-// sqlc v1.31.0
+// sqlc v1.31.1
// source: attribute_fqn.sql
package db
diff --git a/service/policy/db/attribute_values.sql.go b/service/policy/db/attribute_values.sql.go
index 1611d803a1..10d10234fc 100644
--- a/service/policy/db/attribute_values.sql.go
+++ b/service/policy/db/attribute_values.sql.go
@@ -1,6 +1,6 @@
// Code generated by sqlc. DO NOT EDIT.
// versions:
-// sqlc v1.31.0
+// sqlc v1.31.1
// source: attribute_values.sql
package db
diff --git a/service/policy/db/attributes.go b/service/policy/db/attributes.go
index 3fb9c47e57..9d79ac9332 100644
--- a/service/policy/db/attributes.go
+++ b/service/policy/db/attributes.go
@@ -147,11 +147,13 @@ func (c PolicyDBClient) ListAttributes(ctx context.Context, r *attributes.ListAt
}
sortField, sortDirection := GetAttributesSortParams(r.GetSort())
+ search := pgtypeSubstringSearchPattern(r.GetSearch().GetTerm())
list, err := c.queries.listAttributesDetail(ctx, listAttributesDetailParams{
Active: active,
NamespaceID: pgtypeUUID(namespaceID),
NamespaceName: pgtypeText(namespaceName),
+ Search: search,
Limit: limit,
Offset: offset,
SortField: sortField,
diff --git a/service/policy/db/attributes.sql.go b/service/policy/db/attributes.sql.go
index a7a235a25f..df46e9e680 100644
--- a/service/policy/db/attributes.sql.go
+++ b/service/policy/db/attributes.sql.go
@@ -1,6 +1,6 @@
// Code generated by sqlc. DO NOT EDIT.
// versions:
-// sqlc v1.31.0
+// sqlc v1.31.1
// source: attributes.sql
package db
@@ -760,8 +760,8 @@ const listAttributesDetail = `-- name: listAttributesDetail :many
WITH params AS (
SELECT
- COALESCE(NULLIF($6::text, ''), 'created_at') AS resolved_field,
- COALESCE(NULLIF($7::text, ''), 'DESC') AS resolved_direction
+ COALESCE(NULLIF($7::text, ''), 'created_at') AS resolved_field,
+ COALESCE(NULLIF($8::text, ''), 'DESC') AS resolved_direction
)
SELECT
ad.id,
@@ -799,6 +799,12 @@ WHERE
($1::BOOLEAN IS NULL OR ad.active = $1) AND
($2::uuid IS NULL OR ad.namespace_id = $2::uuid) AND
($3::text IS NULL OR n.name = $3::text)
+ -- No search-specific optimization is added here. If needed, consider
+ -- a pg_trgm-backed GIN index on attribute_fqns.fqn.
+ AND (
+ $4::TEXT IS NULL
+ OR fqns.fqn LIKE $4::TEXT ESCAPE '\'
+ )
GROUP BY ad.id, n.name, fqns.fqn, p.resolved_field, p.resolved_direction
ORDER BY
CASE WHEN p.resolved_field = 'name' AND p.resolved_direction = 'ASC' THEN ad.name END ASC,
@@ -808,14 +814,15 @@ ORDER BY
CASE WHEN p.resolved_field = 'updated_at' AND p.resolved_direction = 'ASC' THEN ad.updated_at END ASC,
CASE WHEN p.resolved_field = 'updated_at' AND p.resolved_direction = 'DESC' THEN ad.updated_at END DESC,
ad.id ASC
-LIMIT $5
-OFFSET $4
+LIMIT $6
+OFFSET $5
`
type listAttributesDetailParams struct {
Active pgtype.Bool `json:"active"`
NamespaceID pgtype.UUID `json:"namespace_id"`
NamespaceName pgtype.Text `json:"namespace_name"`
+ Search pgtype.Text `json:"search"`
Offset int32 `json:"offset_"`
Limit int32 `json:"limit_"`
SortField string `json:"sort_field"`
@@ -842,8 +849,8 @@ type listAttributesDetailRow struct {
//
// WITH params AS (
// SELECT
-// COALESCE(NULLIF($6::text, ''), 'created_at') AS resolved_field,
-// COALESCE(NULLIF($7::text, ''), 'DESC') AS resolved_direction
+// COALESCE(NULLIF($7::text, ''), 'created_at') AS resolved_field,
+// COALESCE(NULLIF($8::text, ''), 'DESC') AS resolved_direction
// )
// SELECT
// ad.id,
@@ -881,6 +888,12 @@ type listAttributesDetailRow struct {
// ($1::BOOLEAN IS NULL OR ad.active = $1) AND
// ($2::uuid IS NULL OR ad.namespace_id = $2::uuid) AND
// ($3::text IS NULL OR n.name = $3::text)
+// -- No search-specific optimization is added here. If needed, consider
+// -- a pg_trgm-backed GIN index on attribute_fqns.fqn.
+// AND (
+// $4::TEXT IS NULL
+// OR fqns.fqn LIKE $4::TEXT ESCAPE '\'
+// )
// GROUP BY ad.id, n.name, fqns.fqn, p.resolved_field, p.resolved_direction
// ORDER BY
// CASE WHEN p.resolved_field = 'name' AND p.resolved_direction = 'ASC' THEN ad.name END ASC,
@@ -890,13 +903,14 @@ type listAttributesDetailRow struct {
// CASE WHEN p.resolved_field = 'updated_at' AND p.resolved_direction = 'ASC' THEN ad.updated_at END ASC,
// CASE WHEN p.resolved_field = 'updated_at' AND p.resolved_direction = 'DESC' THEN ad.updated_at END DESC,
// ad.id ASC
-// LIMIT $5
-// OFFSET $4
+// LIMIT $6
+// OFFSET $5
func (q *Queries) listAttributesDetail(ctx context.Context, arg listAttributesDetailParams) ([]listAttributesDetailRow, error) {
rows, err := q.db.Query(ctx, listAttributesDetail,
arg.Active,
arg.NamespaceID,
arg.NamespaceName,
+ arg.Search,
arg.Offset,
arg.Limit,
arg.SortField,
diff --git a/service/policy/db/copyfrom.go b/service/policy/db/copyfrom.go
index e89a426d77..30f3975098 100644
--- a/service/policy/db/copyfrom.go
+++ b/service/policy/db/copyfrom.go
@@ -1,6 +1,6 @@
// Code generated by sqlc. DO NOT EDIT.
// versions:
-// sqlc v1.31.0
+// sqlc v1.31.1
// source: copyfrom.go
package db
diff --git a/service/policy/db/db.go b/service/policy/db/db.go
index d24a61d024..c3d191af9d 100644
--- a/service/policy/db/db.go
+++ b/service/policy/db/db.go
@@ -1,6 +1,6 @@
// Code generated by sqlc. DO NOT EDIT.
// versions:
-// sqlc v1.31.0
+// sqlc v1.31.1
package db
diff --git a/service/policy/db/key_access_server_registry.sql.go b/service/policy/db/key_access_server_registry.sql.go
index f7b709306f..5abf4db5ac 100644
--- a/service/policy/db/key_access_server_registry.sql.go
+++ b/service/policy/db/key_access_server_registry.sql.go
@@ -1,6 +1,6 @@
// Code generated by sqlc. DO NOT EDIT.
// versions:
-// sqlc v1.31.0
+// sqlc v1.31.1
// source: key_access_server_registry.sql
package db
diff --git a/service/policy/db/key_management.sql.go b/service/policy/db/key_management.sql.go
index eae00e6412..9a58ae9c7f 100644
--- a/service/policy/db/key_management.sql.go
+++ b/service/policy/db/key_management.sql.go
@@ -1,6 +1,6 @@
// Code generated by sqlc. DO NOT EDIT.
// versions:
-// sqlc v1.31.0
+// sqlc v1.31.1
// source: key_management.sql
package db
diff --git a/service/policy/db/models.go b/service/policy/db/models.go
index fb0616f43f..7e136ae99e 100644
--- a/service/policy/db/models.go
+++ b/service/policy/db/models.go
@@ -1,6 +1,6 @@
// Code generated by sqlc. DO NOT EDIT.
// versions:
-// sqlc v1.31.0
+// sqlc v1.31.1
package db
diff --git a/service/policy/db/namespaces.sql.go b/service/policy/db/namespaces.sql.go
index ad44b4ea26..b7a007481c 100644
--- a/service/policy/db/namespaces.sql.go
+++ b/service/policy/db/namespaces.sql.go
@@ -1,6 +1,6 @@
// Code generated by sqlc. DO NOT EDIT.
// versions:
-// sqlc v1.31.0
+// sqlc v1.31.1
// source: namespaces.sql
package db
diff --git a/service/policy/db/obligations.sql.go b/service/policy/db/obligations.sql.go
index 893dcea627..6e923844fc 100644
--- a/service/policy/db/obligations.sql.go
+++ b/service/policy/db/obligations.sql.go
@@ -1,6 +1,6 @@
// Code generated by sqlc. DO NOT EDIT.
// versions:
-// sqlc v1.31.0
+// sqlc v1.31.1
// source: obligations.sql
package db
diff --git a/service/policy/db/queries/attributes.sql b/service/policy/db/queries/attributes.sql
index bfd5e613f8..27e5395182 100644
--- a/service/policy/db/queries/attributes.sql
+++ b/service/policy/db/queries/attributes.sql
@@ -44,6 +44,12 @@ WHERE
(sqlc.narg('active')::BOOLEAN IS NULL OR ad.active = sqlc.narg('active')) AND
(sqlc.narg('namespace_id')::uuid IS NULL OR ad.namespace_id = sqlc.narg('namespace_id')::uuid) AND
(sqlc.narg('namespace_name')::text IS NULL OR n.name = sqlc.narg('namespace_name')::text)
+ -- No search-specific optimization is added here. If needed, consider
+ -- a pg_trgm-backed GIN index on attribute_fqns.fqn.
+ AND (
+ sqlc.narg('search')::TEXT IS NULL
+ OR fqns.fqn LIKE sqlc.narg('search')::TEXT ESCAPE '\'
+ )
GROUP BY ad.id, n.name, fqns.fqn, p.resolved_field, p.resolved_direction
ORDER BY
CASE WHEN p.resolved_field = 'name' AND p.resolved_direction = 'ASC' THEN ad.name END ASC,
diff --git a/service/policy/db/registered_resources.sql.go b/service/policy/db/registered_resources.sql.go
index f2d85ee96b..5c144c7ce3 100644
--- a/service/policy/db/registered_resources.sql.go
+++ b/service/policy/db/registered_resources.sql.go
@@ -1,6 +1,6 @@
// Code generated by sqlc. DO NOT EDIT.
// versions:
-// sqlc v1.31.0
+// sqlc v1.31.1
// source: registered_resources.sql
package db
diff --git a/service/policy/db/resource_mapping.sql.go b/service/policy/db/resource_mapping.sql.go
index 06313547d9..83fa2a71e1 100644
--- a/service/policy/db/resource_mapping.sql.go
+++ b/service/policy/db/resource_mapping.sql.go
@@ -1,6 +1,6 @@
// Code generated by sqlc. DO NOT EDIT.
// versions:
-// sqlc v1.31.0
+// sqlc v1.31.1
// source: resource_mapping.sql
package db
diff --git a/service/policy/db/subject_mappings.sql.go b/service/policy/db/subject_mappings.sql.go
index 259e84114b..d1a646c60e 100644
--- a/service/policy/db/subject_mappings.sql.go
+++ b/service/policy/db/subject_mappings.sql.go
@@ -1,6 +1,6 @@
// Code generated by sqlc. DO NOT EDIT.
// versions:
-// sqlc v1.31.0
+// sqlc v1.31.1
// source: subject_mappings.sql
package db
From 0d81776e6d8c4337942947f65ce577a7bfb74a33 Mon Sep 17 00:00:00 2001
From: Chris Reed <87077975+c-r33d@users.noreply.github.com>
Date: Tue, 2 Jun 2026 10:31:19 -0500
Subject: [PATCH 05/10] feat(policy): add search support to
ListRegisteredResources (#3559)
## Summary
- Adds ListRegisteredResources RPC search support by wiring request
search into the policy DB list query.
- Applies escaped, case-insensitive matching in the registered resources
SQL path and adds integration coverage for search behavior, wildcard
literals, namespace filters, empty/whitespace search, and pagination
after filtering.
---------
Signed-off-by: Chris Reed
---
.../integration/registered_resources_test.go | 201 ++++++++++++++++--
.../db/queries/registered_resources.sql | 17 +-
service/policy/db/registered_resources.go | 5 +-
service/policy/db/registered_resources.sql.go | 52 ++---
4 files changed, 214 insertions(+), 61 deletions(-)
diff --git a/service/integration/registered_resources_test.go b/service/integration/registered_resources_test.go
index 7165231274..87fe80bc2e 100644
--- a/service/integration/registered_resources_test.go
+++ b/service/integration/registered_resources_test.go
@@ -1811,6 +1811,182 @@ func (s *RegisteredResourcesSuite) Test_ListRegisteredResources_FilterByNamespac
s.True(found, "created resource should be in the filtered list")
}
+func (s *RegisteredResourcesSuite) Test_ListRegisteredResources_SearchByName_Succeeds() {
+ suffix := time.Now().UnixNano()
+ nsID := s.getNamespaceID("example.com")
+ alphaName := fmt.Sprintf("dspx-rr-search-alpha-%d", suffix)
+ betaName := fmt.Sprintf("dspx-rr-search-beta-%d", suffix)
+
+ alpha, err := s.db.PolicyClient.CreateRegisteredResource(s.ctx, ®isteredresources.CreateRegisteredResourceRequest{
+ NamespaceId: nsID,
+ Name: alphaName,
+ })
+ s.Require().NoError(err)
+ beta, err := s.db.PolicyClient.CreateRegisteredResource(s.ctx, ®isteredresources.CreateRegisteredResourceRequest{
+ NamespaceId: nsID,
+ Name: betaName,
+ })
+ s.Require().NoError(err)
+ defer s.deleteTestRegisteredResources([]string{alpha.GetId(), beta.GetId()})
+
+ list, err := s.db.PolicyClient.ListRegisteredResources(s.ctx, ®isteredresources.ListRegisteredResourcesRequest{
+ Search: &policy.Search{Term: strings.ToUpper(alphaName)},
+ })
+ s.Require().NoError(err)
+ s.Require().Len(list.GetResources(), 1)
+ s.Equal(alpha.GetId(), list.GetResources()[0].GetId())
+ s.Equal(int32(1), list.GetPagination().GetTotal())
+}
+
+func (s *RegisteredResourcesSuite) Test_ListRegisteredResources_SearchEscapesLikeWildcardLiterals_Succeeds() {
+ suffix := time.Now().UnixNano()
+ nsID := s.getNamespaceID("example.com")
+ searchToken := fmt.Sprintf("dspx-rr-search-like-%d", suffix)
+
+ alpha, err := s.db.PolicyClient.CreateRegisteredResource(s.ctx, ®isteredresources.CreateRegisteredResourceRequest{
+ NamespaceId: nsID,
+ Name: "wildcarda-" + searchToken,
+ })
+ s.Require().NoError(err)
+ beta, err := s.db.PolicyClient.CreateRegisteredResource(s.ctx, ®isteredresources.CreateRegisteredResourceRequest{
+ NamespaceId: nsID,
+ Name: "wildcardb-" + searchToken,
+ })
+ s.Require().NoError(err)
+ defer s.deleteTestRegisteredResources([]string{alpha.GetId(), beta.GetId()})
+
+ for _, query := range []string{
+ "wildcard_-" + searchToken,
+ "wildcard%-" + searchToken,
+ } {
+ list, err := s.db.PolicyClient.ListRegisteredResources(s.ctx, ®isteredresources.ListRegisteredResourcesRequest{
+ Search: &policy.Search{Term: query},
+ })
+ s.Require().NoError(err)
+ s.Empty(list.GetResources())
+ s.Equal(int32(0), list.GetPagination().GetTotal())
+ }
+}
+
+func (s *RegisteredResourcesSuite) Test_ListRegisteredResources_SearchCombinesWithNamespaceFilters_Succeeds() {
+ suffix := time.Now().UnixNano()
+ nsID1 := s.getNamespaceID("example.com")
+ nsID2 := s.getNamespaceID("example.net")
+ nsFQN2 := s.getNamespaceFQN("example.net")
+ name := fmt.Sprintf("dspx-rr-search-filter-%d", suffix)
+
+ inFirstNamespace, err := s.db.PolicyClient.CreateRegisteredResource(s.ctx, ®isteredresources.CreateRegisteredResourceRequest{
+ NamespaceId: nsID1,
+ Name: name,
+ })
+ s.Require().NoError(err)
+ inSecondNamespace, err := s.db.PolicyClient.CreateRegisteredResource(s.ctx, ®isteredresources.CreateRegisteredResourceRequest{
+ NamespaceId: nsID2,
+ Name: name,
+ })
+ s.Require().NoError(err)
+ defer s.deleteTestRegisteredResources([]string{inFirstNamespace.GetId(), inSecondNamespace.GetId()})
+
+ byNamespaceID, err := s.db.PolicyClient.ListRegisteredResources(s.ctx, ®isteredresources.ListRegisteredResourcesRequest{
+ NamespaceId: nsID1,
+ Search: &policy.Search{Term: name},
+ })
+ s.Require().NoError(err)
+ s.Require().Len(byNamespaceID.GetResources(), 1)
+ s.Equal(inFirstNamespace.GetId(), byNamespaceID.GetResources()[0].GetId())
+ s.Equal(int32(1), byNamespaceID.GetPagination().GetTotal())
+
+ byNamespaceFQN, err := s.db.PolicyClient.ListRegisteredResources(s.ctx, ®isteredresources.ListRegisteredResourcesRequest{
+ NamespaceFqn: nsFQN2,
+ Search: &policy.Search{Term: name},
+ })
+ s.Require().NoError(err)
+ s.Require().Len(byNamespaceFQN.GetResources(), 1)
+ s.Equal(inSecondNamespace.GetId(), byNamespaceFQN.GetResources()[0].GetId())
+ s.Equal(int32(1), byNamespaceFQN.GetPagination().GetTotal())
+}
+
+func (s *RegisteredResourcesSuite) Test_ListRegisteredResources_SearchEmptyAndWhitespace_Succeeds() {
+ suffix := time.Now().UnixNano()
+ created, err := s.db.PolicyClient.CreateRegisteredResource(s.ctx, ®isteredresources.CreateRegisteredResourceRequest{
+ NamespaceId: s.getNamespaceID("example.com"),
+ Name: fmt.Sprintf("dspx-rr-search-whitespace-%d", suffix),
+ })
+ s.Require().NoError(err)
+ defer s.deleteTestRegisteredResources([]string{created.GetId()})
+
+ noSearch, err := s.db.PolicyClient.ListRegisteredResources(s.ctx, ®isteredresources.ListRegisteredResourcesRequest{})
+ s.Require().NoError(err)
+ emptySearch, err := s.db.PolicyClient.ListRegisteredResources(s.ctx, ®isteredresources.ListRegisteredResourcesRequest{
+ Search: &policy.Search{Term: ""},
+ })
+ s.Require().NoError(err)
+ s.Equal(noSearch.GetPagination().GetTotal(), emptySearch.GetPagination().GetTotal())
+
+ whitespaceSearch, err := s.db.PolicyClient.ListRegisteredResources(s.ctx, ®isteredresources.ListRegisteredResourcesRequest{
+ Search: &policy.Search{Term: " " + created.GetName()},
+ })
+ s.Require().NoError(err)
+ s.Require().Len(whitespaceSearch.GetResources(), 1)
+ s.Equal(created.GetId(), whitespaceSearch.GetResources()[0].GetId())
+ s.Equal(int32(1), whitespaceSearch.GetPagination().GetTotal())
+}
+
+func (s *RegisteredResourcesSuite) Test_ListRegisteredResources_SearchPaginationAppliesAfterFiltering_Succeeds() {
+ suffix := time.Now().UnixNano()
+ searchToken := fmt.Sprintf("dspx-rr-search-page-%d", suffix)
+ names := []string{
+ "a-" + searchToken,
+ "b-" + searchToken,
+ "c-" + searchToken,
+ fmt.Sprintf("dspx-rr-search-page-other-%d", suffix),
+ }
+ ids := make([]string, len(names))
+ for i, name := range names {
+ created, err := s.db.PolicyClient.CreateRegisteredResource(s.ctx, ®isteredresources.CreateRegisteredResourceRequest{
+ NamespaceId: s.getNamespaceID("example.com"),
+ Name: name,
+ })
+ s.Require().NoError(err)
+ ids[i] = created.GetId()
+ }
+ defer s.deleteTestRegisteredResources(ids)
+
+ firstPage, err := s.db.PolicyClient.ListRegisteredResources(s.ctx, ®isteredresources.ListRegisteredResourcesRequest{
+ Search: &policy.Search{Term: searchToken},
+ Pagination: &policy.PageRequest{Limit: 2},
+ Sort: []*registeredresources.RegisteredResourcesSort{
+ {
+ Field: registeredresources.SortRegisteredResourcesType_SORT_REGISTERED_RESOURCES_TYPE_NAME,
+ Direction: policy.SortDirection_SORT_DIRECTION_ASC,
+ },
+ },
+ })
+ s.Require().NoError(err)
+ s.Require().Len(firstPage.GetResources(), 2)
+ s.Equal(int32(3), firstPage.GetPagination().GetTotal())
+ s.Equal(int32(2), firstPage.GetPagination().GetNextOffset())
+ s.Equal(ids[0], firstPage.GetResources()[0].GetId())
+ s.Equal(ids[1], firstPage.GetResources()[1].GetId())
+
+ secondPage, err := s.db.PolicyClient.ListRegisteredResources(s.ctx, ®isteredresources.ListRegisteredResourcesRequest{
+ Search: &policy.Search{Term: searchToken},
+ Pagination: &policy.PageRequest{Limit: 2, Offset: 2},
+ Sort: []*registeredresources.RegisteredResourcesSort{
+ {
+ Field: registeredresources.SortRegisteredResourcesType_SORT_REGISTERED_RESOURCES_TYPE_NAME,
+ Direction: policy.SortDirection_SORT_DIRECTION_ASC,
+ },
+ },
+ })
+ s.Require().NoError(err)
+ s.Require().Len(secondPage.GetResources(), 1)
+ s.Equal(int32(3), secondPage.GetPagination().GetTotal())
+ s.Equal(int32(2), secondPage.GetPagination().GetCurrentOffset())
+ s.Equal(int32(0), secondPage.GetPagination().GetNextOffset())
+ s.Equal(ids[2], secondPage.GetResources()[0].GetId())
+}
+
func (s *RegisteredResourcesSuite) Test_GetRegisteredResourceValue_NamespacedFQN_Succeeds() {
nsID := s.getNamespaceID("example.com")
name := "test_get_rrv_ns_fqn"
@@ -2355,7 +2531,7 @@ func (s *RegisteredResourcesSuite) Test_GetRegisteredResource_ByName_Ambiguous_R
func (s *RegisteredResourcesSuite) Test_ListRegisteredResources_SortByName_ASC() {
ids := s.createSortTestRegisteredResources([]string{"aaa-rrsort", "bbb-rrsort", "ccc-rrsort"})
- defer s.deleteSortTestRegisteredResources(ids)
+ defer s.deleteTestRegisteredResources(ids)
list, err := s.db.PolicyClient.ListRegisteredResources(s.ctx, ®isteredresources.ListRegisteredResourcesRequest{
Sort: []*registeredresources.RegisteredResourcesSort{
@@ -2371,7 +2547,7 @@ func (s *RegisteredResourcesSuite) Test_ListRegisteredResources_SortByName_ASC()
func (s *RegisteredResourcesSuite) Test_ListRegisteredResources_SortByName_DESC() {
ids := s.createSortTestRegisteredResources([]string{"aaa-rrsortdesc", "bbb-rrsortdesc", "ccc-rrsortdesc"})
- defer s.deleteSortTestRegisteredResources(ids)
+ defer s.deleteTestRegisteredResources(ids)
list, err := s.db.PolicyClient.ListRegisteredResources(s.ctx, ®isteredresources.ListRegisteredResourcesRequest{
Sort: []*registeredresources.RegisteredResourcesSort{
@@ -2387,7 +2563,7 @@ func (s *RegisteredResourcesSuite) Test_ListRegisteredResources_SortByName_DESC(
func (s *RegisteredResourcesSuite) Test_ListRegisteredResources_SortByCreatedAt_ASC() {
ids := s.createSortTestRegisteredResources([]string{"createdasc-rr-0", "createdasc-rr-1", "createdasc-rr-2"})
- defer s.deleteSortTestRegisteredResources(ids)
+ defer s.deleteTestRegisteredResources(ids)
list, err := s.db.PolicyClient.ListRegisteredResources(s.ctx, ®isteredresources.ListRegisteredResourcesRequest{
Sort: []*registeredresources.RegisteredResourcesSort{
@@ -2403,7 +2579,7 @@ func (s *RegisteredResourcesSuite) Test_ListRegisteredResources_SortByCreatedAt_
func (s *RegisteredResourcesSuite) Test_ListRegisteredResources_SortByCreatedAt_DESC() {
ids := s.createSortTestRegisteredResources([]string{"createddesc-rr-0", "createddesc-rr-1", "createddesc-rr-2"})
- defer s.deleteSortTestRegisteredResources(ids)
+ defer s.deleteTestRegisteredResources(ids)
list, err := s.db.PolicyClient.ListRegisteredResources(s.ctx, ®isteredresources.ListRegisteredResourcesRequest{
Sort: []*registeredresources.RegisteredResourcesSort{
@@ -2419,7 +2595,7 @@ func (s *RegisteredResourcesSuite) Test_ListRegisteredResources_SortByCreatedAt_
func (s *RegisteredResourcesSuite) Test_ListRegisteredResources_SortByUpdatedAt_DESC() {
ids := s.createSortTestRegisteredResources([]string{"upd-sort-rr-0", "upd-sort-rr-1", "upd-sort-rr-2"})
- defer s.deleteSortTestRegisteredResources(ids)
+ defer s.deleteTestRegisteredResources(ids)
// Update the first resource so its updated_at is the most recent
time.Sleep(5 * time.Millisecond)
@@ -2446,7 +2622,7 @@ func (s *RegisteredResourcesSuite) Test_ListRegisteredResources_SortByUpdatedAt_
func (s *RegisteredResourcesSuite) Test_ListRegisteredResources_SortByUpdatedAt_ASC() {
ids := s.createSortTestRegisteredResources([]string{"upd-sort-asc-rr-0", "upd-sort-asc-rr-1", "upd-sort-asc-rr-2"})
- defer s.deleteSortTestRegisteredResources(ids)
+ defer s.deleteTestRegisteredResources(ids)
// Update the last resource so its updated_at is the most recent
time.Sleep(5 * time.Millisecond)
@@ -2483,7 +2659,7 @@ func (s *RegisteredResourcesSuite) Test_ListRegisteredResources_SortTieBreaker_C
s.Require().NoError(err)
ids[i] = created.GetId()
}
- defer s.deleteSortTestRegisteredResources(ids)
+ defer s.deleteTestRegisteredResources(ids)
s.Require().NoError(forceCreatedAtTie(s.ctx, s.db, "registered_resources", ids))
@@ -2502,7 +2678,7 @@ func (s *RegisteredResourcesSuite) Test_ListRegisteredResources_SortTieBreaker_C
func (s *RegisteredResourcesSuite) Test_ListRegisteredResources_SortByUnspecifiedField_DefaultsToCreatedAt() {
ids := s.createSortTestRegisteredResources([]string{"unspecified-field-rr-0", "unspecified-field-rr-1", "unspecified-field-rr-2"})
- defer s.deleteSortTestRegisteredResources(ids)
+ defer s.deleteTestRegisteredResources(ids)
list, err := s.db.PolicyClient.ListRegisteredResources(s.ctx, ®isteredresources.ListRegisteredResourcesRequest{
Sort: []*registeredresources.RegisteredResourcesSort{
@@ -2518,7 +2694,7 @@ func (s *RegisteredResourcesSuite) Test_ListRegisteredResources_SortByUnspecifie
func (s *RegisteredResourcesSuite) Test_ListRegisteredResources_SortByUnspecifiedDirection_DefaultsToDESC() {
ids := s.createSortTestRegisteredResources([]string{"unspecified-dir-rr-0", "unspecified-dir-rr-1", "unspecified-dir-rr-2"})
- defer s.deleteSortTestRegisteredResources(ids)
+ defer s.deleteTestRegisteredResources(ids)
list, err := s.db.PolicyClient.ListRegisteredResources(s.ctx, ®isteredresources.ListRegisteredResourcesRequest{
Sort: []*registeredresources.RegisteredResourcesSort{
@@ -2534,7 +2710,7 @@ func (s *RegisteredResourcesSuite) Test_ListRegisteredResources_SortByUnspecifie
func (s *RegisteredResourcesSuite) Test_ListRegisteredResources_SortByBothUnspecified_DefaultsToCreatedAtDESC() {
ids := s.createSortTestRegisteredResources([]string{"both-unspecified-rr-0", "both-unspecified-rr-1", "both-unspecified-rr-2"})
- defer s.deleteSortTestRegisteredResources(ids)
+ defer s.deleteTestRegisteredResources(ids)
list, err := s.db.PolicyClient.ListRegisteredResources(s.ctx, ®isteredresources.ListRegisteredResourcesRequest{
Sort: []*registeredresources.RegisteredResourcesSort{
@@ -2550,7 +2726,7 @@ func (s *RegisteredResourcesSuite) Test_ListRegisteredResources_SortByBothUnspec
func (s *RegisteredResourcesSuite) Test_ListRegisteredResources_SortOmitted() {
ids := s.createSortTestRegisteredResources([]string{"sort-omitted-rr-0", "sort-omitted-rr-1", "sort-omitted-rr-2"})
- defer s.deleteSortTestRegisteredResources(ids)
+ defer s.deleteTestRegisteredResources(ids)
list, err := s.db.PolicyClient.ListRegisteredResources(s.ctx, ®isteredresources.ListRegisteredResourcesRequest{})
s.Require().NoError(err)
@@ -2581,8 +2757,7 @@ func (s *RegisteredResourcesSuite) createSortTestRegisteredResources(prefixes []
return ids
}
-// deleteSortTestRegisteredResources cleans up registered resources created by sort tests.
-func (s *RegisteredResourcesSuite) deleteSortTestRegisteredResources(ids []string) {
+func (s *RegisteredResourcesSuite) deleteTestRegisteredResources(ids []string) {
for _, id := range ids {
_, err := s.db.PolicyClient.DeleteRegisteredResource(s.ctx, id)
s.Require().NoError(err)
diff --git a/service/policy/db/queries/registered_resources.sql b/service/policy/db/queries/registered_resources.sql
index 3118b63642..a68716b7b2 100644
--- a/service/policy/db/queries/registered_resources.sql
+++ b/service/policy/db/queries/registered_resources.sql
@@ -104,15 +104,6 @@ WITH params AS (
SELECT
COALESCE(NULLIF(@sort_field::text, ''), 'created_at') AS resolved_field,
COALESCE(NULLIF(@sort_direction::text, ''), 'DESC') AS resolved_direction
-),
-counted AS (
- SELECT COUNT(r.id) AS total
- FROM registered_resources r
- LEFT JOIN attribute_namespaces n ON r.namespace_id = n.id
- LEFT JOIN attribute_fqns ns_fqns ON ns_fqns.namespace_id = n.id AND ns_fqns.attribute_id IS NULL AND ns_fqns.value_id IS NULL
- WHERE
- (sqlc.narg('namespace_id')::uuid IS NULL OR r.namespace_id = sqlc.narg('namespace_id')::uuid) AND
- (sqlc.narg('namespace_fqn')::text IS NULL OR ns_fqns.fqn = sqlc.narg('namespace_fqn')::text)
)
SELECT
r.id,
@@ -133,11 +124,10 @@ SELECT
'action_attribute_values', action_attrs.values
)
) FILTER (WHERE v.id IS NOT NULL) as values,
- counted.total
+ COUNT(*) OVER() AS total
FROM registered_resources r
LEFT JOIN attribute_namespaces n ON r.namespace_id = n.id
LEFT JOIN attribute_fqns ns_fqns ON ns_fqns.namespace_id = n.id AND ns_fqns.attribute_id IS NULL AND ns_fqns.value_id IS NULL
-CROSS JOIN counted
CROSS JOIN params p
LEFT JOIN registered_resource_values v ON v.registered_resource_id = r.id
-- Build a JSON array of action/attribute pairs for each resource value
@@ -173,8 +163,9 @@ LEFT JOIN LATERAL (
) action_attrs ON true -- required syntax for LATERAL joins
WHERE
(sqlc.narg('namespace_id')::uuid IS NULL OR r.namespace_id = sqlc.narg('namespace_id')::uuid) AND
- (sqlc.narg('namespace_fqn')::text IS NULL OR ns_fqns.fqn = sqlc.narg('namespace_fqn')::text)
-GROUP BY r.id, n.id, ns_fqns.fqn, counted.total, p.resolved_field, p.resolved_direction
+ (sqlc.narg('namespace_fqn')::text IS NULL OR ns_fqns.fqn = sqlc.narg('namespace_fqn')::text) AND
+ (sqlc.narg('search')::text IS NULL OR r.name LIKE sqlc.narg('search')::text ESCAPE '\')
+GROUP BY r.id, n.id, ns_fqns.fqn, p.resolved_field, p.resolved_direction
ORDER BY
CASE WHEN p.resolved_field = 'name' AND p.resolved_direction = 'ASC' THEN r.name END ASC,
CASE WHEN p.resolved_field = 'name' AND p.resolved_direction = 'DESC' THEN r.name END DESC,
diff --git a/service/policy/db/registered_resources.go b/service/policy/db/registered_resources.go
index a24c25564f..47efd5393e 100644
--- a/service/policy/db/registered_resources.go
+++ b/service/policy/db/registered_resources.go
@@ -230,10 +230,12 @@ func (c PolicyDBClient) ListRegisteredResources(ctx context.Context, r *register
}
sortField, sortDirection := GetRegisteredResourcesSortParams(r.GetSort())
+ search := pgtypeSubstringSearchPattern(r.GetSearch().GetTerm())
list, err := c.queries.listRegisteredResources(ctx, listRegisteredResourcesParams{
NamespaceID: parsedID,
NamespaceFqn: pgtypeText(r.GetNamespaceFqn()),
+ Search: search,
Limit: limit,
Offset: offset,
SortField: sortField,
@@ -441,7 +443,8 @@ func (c PolicyDBClient) GetRegisteredResourceValuesByFQNs(ctx context.Context, r
},
})
if err != nil {
- c.logger.ErrorContext(ctx,
+ c.logger.ErrorContext(
+ ctx,
"registered resource value for FQN not found",
slog.String("fqn", fqn),
slog.Any("err", err),
diff --git a/service/policy/db/registered_resources.sql.go b/service/policy/db/registered_resources.sql.go
index 5c144c7ce3..5e72a29c3f 100644
--- a/service/policy/db/registered_resources.sql.go
+++ b/service/policy/db/registered_resources.sql.go
@@ -644,17 +644,8 @@ func (q *Queries) listRegisteredResourceValues(ctx context.Context, arg listRegi
const listRegisteredResources = `-- name: listRegisteredResources :many
WITH params AS (
SELECT
- COALESCE(NULLIF($5::text, ''), 'created_at') AS resolved_field,
- COALESCE(NULLIF($6::text, ''), 'DESC') AS resolved_direction
-),
-counted AS (
- SELECT COUNT(r.id) AS total
- FROM registered_resources r
- LEFT JOIN attribute_namespaces n ON r.namespace_id = n.id
- LEFT JOIN attribute_fqns ns_fqns ON ns_fqns.namespace_id = n.id AND ns_fqns.attribute_id IS NULL AND ns_fqns.value_id IS NULL
- WHERE
- ($1::uuid IS NULL OR r.namespace_id = $1::uuid) AND
- ($2::text IS NULL OR ns_fqns.fqn = $2::text)
+ COALESCE(NULLIF($6::text, ''), 'created_at') AS resolved_field,
+ COALESCE(NULLIF($7::text, ''), 'DESC') AS resolved_direction
)
SELECT
r.id,
@@ -675,11 +666,10 @@ SELECT
'action_attribute_values', action_attrs.values
)
) FILTER (WHERE v.id IS NOT NULL) as values,
- counted.total
+ COUNT(*) OVER() AS total
FROM registered_resources r
LEFT JOIN attribute_namespaces n ON r.namespace_id = n.id
LEFT JOIN attribute_fqns ns_fqns ON ns_fqns.namespace_id = n.id AND ns_fqns.attribute_id IS NULL AND ns_fqns.value_id IS NULL
-CROSS JOIN counted
CROSS JOIN params p
LEFT JOIN registered_resource_values v ON v.registered_resource_id = r.id
LEFT JOIN LATERAL (
@@ -714,8 +704,9 @@ LEFT JOIN LATERAL (
) action_attrs ON true -- required syntax for LATERAL joins
WHERE
($1::uuid IS NULL OR r.namespace_id = $1::uuid) AND
- ($2::text IS NULL OR ns_fqns.fqn = $2::text)
-GROUP BY r.id, n.id, ns_fqns.fqn, counted.total, p.resolved_field, p.resolved_direction
+ ($2::text IS NULL OR ns_fqns.fqn = $2::text) AND
+ ($3::text IS NULL OR r.name LIKE $3::text ESCAPE '\')
+GROUP BY r.id, n.id, ns_fqns.fqn, p.resolved_field, p.resolved_direction
ORDER BY
CASE WHEN p.resolved_field = 'name' AND p.resolved_direction = 'ASC' THEN r.name END ASC,
CASE WHEN p.resolved_field = 'name' AND p.resolved_direction = 'DESC' THEN r.name END DESC,
@@ -724,13 +715,14 @@ ORDER BY
CASE WHEN p.resolved_field = 'updated_at' AND p.resolved_direction = 'ASC' THEN r.updated_at END ASC,
CASE WHEN p.resolved_field = 'updated_at' AND p.resolved_direction = 'DESC' THEN r.updated_at END DESC,
r.id ASC
-LIMIT $4
-OFFSET $3
+LIMIT $5
+OFFSET $4
`
type listRegisteredResourcesParams struct {
NamespaceID pgtype.UUID `json:"namespace_id"`
NamespaceFqn pgtype.Text `json:"namespace_fqn"`
+ Search pgtype.Text `json:"search"`
Offset int32 `json:"offset_"`
Limit int32 `json:"limit_"`
SortField string `json:"sort_field"`
@@ -750,17 +742,8 @@ type listRegisteredResourcesRow struct {
//
// WITH params AS (
// SELECT
-// COALESCE(NULLIF($5::text, ''), 'created_at') AS resolved_field,
-// COALESCE(NULLIF($6::text, ''), 'DESC') AS resolved_direction
-// ),
-// counted AS (
-// SELECT COUNT(r.id) AS total
-// FROM registered_resources r
-// LEFT JOIN attribute_namespaces n ON r.namespace_id = n.id
-// LEFT JOIN attribute_fqns ns_fqns ON ns_fqns.namespace_id = n.id AND ns_fqns.attribute_id IS NULL AND ns_fqns.value_id IS NULL
-// WHERE
-// ($1::uuid IS NULL OR r.namespace_id = $1::uuid) AND
-// ($2::text IS NULL OR ns_fqns.fqn = $2::text)
+// COALESCE(NULLIF($6::text, ''), 'created_at') AS resolved_field,
+// COALESCE(NULLIF($7::text, ''), 'DESC') AS resolved_direction
// )
// SELECT
// r.id,
@@ -781,11 +764,10 @@ type listRegisteredResourcesRow struct {
// 'action_attribute_values', action_attrs.values
// )
// ) FILTER (WHERE v.id IS NOT NULL) as values,
-// counted.total
+// COUNT(*) OVER() AS total
// FROM registered_resources r
// LEFT JOIN attribute_namespaces n ON r.namespace_id = n.id
// LEFT JOIN attribute_fqns ns_fqns ON ns_fqns.namespace_id = n.id AND ns_fqns.attribute_id IS NULL AND ns_fqns.value_id IS NULL
-// CROSS JOIN counted
// CROSS JOIN params p
// LEFT JOIN registered_resource_values v ON v.registered_resource_id = r.id
// LEFT JOIN LATERAL (
@@ -820,8 +802,9 @@ type listRegisteredResourcesRow struct {
// ) action_attrs ON true -- required syntax for LATERAL joins
// WHERE
// ($1::uuid IS NULL OR r.namespace_id = $1::uuid) AND
-// ($2::text IS NULL OR ns_fqns.fqn = $2::text)
-// GROUP BY r.id, n.id, ns_fqns.fqn, counted.total, p.resolved_field, p.resolved_direction
+// ($2::text IS NULL OR ns_fqns.fqn = $2::text) AND
+// ($3::text IS NULL OR r.name LIKE $3::text ESCAPE '\')
+// GROUP BY r.id, n.id, ns_fqns.fqn, p.resolved_field, p.resolved_direction
// ORDER BY
// CASE WHEN p.resolved_field = 'name' AND p.resolved_direction = 'ASC' THEN r.name END ASC,
// CASE WHEN p.resolved_field = 'name' AND p.resolved_direction = 'DESC' THEN r.name END DESC,
@@ -830,12 +813,13 @@ type listRegisteredResourcesRow struct {
// CASE WHEN p.resolved_field = 'updated_at' AND p.resolved_direction = 'ASC' THEN r.updated_at END ASC,
// CASE WHEN p.resolved_field = 'updated_at' AND p.resolved_direction = 'DESC' THEN r.updated_at END DESC,
// r.id ASC
-// LIMIT $4
-// OFFSET $3
+// LIMIT $5
+// OFFSET $4
func (q *Queries) listRegisteredResources(ctx context.Context, arg listRegisteredResourcesParams) ([]listRegisteredResourcesRow, error) {
rows, err := q.db.Query(ctx, listRegisteredResources,
arg.NamespaceID,
arg.NamespaceFqn,
+ arg.Search,
arg.Offset,
arg.Limit,
arg.SortField,
From b21822a1555257a7ee4fdb5f6f891929bc502091 Mon Sep 17 00:00:00 2001
From: Chris Reed <87077975+c-r33d@users.noreply.github.com>
Date: Tue, 2 Jun 2026 10:31:29 -0500
Subject: [PATCH 06/10] feat(policy): add search support to
ListKeyAccessServers (#3557)
## Summary
- Adds ListKeyAccessServers RPC search support by wiring request search
into the policy DB list query.
- Applies escaped, case-insensitive matching in the KAS registry SQL
path and adds integration coverage for search behavior, wildcard
literals, empty search, and pagination after filtering.
---------
Signed-off-by: Chris Reed
---
service/integration/kas_registry_test.go | 181 ++++++++++++++++--
.../policy/db/key_access_server_registry.go | 2 +
.../db/key_access_server_registry.sql.go | 36 +++-
.../db/queries/key_access_server_registry.sql | 13 +-
4 files changed, 207 insertions(+), 25 deletions(-)
diff --git a/service/integration/kas_registry_test.go b/service/integration/kas_registry_test.go
index ec35952569..5978b9ea84 100644
--- a/service/integration/kas_registry_test.go
+++ b/service/integration/kas_registry_test.go
@@ -169,6 +169,157 @@ func (s *KasRegistrySuite) Test_ListKeyAccessServers_Offset_Succeeds() {
}
}
+func (s *KasRegistrySuite) Test_ListKeyAccessServers_SearchByNameAndUri_Succeeds() {
+ suffix := time.Now().UnixNano()
+ alpha, err := s.db.PolicyClient.CreateKeyAccessServer(s.ctx, &kasregistry.CreateKeyAccessServerRequest{
+ Uri: fmt.Sprintf("https://dspx-search-alpha-%d.example.com", suffix),
+ Name: fmt.Sprintf("dspx-search-alpha-%d", suffix),
+ })
+ s.Require().NoError(err)
+ betaURI := fmt.Sprintf("https://DSPX-Search-Beta-%d.example.com", suffix)
+ beta, err := s.db.PolicyClient.CreateKeyAccessServer(s.ctx, &kasregistry.CreateKeyAccessServerRequest{
+ Uri: betaURI,
+ Name: fmt.Sprintf("dspx-search-beta-%d", suffix),
+ })
+ s.Require().NoError(err)
+ other, err := s.db.PolicyClient.CreateKeyAccessServer(s.ctx, &kasregistry.CreateKeyAccessServerRequest{
+ Uri: fmt.Sprintf("https://dspx-other-%d.example.com", suffix),
+ Name: fmt.Sprintf("dspx-other-%d", suffix),
+ })
+ s.Require().NoError(err)
+ defer s.deleteTestKeyAccessServers([]string{alpha.GetId(), beta.GetId(), other.GetId()})
+
+ byName, err := s.db.PolicyClient.ListKeyAccessServers(s.ctx, &kasregistry.ListKeyAccessServersRequest{
+ Search: &policy.Search{Term: strings.ToUpper(alpha.GetName())},
+ })
+ s.Require().NoError(err)
+ s.Require().Len(byName.GetKeyAccessServers(), 1)
+ s.Equal(alpha.GetId(), byName.GetKeyAccessServers()[0].GetId())
+ s.Equal(int32(1), byName.GetPagination().GetTotal())
+
+ byURI, err := s.db.PolicyClient.ListKeyAccessServers(s.ctx, &kasregistry.ListKeyAccessServersRequest{
+ Search: &policy.Search{Term: strings.ToUpper(betaURI)},
+ })
+ s.Require().NoError(err)
+ s.Require().Len(byURI.GetKeyAccessServers(), 1)
+ s.Equal(beta.GetId(), byURI.GetKeyAccessServers()[0].GetId())
+ s.Equal(int32(1), byURI.GetPagination().GetTotal())
+}
+
+func (s *KasRegistrySuite) Test_ListKeyAccessServers_SearchEscapesLikeWildcardLiterals_Succeeds() {
+ suffix := time.Now().UnixNano()
+ searchDomain := fmt.Sprintf("dspx-search-like-%d.example.com", suffix)
+ alpha, err := s.db.PolicyClient.CreateKeyAccessServer(s.ctx, &kasregistry.CreateKeyAccessServerRequest{
+ Uri: "https://wildcarda." + searchDomain,
+ Name: fmt.Sprintf("wildcarda-%d", suffix),
+ })
+ s.Require().NoError(err)
+ beta, err := s.db.PolicyClient.CreateKeyAccessServer(s.ctx, &kasregistry.CreateKeyAccessServerRequest{
+ Uri: "https://wildcardb." + searchDomain,
+ Name: fmt.Sprintf("wildcardb-%d", suffix),
+ })
+ s.Require().NoError(err)
+ defer s.deleteTestKeyAccessServers([]string{alpha.GetId(), beta.GetId()})
+
+ for _, query := range []string{
+ "wildcard_." + searchDomain,
+ "wildcard%." + searchDomain,
+ } {
+ list, err := s.db.PolicyClient.ListKeyAccessServers(s.ctx, &kasregistry.ListKeyAccessServersRequest{
+ Search: &policy.Search{Term: query},
+ })
+ s.Require().NoError(err)
+ s.Empty(list.GetKeyAccessServers())
+ s.Equal(int32(0), list.GetPagination().GetTotal())
+ }
+}
+
+func (s *KasRegistrySuite) Test_ListKeyAccessServers_SearchEmptyQuery_Succeeds() {
+ suffix := time.Now().UnixNano()
+ created, err := s.db.PolicyClient.CreateKeyAccessServer(s.ctx, &kasregistry.CreateKeyAccessServerRequest{
+ Uri: fmt.Sprintf("https://dspx-search-empty-%d.example.com", suffix),
+ Name: fmt.Sprintf("dspx-search-empty-%d", suffix),
+ })
+ s.Require().NoError(err)
+ defer s.deleteTestKeyAccessServers([]string{created.GetId()})
+
+ noSearch, err := s.db.PolicyClient.ListKeyAccessServers(s.ctx, &kasregistry.ListKeyAccessServersRequest{})
+ s.Require().NoError(err)
+ emptySearch, err := s.db.PolicyClient.ListKeyAccessServers(s.ctx, &kasregistry.ListKeyAccessServersRequest{
+ Search: &policy.Search{Term: ""},
+ })
+ s.Require().NoError(err)
+ s.Equal(noSearch.GetPagination().GetTotal(), emptySearch.GetPagination().GetTotal())
+}
+
+func (s *KasRegistrySuite) Test_ListKeyAccessServers_SearchDoesTrimWhitespace_Succeeds() {
+ suffix := time.Now().UnixNano()
+ searchToken := fmt.Sprintf("dspx-search-whitespace-%d", suffix)
+ created, err := s.db.PolicyClient.CreateKeyAccessServer(s.ctx, &kasregistry.CreateKeyAccessServerRequest{
+ Uri: fmt.Sprintf("https://%s.example.com", searchToken),
+ Name: searchToken,
+ })
+ s.Require().NoError(err)
+ defer s.deleteTestKeyAccessServers([]string{created.GetId()})
+
+ list, err := s.db.PolicyClient.ListKeyAccessServers(s.ctx, &kasregistry.ListKeyAccessServersRequest{
+ Search: &policy.Search{Term: " " + searchToken + " "},
+ })
+ s.Require().NoError(err)
+ s.Require().Len(list.GetKeyAccessServers(), 1)
+ s.Equal(int32(1), list.GetPagination().GetTotal())
+ s.Equal(created.GetId(), list.GetKeyAccessServers()[0].GetId())
+}
+
+func (s *KasRegistrySuite) Test_ListKeyAccessServers_SearchPaginationAppliesAfterFiltering_Succeeds() {
+ suffix := time.Now().UnixNano()
+ searchToken := fmt.Sprintf("dspx-search-page-%d", suffix)
+ names := []string{
+ "a-" + searchToken,
+ "b-" + searchToken,
+ "c-" + searchToken,
+ fmt.Sprintf("dspx-search-page-other-%d", suffix),
+ }
+ ids := make([]string, len(names))
+ for i, name := range names {
+ created, err := s.db.PolicyClient.CreateKeyAccessServer(s.ctx, &kasregistry.CreateKeyAccessServerRequest{
+ Uri: fmt.Sprintf("https://%s.example.com", name),
+ Name: name,
+ })
+ s.Require().NoError(err)
+ ids[i] = created.GetId()
+ }
+ defer s.deleteTestKeyAccessServers(ids)
+
+ firstPage, err := s.db.PolicyClient.ListKeyAccessServers(s.ctx, &kasregistry.ListKeyAccessServersRequest{
+ Search: &policy.Search{Term: searchToken},
+ Pagination: &policy.PageRequest{Limit: 2},
+ Sort: []*kasregistry.KeyAccessServersSort{
+ {Field: kasregistry.SortKeyAccessServersType_SORT_KEY_ACCESS_SERVERS_TYPE_NAME, Direction: policy.SortDirection_SORT_DIRECTION_ASC},
+ },
+ })
+ s.Require().NoError(err)
+ s.Require().Len(firstPage.GetKeyAccessServers(), 2)
+ s.Equal(int32(3), firstPage.GetPagination().GetTotal())
+ s.Equal(int32(2), firstPage.GetPagination().GetNextOffset())
+ s.Equal(ids[0], firstPage.GetKeyAccessServers()[0].GetId())
+ s.Equal(ids[1], firstPage.GetKeyAccessServers()[1].GetId())
+
+ secondPage, err := s.db.PolicyClient.ListKeyAccessServers(s.ctx, &kasregistry.ListKeyAccessServersRequest{
+ Search: &policy.Search{Term: searchToken},
+ Pagination: &policy.PageRequest{Limit: 2, Offset: 2},
+ Sort: []*kasregistry.KeyAccessServersSort{
+ {Field: kasregistry.SortKeyAccessServersType_SORT_KEY_ACCESS_SERVERS_TYPE_NAME, Direction: policy.SortDirection_SORT_DIRECTION_ASC},
+ },
+ })
+ s.Require().NoError(err)
+ s.Require().Len(secondPage.GetKeyAccessServers(), 1)
+ s.Equal(int32(3), secondPage.GetPagination().GetTotal())
+ s.Equal(int32(2), secondPage.GetPagination().GetCurrentOffset())
+ s.Equal(int32(0), secondPage.GetPagination().GetNextOffset())
+ s.Equal(ids[2], secondPage.GetKeyAccessServers()[0].GetId())
+}
+
func (s *KasRegistrySuite) Test_GetKeyAccessServer() {
remoteFixture := s.f.GetKasRegistryKey("key_access_server_1")
localFixture := s.f.GetKasRegistryKey("key_access_server_2")
@@ -880,7 +1031,7 @@ func (s *KasRegistrySuite) Test_GetKeyAccessServer_ByIdNameUri_ReturnSameResult(
func (s *KasRegistrySuite) Test_ListKeyAccessServers_SortByCreatedAt_ASC() {
ids := s.createSortTestKeyAccessServers([]string{"sort-kas-created-asc-0", "sort-kas-created-asc-1", "sort-kas-created-asc-2"})
- defer s.deleteSortTestKeyAccessServers(ids)
+ defer s.deleteTestKeyAccessServers(ids)
listRsp, err := s.db.PolicyClient.ListKeyAccessServers(s.ctx, &kasregistry.ListKeyAccessServersRequest{
Sort: []*kasregistry.KeyAccessServersSort{
@@ -895,7 +1046,7 @@ func (s *KasRegistrySuite) Test_ListKeyAccessServers_SortByCreatedAt_ASC() {
func (s *KasRegistrySuite) Test_ListKeyAccessServers_SortByCreatedAt_DESC() {
ids := s.createSortTestKeyAccessServers([]string{"sort-kas-created-desc-0", "sort-kas-created-desc-1", "sort-kas-created-desc-2"})
- defer s.deleteSortTestKeyAccessServers(ids)
+ defer s.deleteTestKeyAccessServers(ids)
listRsp, err := s.db.PolicyClient.ListKeyAccessServers(s.ctx, &kasregistry.ListKeyAccessServersRequest{
Sort: []*kasregistry.KeyAccessServersSort{
@@ -910,7 +1061,7 @@ func (s *KasRegistrySuite) Test_ListKeyAccessServers_SortByCreatedAt_DESC() {
func (s *KasRegistrySuite) Test_ListKeyAccessServers_SortByUpdatedAt_DESC() {
ids := s.createSortTestKeyAccessServers([]string{"sort-kas-updated-desc-0", "sort-kas-updated-desc-1", "sort-kas-updated-desc-2"})
- defer s.deleteSortTestKeyAccessServers(ids)
+ defer s.deleteTestKeyAccessServers(ids)
time.Sleep(5 * time.Millisecond)
_, err := s.db.PolicyClient.UpdateKeyAccessServer(s.ctx, ids[0], &kasregistry.UpdateKeyAccessServerRequest{
@@ -935,7 +1086,7 @@ func (s *KasRegistrySuite) Test_ListKeyAccessServers_SortByUpdatedAt_DESC() {
func (s *KasRegistrySuite) Test_ListKeyAccessServers_SortByUpdatedAt_ASC() {
ids := s.createSortTestKeyAccessServers([]string{"sort-kas-updated-asc-0", "sort-kas-updated-asc-1", "sort-kas-updated-asc-2"})
- defer s.deleteSortTestKeyAccessServers(ids)
+ defer s.deleteTestKeyAccessServers(ids)
time.Sleep(5 * time.Millisecond)
_, err := s.db.PolicyClient.UpdateKeyAccessServer(s.ctx, ids[2], &kasregistry.UpdateKeyAccessServerRequest{
@@ -960,7 +1111,7 @@ func (s *KasRegistrySuite) Test_ListKeyAccessServers_SortByUpdatedAt_ASC() {
func (s *KasRegistrySuite) Test_ListKeyAccessServers_SortByName_ASC() {
ids := s.createSortTestKeyAccessServers([]string{"aaa-kas-sort", "bbb-kas-sort", "ccc-kas-sort"})
- defer s.deleteSortTestKeyAccessServers(ids)
+ defer s.deleteTestKeyAccessServers(ids)
listRsp, err := s.db.PolicyClient.ListKeyAccessServers(s.ctx, &kasregistry.ListKeyAccessServersRequest{
Sort: []*kasregistry.KeyAccessServersSort{
@@ -975,7 +1126,7 @@ func (s *KasRegistrySuite) Test_ListKeyAccessServers_SortByName_ASC() {
func (s *KasRegistrySuite) Test_ListKeyAccessServers_SortByName_DESC() {
ids := s.createSortTestKeyAccessServers([]string{"aaa-kas-sortdesc", "bbb-kas-sortdesc", "ccc-kas-sortdesc"})
- defer s.deleteSortTestKeyAccessServers(ids)
+ defer s.deleteTestKeyAccessServers(ids)
listRsp, err := s.db.PolicyClient.ListKeyAccessServers(s.ctx, &kasregistry.ListKeyAccessServersRequest{
Sort: []*kasregistry.KeyAccessServersSort{
@@ -990,7 +1141,7 @@ func (s *KasRegistrySuite) Test_ListKeyAccessServers_SortByName_DESC() {
func (s *KasRegistrySuite) Test_ListKeyAccessServers_SortByUri_ASC() {
ids := s.createSortTestKeyAccessServers([]string{"aaa-kas-uri", "bbb-kas-uri", "ccc-kas-uri"})
- defer s.deleteSortTestKeyAccessServers(ids)
+ defer s.deleteTestKeyAccessServers(ids)
listRsp, err := s.db.PolicyClient.ListKeyAccessServers(s.ctx, &kasregistry.ListKeyAccessServersRequest{
Sort: []*kasregistry.KeyAccessServersSort{
@@ -1005,7 +1156,7 @@ func (s *KasRegistrySuite) Test_ListKeyAccessServers_SortByUri_ASC() {
func (s *KasRegistrySuite) Test_ListKeyAccessServers_SortByUri_DESC() {
ids := s.createSortTestKeyAccessServers([]string{"aaa-kas-uridesc", "bbb-kas-uridesc", "ccc-kas-uridesc"})
- defer s.deleteSortTestKeyAccessServers(ids)
+ defer s.deleteTestKeyAccessServers(ids)
listRsp, err := s.db.PolicyClient.ListKeyAccessServers(s.ctx, &kasregistry.ListKeyAccessServersRequest{
Sort: []*kasregistry.KeyAccessServersSort{
@@ -1030,7 +1181,7 @@ func (s *KasRegistrySuite) Test_ListKeyAccessServers_SortTieBreaker_CreatedAtWit
s.Require().NoError(err)
ids[i] = created.GetId()
}
- defer s.deleteSortTestKeyAccessServers(ids)
+ defer s.deleteTestKeyAccessServers(ids)
s.Require().NoError(forceCreatedAtTie(s.ctx, s.db, "key_access_servers", ids))
@@ -1049,7 +1200,7 @@ func (s *KasRegistrySuite) Test_ListKeyAccessServers_SortTieBreaker_CreatedAtWit
func (s *KasRegistrySuite) Test_ListKeyAccessServers_SortByUnspecifiedField_DefaultsToCreatedAt() {
ids := s.createSortTestKeyAccessServers([]string{"unspecified-field-kas-0", "unspecified-field-kas-1", "unspecified-field-kas-2"})
- defer s.deleteSortTestKeyAccessServers(ids)
+ defer s.deleteTestKeyAccessServers(ids)
listRsp, err := s.db.PolicyClient.ListKeyAccessServers(s.ctx, &kasregistry.ListKeyAccessServersRequest{
Sort: []*kasregistry.KeyAccessServersSort{
@@ -1065,7 +1216,7 @@ func (s *KasRegistrySuite) Test_ListKeyAccessServers_SortByUnspecifiedField_Defa
func (s *KasRegistrySuite) Test_ListKeyAccessServers_SortByUnspecifiedDirection_DefaultsToDESC() {
ids := s.createSortTestKeyAccessServers([]string{"unspecified-dir-kas-0", "unspecified-dir-kas-1", "unspecified-dir-kas-2"})
- defer s.deleteSortTestKeyAccessServers(ids)
+ defer s.deleteTestKeyAccessServers(ids)
listRsp, err := s.db.PolicyClient.ListKeyAccessServers(s.ctx, &kasregistry.ListKeyAccessServersRequest{
Sort: []*kasregistry.KeyAccessServersSort{
@@ -1081,7 +1232,7 @@ func (s *KasRegistrySuite) Test_ListKeyAccessServers_SortByUnspecifiedDirection_
func (s *KasRegistrySuite) Test_ListKeyAccessServers_SortByBothUnspecified_DefaultsToCreatedAtDESC() {
ids := s.createSortTestKeyAccessServers([]string{"both-unspecified-kas-0", "both-unspecified-kas-1", "both-unspecified-kas-2"})
- defer s.deleteSortTestKeyAccessServers(ids)
+ defer s.deleteTestKeyAccessServers(ids)
listRsp, err := s.db.PolicyClient.ListKeyAccessServers(s.ctx, &kasregistry.ListKeyAccessServersRequest{
Sort: []*kasregistry.KeyAccessServersSort{
@@ -1097,7 +1248,7 @@ func (s *KasRegistrySuite) Test_ListKeyAccessServers_SortByBothUnspecified_Defau
func (s *KasRegistrySuite) Test_ListKeyAccessServers_SortOmitted() {
ids := s.createSortTestKeyAccessServers([]string{"sort-omitted-kas-0", "sort-omitted-kas-1", "sort-omitted-kas-2"})
- defer s.deleteSortTestKeyAccessServers(ids)
+ defer s.deleteTestKeyAccessServers(ids)
listRsp, err := s.db.PolicyClient.ListKeyAccessServers(s.ctx, &kasregistry.ListKeyAccessServersRequest{})
s.Require().NoError(err)
@@ -1172,8 +1323,8 @@ func (s *KasRegistrySuite) createSortTestKeyAccessServers(prefixes []string) []s
return ids
}
-// deleteSortTestKeyAccessServers cleans up KAS entries created by sort tests.
-func (s *KasRegistrySuite) deleteSortTestKeyAccessServers(ids []string) {
+// deleteTestKeyAccessServers cleans up KAS entries created by sort tests.
+func (s *KasRegistrySuite) deleteTestKeyAccessServers(ids []string) {
for _, id := range ids {
_, err := s.db.PolicyClient.DeleteKeyAccessServer(s.ctx, id)
s.Require().NoError(err)
diff --git a/service/policy/db/key_access_server_registry.go b/service/policy/db/key_access_server_registry.go
index ef9eabc83c..c41c6b321e 100644
--- a/service/policy/db/key_access_server_registry.go
+++ b/service/policy/db/key_access_server_registry.go
@@ -43,10 +43,12 @@ func (c PolicyDBClient) ListKeyAccessServers(ctx context.Context, r *kasregistry
}
sortField, sortDirection := GetKeyAccessServersSortParams(r.GetSort())
+ search := pgtypeSubstringSearchPattern(r.GetSearch().GetTerm())
list, err := c.queries.listKeyAccessServers(ctx, listKeyAccessServersParams{
Offset: offset,
Limit: limit,
+ Search: search,
SortField: sortField,
SortDirection: sortDirection,
})
diff --git a/service/policy/db/key_access_server_registry.sql.go b/service/policy/db/key_access_server_registry.sql.go
index 5abf4db5ac..628d65d87e 100644
--- a/service/policy/db/key_access_server_registry.sql.go
+++ b/service/policy/db/key_access_server_registry.sql.go
@@ -641,9 +641,18 @@ WITH params AS (
COALESCE(NULLIF($3::text, ''), 'created_at') AS resolved_field,
COALESCE(NULLIF($4::text, ''), 'DESC') AS resolved_direction
),
+filtered AS (
+ SELECT kas.id, kas.uri, kas.public_key, kas.metadata, kas.created_at, kas.updated_at, kas.name, kas.source_type
+ FROM key_access_servers AS kas
+ WHERE (
+ $5::TEXT IS NULL
+ OR kas.name LIKE $5::TEXT ESCAPE '\'
+ OR kas.uri ILIKE $5::TEXT ESCAPE '\' -- Use slower case-insensitive matching, URIs can be registered with variable casing.
+ )
+),
counted AS (
SELECT COUNT(kas.id) AS total
- FROM key_access_servers AS kas
+ FROM filtered AS kas
)
SELECT kas.id,
kas.uri,
@@ -653,7 +662,7 @@ SELECT kas.id,
JSON_STRIP_NULLS(JSON_BUILD_OBJECT('labels', kas.metadata -> 'labels', 'created_at', kas.created_at, 'updated_at', kas.updated_at)) AS metadata,
kask_keys.keys,
counted.total
-FROM key_access_servers AS kas
+FROM filtered AS kas
CROSS JOIN counted
CROSS JOIN params p
LEFT JOIN (
@@ -689,10 +698,11 @@ OFFSET $1
`
type listKeyAccessServersParams struct {
- Offset int32 `json:"offset_"`
- Limit int32 `json:"limit_"`
- SortField string `json:"sort_field"`
- SortDirection string `json:"sort_direction"`
+ Offset int32 `json:"offset_"`
+ Limit int32 `json:"limit_"`
+ SortField string `json:"sort_field"`
+ SortDirection string `json:"sort_direction"`
+ Search pgtype.Text `json:"search"`
}
type listKeyAccessServersRow struct {
@@ -713,9 +723,18 @@ type listKeyAccessServersRow struct {
// COALESCE(NULLIF($3::text, ''), 'created_at') AS resolved_field,
// COALESCE(NULLIF($4::text, ''), 'DESC') AS resolved_direction
// ),
+// filtered AS (
+// SELECT kas.id, kas.uri, kas.public_key, kas.metadata, kas.created_at, kas.updated_at, kas.name, kas.source_type
+// FROM key_access_servers AS kas
+// WHERE (
+// $5::TEXT IS NULL
+// OR kas.name LIKE $5::TEXT ESCAPE '\'
+// OR kas.uri ILIKE $5::TEXT ESCAPE '\' -- Use slower case-insensitive matching, URIs can be registered with variable casing.
+// )
+// ),
// counted AS (
// SELECT COUNT(kas.id) AS total
-// FROM key_access_servers AS kas
+// FROM filtered AS kas
// )
// SELECT kas.id,
// kas.uri,
@@ -725,7 +744,7 @@ type listKeyAccessServersRow struct {
// JSON_STRIP_NULLS(JSON_BUILD_OBJECT('labels', kas.metadata -> 'labels', 'created_at', kas.created_at, 'updated_at', kas.updated_at)) AS metadata,
// kask_keys.keys,
// counted.total
-// FROM key_access_servers AS kas
+// FROM filtered AS kas
// CROSS JOIN counted
// CROSS JOIN params p
// LEFT JOIN (
@@ -764,6 +783,7 @@ func (q *Queries) listKeyAccessServers(ctx context.Context, arg listKeyAccessSer
arg.Limit,
arg.SortField,
arg.SortDirection,
+ arg.Search,
)
if err != nil {
return nil, err
diff --git a/service/policy/db/queries/key_access_server_registry.sql b/service/policy/db/queries/key_access_server_registry.sql
index a8317ea555..8711f33976 100644
--- a/service/policy/db/queries/key_access_server_registry.sql
+++ b/service/policy/db/queries/key_access_server_registry.sql
@@ -73,9 +73,18 @@ WITH params AS (
COALESCE(NULLIF(@sort_field::text, ''), 'created_at') AS resolved_field,
COALESCE(NULLIF(@sort_direction::text, ''), 'DESC') AS resolved_direction
),
+filtered AS (
+ SELECT kas.*
+ FROM key_access_servers AS kas
+ WHERE (
+ sqlc.narg('search')::TEXT IS NULL
+ OR kas.name LIKE sqlc.narg('search')::TEXT ESCAPE '\'
+ OR kas.uri ILIKE sqlc.narg('search')::TEXT ESCAPE '\' -- Use slower case-insensitive matching, URIs can be registered with variable casing.
+ )
+),
counted AS (
SELECT COUNT(kas.id) AS total
- FROM key_access_servers AS kas
+ FROM filtered AS kas
)
SELECT kas.id,
kas.uri,
@@ -85,7 +94,7 @@ SELECT kas.id,
JSON_STRIP_NULLS(JSON_BUILD_OBJECT('labels', kas.metadata -> 'labels', 'created_at', kas.created_at, 'updated_at', kas.updated_at)) AS metadata,
kask_keys.keys,
counted.total
-FROM key_access_servers AS kas
+FROM filtered AS kas
CROSS JOIN counted
CROSS JOIN params p
LEFT JOIN (
From a9db8958500818f9123362ddc651a318a0518b50 Mon Sep 17 00:00:00 2001
From: Chris Reed <87077975+c-r33d@users.noreply.github.com>
Date: Tue, 2 Jun 2026 15:24:12 -0500
Subject: [PATCH 07/10] feat(policy): add search support to ListObligations
(#3560)
## Summary
- Adds ListObligations RPC search support by wiring request search into
the policy DB list query.
- Applies escaped, case-insensitive matching in the obligations SQL path
and adds integration coverage for search behavior, wildcard literals,
empty search, and pagination after filtering.
## Summary by CodeRabbit
* **New Features**
* Added search capability to obligation listings, supporting search by
name and fully qualified name with case-insensitive matching.
* Search integrates seamlessly with namespace filters and pagination.
* **Tests**
* Added comprehensive integration tests for search functionality,
including combined filtering, whitespace handling, and pagination
behavior.
---------
Signed-off-by: Chris Reed
---
service/integration/obligations_test.go | 171 ++++++++++++++++++++++
service/policy/db/obligations.go | 5 +-
service/policy/db/obligations.sql.go | 62 ++++----
service/policy/db/queries/obligations.sql | 22 ++-
4 files changed, 211 insertions(+), 49 deletions(-)
diff --git a/service/integration/obligations_test.go b/service/integration/obligations_test.go
index f950788c35..9ac573c6ec 100644
--- a/service/integration/obligations_test.go
+++ b/service/integration/obligations_test.go
@@ -6,6 +6,7 @@ import (
"log/slog"
"slices"
"strconv"
+ "strings"
"testing"
"time"
@@ -526,6 +527,176 @@ func (s *ObligationsSuite) Test_ListObligations_OrdersByCreatedAt_Succeeds() {
assertIDsInOrder(s.T(), oblList, func(obl *policy.Obligation) string { return obl.GetId() }, third.GetId(), second.GetId(), first.GetId())
}
+func (s *ObligationsSuite) Test_ListObligations_SearchByNameAndFqn_Succeeds() {
+ namespaceID, _, _ := s.getNamespaceData(nsExampleCom)
+ suffix := time.Now().UnixNano()
+
+ alpha := s.createObligation(namespaceID, fmt.Sprintf("dspx-search-alpha-%d", suffix), nil)
+ beta := s.createObligation(namespaceID, fmt.Sprintf("dspx-search-beta-%d", suffix), nil)
+ other := s.createObligation(namespaceID, fmt.Sprintf("dspx-other-%d", suffix), nil)
+ defer s.deleteObligations([]string{alpha.GetId(), beta.GetId(), other.GetId()})
+
+ byName, page, err := s.db.PolicyClient.ListObligations(s.ctx, &obligations.ListObligationsRequest{
+ Search: &policy.Search{Term: strings.ToUpper(alpha.GetName())},
+ })
+ s.Require().NoError(err)
+ s.Require().Len(byName, 1)
+ s.Equal(alpha.GetId(), byName[0].GetId())
+ s.Equal(int32(1), page.GetTotal())
+
+ byFqn, page, err := s.db.PolicyClient.ListObligations(s.ctx, &obligations.ListObligationsRequest{
+ Search: &policy.Search{Term: strings.ToUpper(beta.GetFqn())},
+ })
+ s.Require().NoError(err)
+ s.Require().Len(byFqn, 1)
+ s.Equal(beta.GetId(), byFqn[0].GetId())
+ s.Equal(int32(1), page.GetTotal())
+}
+
+func (s *ObligationsSuite) Test_ListObligations_SearchEscapesLikeWildcardLiterals_Succeeds() {
+ namespaceID, _, _ := s.getNamespaceData(nsExampleCom)
+ suffix := time.Now().UnixNano()
+
+ alpha := s.createObligation(namespaceID, fmt.Sprintf("wildcarda-%d", suffix), nil)
+ beta := s.createObligation(namespaceID, fmt.Sprintf("wildcardb-%d", suffix), nil)
+ defer s.deleteObligations([]string{alpha.GetId(), beta.GetId()})
+
+ for _, query := range []string{
+ fmt.Sprintf("wildcard_-%d", suffix),
+ fmt.Sprintf("wildcard%%-%d", suffix),
+ } {
+ list, page, err := s.db.PolicyClient.ListObligations(s.ctx, &obligations.ListObligationsRequest{
+ NamespaceId: namespaceID,
+ Search: &policy.Search{Term: query},
+ })
+ s.Require().NoError(err)
+ s.Empty(list)
+ s.Equal(int32(0), page.GetTotal())
+ }
+}
+
+func (s *ObligationsSuite) Test_ListObligations_SearchCombinesWithNamespaceFilters_Succeeds() {
+ comID, comFQN, _ := s.getNamespaceData(nsExampleCom)
+ netID, netFQN, _ := s.getNamespaceData(nsExampleNet)
+ suffix := time.Now().UnixNano()
+ searchToken := fmt.Sprintf("dspx-search-filter-%d", suffix)
+
+ comMatch := s.createObligation(comID, "com-"+searchToken, nil)
+ netMatch := s.createObligation(netID, "net-"+searchToken, nil)
+ comOther := s.createObligation(comID, fmt.Sprintf("dspx-search-filter-other-%d", suffix), nil)
+ defer s.deleteObligations([]string{comMatch.GetId(), netMatch.GetId(), comOther.GetId()})
+
+ byNamespaceID, page, err := s.db.PolicyClient.ListObligations(s.ctx, &obligations.ListObligationsRequest{
+ NamespaceId: comID,
+ Search: &policy.Search{Term: searchToken},
+ })
+ s.Require().NoError(err)
+ s.Require().Len(byNamespaceID, 1)
+ s.Equal(comMatch.GetId(), byNamespaceID[0].GetId())
+ s.Equal(int32(1), page.GetTotal())
+
+ byNamespaceFQN, page, err := s.db.PolicyClient.ListObligations(s.ctx, &obligations.ListObligationsRequest{
+ NamespaceFqn: netFQN,
+ Search: &policy.Search{Term: strings.ToUpper(searchToken)},
+ })
+ s.Require().NoError(err)
+ s.Require().Len(byNamespaceFQN, 1)
+ s.Equal(netMatch.GetId(), byNamespaceFQN[0].GetId())
+ s.Equal(int32(1), page.GetTotal())
+
+ noMatch, page, err := s.db.PolicyClient.ListObligations(s.ctx, &obligations.ListObligationsRequest{
+ NamespaceFqn: comFQN,
+ Search: &policy.Search{Term: "missing-" + searchToken},
+ })
+ s.Require().NoError(err)
+ s.Empty(noMatch)
+ s.Equal(int32(0), page.GetTotal())
+}
+
+func (s *ObligationsSuite) Test_ListObligations_SearchEmptyAndWhitespace_Succeeds() {
+ namespaceID, _, _ := s.getNamespaceData(nsExampleCom)
+ name := fmt.Sprintf("dspx-search-whitespace-%d", time.Now().UnixNano())
+ created := s.createObligation(namespaceID, name, nil)
+ defer s.deleteObligations([]string{created.GetId()})
+
+ noSearch, noSearchPage, err := s.db.PolicyClient.ListObligations(s.ctx, &obligations.ListObligationsRequest{
+ NamespaceId: namespaceID,
+ })
+ s.Require().NoError(err)
+ s.NotEmpty(noSearch)
+
+ _, emptySearchPage, err := s.db.PolicyClient.ListObligations(s.ctx, &obligations.ListObligationsRequest{
+ NamespaceId: namespaceID,
+ Search: &policy.Search{Term: ""},
+ })
+ s.Require().NoError(err)
+ s.Equal(noSearchPage.GetTotal(), emptySearchPage.GetTotal())
+
+ _, whitespaceSearchPage, err := s.db.PolicyClient.ListObligations(s.ctx, &obligations.ListObligationsRequest{
+ NamespaceId: namespaceID,
+ Search: &policy.Search{Term: " "},
+ })
+ s.Require().NoError(err)
+ s.Equal(whitespaceSearchPage.GetTotal(), emptySearchPage.GetTotal())
+
+ trimAdditional, trimAdditionalPage, err := s.db.PolicyClient.ListObligations(s.ctx, &obligations.ListObligationsRequest{
+ NamespaceId: namespaceID,
+ Search: &policy.Search{Term: " " + name + " "},
+ })
+ s.Require().NoError(err)
+ s.Require().Len(trimAdditional, 1)
+ s.Equal(trimAdditional[0].GetId(), created.GetId())
+ s.Equal(int32(1), trimAdditionalPage.GetTotal())
+}
+
+func (s *ObligationsSuite) Test_ListObligations_SearchPaginationAppliesAfterFiltering_Succeeds() {
+ namespaceID, _, _ := s.getNamespaceData(nsExampleCom)
+ suffix := time.Now().UnixNano()
+ searchToken := fmt.Sprintf("dspx-search-page-%d", suffix)
+ names := []string{
+ "a-" + searchToken,
+ "b-" + searchToken,
+ "c-" + searchToken,
+ fmt.Sprintf("dspx-search-page-other-%d", suffix),
+ }
+ ids := make([]string, len(names))
+ for i, name := range names {
+ created := s.createObligation(namespaceID, name, nil)
+ ids[i] = created.GetId()
+ }
+ defer s.deleteObligations(ids)
+
+ firstPage, firstPagePagination, err := s.db.PolicyClient.ListObligations(s.ctx, &obligations.ListObligationsRequest{
+ NamespaceId: namespaceID,
+ Search: &policy.Search{Term: searchToken},
+ Pagination: &policy.PageRequest{Limit: 2},
+ Sort: []*obligations.ObligationsSort{
+ {Field: obligations.SortObligationsType_SORT_OBLIGATIONS_TYPE_NAME, Direction: policy.SortDirection_SORT_DIRECTION_ASC},
+ },
+ })
+ s.Require().NoError(err)
+ s.Require().Len(firstPage, 2)
+ s.Equal(int32(3), firstPagePagination.GetTotal())
+ s.Equal(int32(2), firstPagePagination.GetNextOffset())
+ s.Equal(ids[0], firstPage[0].GetId())
+ s.Equal(ids[1], firstPage[1].GetId())
+
+ secondPage, secondPagePagination, err := s.db.PolicyClient.ListObligations(s.ctx, &obligations.ListObligationsRequest{
+ NamespaceId: namespaceID,
+ Search: &policy.Search{Term: searchToken},
+ Pagination: &policy.PageRequest{Limit: 2, Offset: 2},
+ Sort: []*obligations.ObligationsSort{
+ {Field: obligations.SortObligationsType_SORT_OBLIGATIONS_TYPE_NAME, Direction: policy.SortDirection_SORT_DIRECTION_ASC},
+ },
+ })
+ s.Require().NoError(err)
+ s.Require().Len(secondPage, 1)
+ s.Equal(int32(3), secondPagePagination.GetTotal())
+ s.Equal(int32(2), secondPagePagination.GetCurrentOffset())
+ s.Equal(int32(0), secondPagePagination.GetNextOffset())
+ s.Equal(ids[2], secondPage[0].GetId())
+}
+
func (s *ObligationsSuite) Test_ListObligations_Fails() {
// Attempt to list obligations with an invalid namespace ID
oblList, _, err := s.db.PolicyClient.ListObligations(s.ctx, &obligations.ListObligationsRequest{
diff --git a/service/policy/db/obligations.go b/service/policy/db/obligations.go
index 5e57dbf583..41764f3c55 100644
--- a/service/policy/db/obligations.go
+++ b/service/policy/db/obligations.go
@@ -226,12 +226,12 @@ func (c PolicyDBClient) ListObligations(ctx context.Context, r *obligations.List
parsedID := pgtypeUUID(namespaceID)
idIsValid := parsedID.Valid
- sortField, sortDirection := GetObligationsSortParams(r.GetSort())
-
if useID && !idIsValid {
return nil, nil, db.ErrUUIDInvalid
}
+ sortField, sortDirection := GetObligationsSortParams(r.GetSort())
+ searchTerm := pgtypeSubstringSearchPattern(r.GetSearch().GetTerm())
limit, offset := c.getRequestedLimitOffset(r.GetPagination())
maxLimit := c.listCfg.limitMax
@@ -242,6 +242,7 @@ func (c PolicyDBClient) ListObligations(ctx context.Context, r *obligations.List
rows, err := c.queries.listObligations(ctx, listObligationsParams{
NamespaceID: parsedID,
NamespaceFqn: pgtypeText(r.GetNamespaceFqn()),
+ Search: searchTerm,
Limit: limit,
Offset: offset,
SortField: sortField,
diff --git a/service/policy/db/obligations.sql.go b/service/policy/db/obligations.sql.go
index 6e923844fc..fa88b3dc37 100644
--- a/service/policy/db/obligations.sql.go
+++ b/service/policy/db/obligations.sql.go
@@ -1675,17 +1675,8 @@ func (q *Queries) listObligationTriggers(ctx context.Context, arg listObligation
const listObligations = `-- name: listObligations :many
WITH params AS (
SELECT
- COALESCE(NULLIF($5::text, ''), 'created_at') AS resolved_field,
- COALESCE(NULLIF($6::text, ''), 'DESC') AS resolved_direction
-),
-counted AS (
- SELECT COUNT(od.id) AS total
- FROM obligation_definitions od
- LEFT JOIN attribute_namespaces n ON od.namespace_id = n.id
- LEFT JOIN attribute_fqns fqns ON fqns.namespace_id = n.id AND fqns.attribute_id IS NULL AND fqns.value_id IS NULL
- WHERE
- ($1::uuid IS NULL OR od.namespace_id = $1::uuid) AND
- ($2::text IS NULL OR fqns.fqn = $2::text)
+ COALESCE(NULLIF($6::text, ''), 'created_at') AS resolved_field,
+ COALESCE(NULLIF($7::text, ''), 'DESC') AS resolved_direction
),
obligation_triggers_agg AS (
SELECT
@@ -1743,18 +1734,23 @@ SELECT
'triggers', COALESCE(ota.triggers, '[]'::JSON)
)
) FILTER (WHERE ov.id IS NOT NULL) as values,
- counted.total
+ COUNT(*) OVER () AS total
FROM obligation_definitions od
JOIN attribute_namespaces n on od.namespace_id = n.id
LEFT JOIN attribute_fqns fqns ON fqns.namespace_id = n.id AND fqns.attribute_id IS NULL AND fqns.value_id IS NULL
-CROSS JOIN counted
CROSS JOIN params p
LEFT JOIN obligation_values_standard ov on od.id = ov.obligation_definition_id
LEFT JOIN obligation_triggers_agg ota on ov.id = ota.obligation_value_id
WHERE
($1::uuid IS NULL OR od.namespace_id = $1::uuid) AND
- ($2::text IS NULL OR fqns.fqn = $2::text)
-GROUP BY od.id, n.id, fqns.fqn, counted.total, p.resolved_field, p.resolved_direction
+ ($2::text IS NULL OR fqns.fqn = $2::text) AND
+ -- No search-specific optimization is added here. If needed, consider
+ -- a pg_trgm-backed GIN index on obligation name/FQN expressions.
+ (
+ $3::text IS NULL
+ OR CONCAT_WS('/', fqns.fqn, 'obl', od.name) LIKE $3::text ESCAPE '\'
+ )
+GROUP BY od.id, n.id, fqns.fqn, p.resolved_field, p.resolved_direction
ORDER BY
CASE WHEN p.resolved_field = 'name' AND p.resolved_direction = 'ASC' THEN od.name END ASC,
CASE WHEN p.resolved_field = 'name' AND p.resolved_direction = 'DESC' THEN od.name END DESC,
@@ -1765,13 +1761,14 @@ ORDER BY
CASE WHEN p.resolved_field = 'updated_at' AND p.resolved_direction = 'ASC' THEN od.updated_at END ASC,
CASE WHEN p.resolved_field = 'updated_at' AND p.resolved_direction = 'DESC' THEN od.updated_at END DESC,
od.id ASC
-LIMIT $4
-OFFSET $3
+LIMIT $5
+OFFSET $4
`
type listObligationsParams struct {
NamespaceID pgtype.UUID `json:"namespace_id"`
NamespaceFqn pgtype.Text `json:"namespace_fqn"`
+ Search pgtype.Text `json:"search"`
Offset int32 `json:"offset_"`
Limit int32 `json:"limit_"`
SortField string `json:"sort_field"`
@@ -1791,17 +1788,8 @@ type listObligationsRow struct {
//
// WITH params AS (
// SELECT
-// COALESCE(NULLIF($5::text, ''), 'created_at') AS resolved_field,
-// COALESCE(NULLIF($6::text, ''), 'DESC') AS resolved_direction
-// ),
-// counted AS (
-// SELECT COUNT(od.id) AS total
-// FROM obligation_definitions od
-// LEFT JOIN attribute_namespaces n ON od.namespace_id = n.id
-// LEFT JOIN attribute_fqns fqns ON fqns.namespace_id = n.id AND fqns.attribute_id IS NULL AND fqns.value_id IS NULL
-// WHERE
-// ($1::uuid IS NULL OR od.namespace_id = $1::uuid) AND
-// ($2::text IS NULL OR fqns.fqn = $2::text)
+// COALESCE(NULLIF($6::text, ''), 'created_at') AS resolved_field,
+// COALESCE(NULLIF($7::text, ''), 'DESC') AS resolved_direction
// ),
// obligation_triggers_agg AS (
// SELECT
@@ -1859,18 +1847,23 @@ type listObligationsRow struct {
// 'triggers', COALESCE(ota.triggers, '[]'::JSON)
// )
// ) FILTER (WHERE ov.id IS NOT NULL) as values,
-// counted.total
+// COUNT(*) OVER () AS total
// FROM obligation_definitions od
// JOIN attribute_namespaces n on od.namespace_id = n.id
// LEFT JOIN attribute_fqns fqns ON fqns.namespace_id = n.id AND fqns.attribute_id IS NULL AND fqns.value_id IS NULL
-// CROSS JOIN counted
// CROSS JOIN params p
// LEFT JOIN obligation_values_standard ov on od.id = ov.obligation_definition_id
// LEFT JOIN obligation_triggers_agg ota on ov.id = ota.obligation_value_id
// WHERE
// ($1::uuid IS NULL OR od.namespace_id = $1::uuid) AND
-// ($2::text IS NULL OR fqns.fqn = $2::text)
-// GROUP BY od.id, n.id, fqns.fqn, counted.total, p.resolved_field, p.resolved_direction
+// ($2::text IS NULL OR fqns.fqn = $2::text) AND
+// -- No search-specific optimization is added here. If needed, consider
+// -- a pg_trgm-backed GIN index on obligation name/FQN expressions.
+// (
+// $3::text IS NULL
+// OR CONCAT_WS('/', fqns.fqn, 'obl', od.name) LIKE $3::text ESCAPE '\'
+// )
+// GROUP BY od.id, n.id, fqns.fqn, p.resolved_field, p.resolved_direction
// ORDER BY
// CASE WHEN p.resolved_field = 'name' AND p.resolved_direction = 'ASC' THEN od.name END ASC,
// CASE WHEN p.resolved_field = 'name' AND p.resolved_direction = 'DESC' THEN od.name END DESC,
@@ -1881,12 +1874,13 @@ type listObligationsRow struct {
// CASE WHEN p.resolved_field = 'updated_at' AND p.resolved_direction = 'ASC' THEN od.updated_at END ASC,
// CASE WHEN p.resolved_field = 'updated_at' AND p.resolved_direction = 'DESC' THEN od.updated_at END DESC,
// od.id ASC
-// LIMIT $4
-// OFFSET $3
+// LIMIT $5
+// OFFSET $4
func (q *Queries) listObligations(ctx context.Context, arg listObligationsParams) ([]listObligationsRow, error) {
rows, err := q.db.Query(ctx, listObligations,
arg.NamespaceID,
arg.NamespaceFqn,
+ arg.Search,
arg.Offset,
arg.Limit,
arg.SortField,
diff --git a/service/policy/db/queries/obligations.sql b/service/policy/db/queries/obligations.sql
index 54f636bf14..8071a1dea1 100644
--- a/service/policy/db/queries/obligations.sql
+++ b/service/policy/db/queries/obligations.sql
@@ -130,15 +130,6 @@ WITH params AS (
COALESCE(NULLIF(@sort_field::text, ''), 'created_at') AS resolved_field,
COALESCE(NULLIF(@sort_direction::text, ''), 'DESC') AS resolved_direction
),
-counted AS (
- SELECT COUNT(od.id) AS total
- FROM obligation_definitions od
- LEFT JOIN attribute_namespaces n ON od.namespace_id = n.id
- LEFT JOIN attribute_fqns fqns ON fqns.namespace_id = n.id AND fqns.attribute_id IS NULL AND fqns.value_id IS NULL
- WHERE
- (sqlc.narg('namespace_id')::uuid IS NULL OR od.namespace_id = sqlc.narg('namespace_id')::uuid) AND
- (sqlc.narg('namespace_fqn')::text IS NULL OR fqns.fqn = sqlc.narg('namespace_fqn')::text)
-),
obligation_triggers_agg AS (
SELECT
ot.obligation_value_id,
@@ -195,18 +186,23 @@ SELECT
'triggers', COALESCE(ota.triggers, '[]'::JSON)
)
) FILTER (WHERE ov.id IS NOT NULL) as values,
- counted.total
+ COUNT(*) OVER () AS total
FROM obligation_definitions od
JOIN attribute_namespaces n on od.namespace_id = n.id
LEFT JOIN attribute_fqns fqns ON fqns.namespace_id = n.id AND fqns.attribute_id IS NULL AND fqns.value_id IS NULL
-CROSS JOIN counted
CROSS JOIN params p
LEFT JOIN obligation_values_standard ov on od.id = ov.obligation_definition_id
LEFT JOIN obligation_triggers_agg ota on ov.id = ota.obligation_value_id
WHERE
(sqlc.narg('namespace_id')::uuid IS NULL OR od.namespace_id = sqlc.narg('namespace_id')::uuid) AND
- (sqlc.narg('namespace_fqn')::text IS NULL OR fqns.fqn = sqlc.narg('namespace_fqn')::text)
-GROUP BY od.id, n.id, fqns.fqn, counted.total, p.resolved_field, p.resolved_direction
+ (sqlc.narg('namespace_fqn')::text IS NULL OR fqns.fqn = sqlc.narg('namespace_fqn')::text) AND
+ -- No search-specific optimization is added here. If needed, consider
+ -- a pg_trgm-backed GIN index on obligation name/FQN expressions.
+ (
+ sqlc.narg('search')::text IS NULL
+ OR CONCAT_WS('/', fqns.fqn, 'obl', od.name) LIKE sqlc.narg('search')::text ESCAPE '\'
+ )
+GROUP BY od.id, n.id, fqns.fqn, p.resolved_field, p.resolved_direction
ORDER BY
CASE WHEN p.resolved_field = 'name' AND p.resolved_direction = 'ASC' THEN od.name END ASC,
CASE WHEN p.resolved_field = 'name' AND p.resolved_direction = 'DESC' THEN od.name END DESC,
From bb3876731588e41c18f225902735b653fc205f26 Mon Sep 17 00:00:00 2001
From: Chris Reed <87077975+c-r33d@users.noreply.github.com>
Date: Wed, 3 Jun 2026 08:50:51 -0500
Subject: [PATCH 08/10] feat(policy): add search support to
ListSubjectConditionSets (#3556)
## Summary
- Adds ListSubjectConditionSets RPC search support by wiring request
search into the policy DB list query.
- Applies escaped, case-insensitive matching in the subject condition
set SQL path and adds integration coverage for search behavior, wildcard
literals, empty search, and pagination after filtering.
## Summary by CodeRabbit
* **New Features**
* Added search functionality for subject condition sets filtered by
metadata labels.
* Search supports pagination, sorting, and combines with namespace
filtering.
* Search properly handles whitespace and special character escaping.
* **Tests**
* Expanded integration test coverage for search behavior with metadata
labels.
* Updated existing sorting tests with improved cleanup utilities.
---------
Signed-off-by: Chris Reed
---
service/integration/subject_mappings_test.go | 168 ++++++++++++++++--
.../policy/db/queries/subject_mappings.sql | 16 +-
service/policy/db/subject_mappings.go | 2 +
service/policy/db/subject_mappings.sql.go | 50 ++++--
service/policy/db/utils.go | 3 +-
5 files changed, 210 insertions(+), 29 deletions(-)
diff --git a/service/integration/subject_mappings_test.go b/service/integration/subject_mappings_test.go
index 5376dc8be6..bff23910d8 100644
--- a/service/integration/subject_mappings_test.go
+++ b/service/integration/subject_mappings_test.go
@@ -1482,9 +1482,129 @@ func (s *SubjectMappingsSuite) Test_ListSubjectConditionSets_NoNamespaceFilter_R
s.True(foundUnnamespaced)
}
+func (s *SubjectMappingsSuite) Test_ListSubjectConditionSets_SearchByMetadataLabelValues_PaginationSort_Succeeds() {
+ suffix := time.Now().UnixNano()
+ searchToken := fmt.Sprintf("dspx-scs-search-%d", suffix)
+
+ multiLabel := map[string]string{
+ "name": "another",
+ "display": searchToken,
+ }
+ labelValueMatch := s.newSearchTestSubjectConditionSet(fmt.Sprintf(".dspx_scs_selector_%d", suffix), []string{"engineering"}, multiLabel, "")
+ anotherLabelValueMatch := s.newSearchTestSubjectConditionSet(fmt.Sprintf(".dspx_scs_other_%d", suffix), []string{"finance"}, map[string]string{"owner": "group-" + searchToken}, "")
+ labelKeyOnlyNonMatch := s.newSearchTestSubjectConditionSet(fmt.Sprintf(".dspx_scs_key_only_%d", suffix), []string{"legal"}, map[string]string{searchToken: "not-a-matching-value"}, "")
+ conditionOnlyNonMatch := s.newSearchTestSubjectConditionSet("."+searchToken+".department", []string{"value-" + searchToken}, map[string]string{"team": "finance"}, "")
+ defer s.deleteTestSCSs([]string{
+ labelValueMatch.GetId(),
+ anotherLabelValueMatch.GetId(),
+ labelKeyOnlyNonMatch.GetId(),
+ conditionOnlyNonMatch.GetId(),
+ })
+
+ listRsp, err := s.db.PolicyClient.ListSubjectConditionSets(s.ctx, &subjectmapping.ListSubjectConditionSetsRequest{
+ Search: &policy.Search{Term: strings.ToUpper(searchToken)},
+ Sort: []*subjectmapping.SubjectConditionSetsSort{
+ {Field: subjectmapping.SortSubjectConditionSetsType_SORT_SUBJECT_CONDITION_SETS_TYPE_CREATED_AT, Direction: policy.SortDirection_SORT_DIRECTION_ASC},
+ },
+ })
+ s.Require().NoError(err)
+ s.Require().NotNil(listRsp)
+ s.Require().Len(listRsp.GetSubjectConditionSets(), 2)
+ s.Equal(labelValueMatch.GetId(), listRsp.GetSubjectConditionSets()[0].GetId())
+ s.Equal(anotherLabelValueMatch.GetId(), listRsp.GetSubjectConditionSets()[1].GetId())
+ s.Equal(int32(2), listRsp.GetPagination().GetTotal())
+
+ firstPage, err := s.db.PolicyClient.ListSubjectConditionSets(s.ctx, &subjectmapping.ListSubjectConditionSetsRequest{
+ Search: &policy.Search{Term: searchToken},
+ Pagination: &policy.PageRequest{Limit: 1},
+ Sort: []*subjectmapping.SubjectConditionSetsSort{
+ {Field: subjectmapping.SortSubjectConditionSetsType_SORT_SUBJECT_CONDITION_SETS_TYPE_CREATED_AT, Direction: policy.SortDirection_SORT_DIRECTION_ASC},
+ },
+ })
+ s.Require().NoError(err)
+ s.Len(firstPage.GetSubjectConditionSets(), 1)
+ s.Equal(labelValueMatch.GetId(), firstPage.GetSubjectConditionSets()[0].GetId())
+ s.Equal(int32(2), firstPage.GetPagination().GetTotal())
+ s.Equal(int32(1), firstPage.GetPagination().GetNextOffset())
+}
+
+func (s *SubjectMappingsSuite) Test_ListSubjectConditionSets_SearchEscapesLikeWildcardLiterals_Succeeds() {
+ suffix := time.Now().UnixNano()
+ conditionSetIDs := []string{
+ s.newSearchTestSubjectConditionSet(
+ fmt.Sprintf(".dspx_scs_like_a_%d", suffix),
+ []string{"engineering"},
+ map[string]string{"team": fmt.Sprintf("wildcarda-%d", suffix)},
+ "",
+ ).GetId(),
+ s.newSearchTestSubjectConditionSet(
+ fmt.Sprintf(".dspx_scs_like_b_%d", suffix),
+ []string{"finance"},
+ map[string]string{"team": fmt.Sprintf("wildcardb-%d", suffix)},
+ "",
+ ).GetId(),
+ }
+ defer s.deleteTestSCSs(conditionSetIDs)
+
+ for _, query := range []string{
+ fmt.Sprintf("wildcard_-%d", suffix),
+ fmt.Sprintf("wildcard%%-%d", suffix),
+ } {
+ listRsp, err := s.db.PolicyClient.ListSubjectConditionSets(s.ctx, &subjectmapping.ListSubjectConditionSetsRequest{
+ Search: &policy.Search{Term: query},
+ })
+ s.Require().NoError(err)
+ s.Empty(listRsp.GetSubjectConditionSets())
+ s.Equal(int32(0), listRsp.GetPagination().GetTotal())
+ }
+}
+
+func (s *SubjectMappingsSuite) Test_ListSubjectConditionSets_SearchCombinesWithNamespace_Succeeds() {
+ comNsID := s.exampleComNsID()
+ netNsID := s.exampleNetNsID()
+ searchToken := fmt.Sprintf("dspx-scs-namespace-search-%d", time.Now().UnixNano())
+
+ comSCS := s.newSearchTestSubjectConditionSet(fmt.Sprintf(".dspx_scs_com_%d", time.Now().UnixNano()), []string{"com-value"}, map[string]string{"team": "com-" + searchToken}, comNsID)
+ netSCS := s.newSearchTestSubjectConditionSet(fmt.Sprintf(".dspx_scs_net_%d", time.Now().UnixNano()), []string{"net-value"}, map[string]string{"team": "net-" + searchToken}, netNsID)
+ unnamespacedSCS := s.newSearchTestSubjectConditionSet(fmt.Sprintf(".dspx_scs_global_%d", time.Now().UnixNano()), []string{"unnamespaced-value"}, map[string]string{"team": "global-" + searchToken}, "")
+ defer s.deleteTestSCSs([]string{comSCS.GetId(), netSCS.GetId(), unnamespacedSCS.GetId()})
+
+ listRsp, err := s.db.PolicyClient.ListSubjectConditionSets(s.ctx, &subjectmapping.ListSubjectConditionSetsRequest{
+ NamespaceId: comNsID,
+ Search: &policy.Search{Term: "com-" + searchToken},
+ })
+ s.Require().NoError(err)
+ s.Require().Len(listRsp.GetSubjectConditionSets(), 1)
+ s.Equal(comSCS.GetId(), listRsp.GetSubjectConditionSets()[0].GetId())
+ s.Equal(comNsID, listRsp.GetSubjectConditionSets()[0].GetNamespace().GetId())
+ s.Equal(int32(1), listRsp.GetPagination().GetTotal())
+}
+
+func (s *SubjectMappingsSuite) Test_ListSubjectConditionSets_SearchEmptyAndWhitespace_Succeeds() {
+ searchToken := fmt.Sprintf("dspx-scs-trim-%d", time.Now().UnixNano())
+ created := s.newSearchTestSubjectConditionSet(fmt.Sprintf(".dspx_scs_trim_%d", time.Now().UnixNano()), []string{"trim-value"}, map[string]string{"team": searchToken}, "")
+ defer s.deleteTestSCSs([]string{created.GetId()})
+
+ noSearch, err := s.db.PolicyClient.ListSubjectConditionSets(s.ctx, &subjectmapping.ListSubjectConditionSetsRequest{})
+ s.Require().NoError(err)
+ emptySearch, err := s.db.PolicyClient.ListSubjectConditionSets(s.ctx, &subjectmapping.ListSubjectConditionSetsRequest{
+ Search: &policy.Search{Term: ""},
+ })
+ s.Require().NoError(err)
+ s.Equal(noSearch.GetPagination().GetTotal(), emptySearch.GetPagination().GetTotal())
+
+ leadingSpaceSearch, err := s.db.PolicyClient.ListSubjectConditionSets(s.ctx, &subjectmapping.ListSubjectConditionSetsRequest{
+ Search: &policy.Search{Term: " " + searchToken},
+ })
+ s.Require().NoError(err)
+ s.Require().Len(leadingSpaceSearch.GetSubjectConditionSets(), 1)
+ s.Equal(created.GetId(), leadingSpaceSearch.GetSubjectConditionSets()[0].GetId())
+ s.Equal(int32(1), leadingSpaceSearch.GetPagination().GetTotal())
+}
+
func (s *SubjectMappingsSuite) Test_ListSubjectConditionSets_SortByCreatedAt_ASC() {
ids := s.createSortTestSubjectConditionSets([]string{"sort-scs-created-asc-0", "sort-scs-created-asc-1", "sort-scs-created-asc-2"})
- defer s.deleteSortTestSubjectConditionSets(ids)
+ defer s.deleteTestSCSs(ids)
listRsp, err := s.db.PolicyClient.ListSubjectConditionSets(s.ctx, &subjectmapping.ListSubjectConditionSetsRequest{
Sort: []*subjectmapping.SubjectConditionSetsSort{
@@ -1500,7 +1620,7 @@ func (s *SubjectMappingsSuite) Test_ListSubjectConditionSets_SortByCreatedAt_ASC
func (s *SubjectMappingsSuite) Test_ListSubjectConditionSets_SortByCreatedAt_DESC() {
ids := s.createSortTestSubjectConditionSets([]string{"sort-scs-created-desc-0", "sort-scs-created-desc-1", "sort-scs-created-desc-2"})
- defer s.deleteSortTestSubjectConditionSets(ids)
+ defer s.deleteTestSCSs(ids)
listRsp, err := s.db.PolicyClient.ListSubjectConditionSets(s.ctx, &subjectmapping.ListSubjectConditionSetsRequest{
Sort: []*subjectmapping.SubjectConditionSetsSort{
@@ -1516,7 +1636,7 @@ func (s *SubjectMappingsSuite) Test_ListSubjectConditionSets_SortByCreatedAt_DES
func (s *SubjectMappingsSuite) Test_ListSubjectConditionSets_SortByUpdatedAt_DESC() {
ids := s.createSortTestSubjectConditionSets([]string{"sort-scs-updated-desc-0", "sort-scs-updated-desc-1", "sort-scs-updated-desc-2"})
- defer s.deleteSortTestSubjectConditionSets(ids)
+ defer s.deleteTestSCSs(ids)
// Update the first SCS so its updated_at is the most recent
time.Sleep(5 * time.Millisecond)
@@ -1543,7 +1663,7 @@ func (s *SubjectMappingsSuite) Test_ListSubjectConditionSets_SortByUpdatedAt_DES
func (s *SubjectMappingsSuite) Test_ListSubjectConditionSets_SortByUpdatedAt_ASC() {
ids := s.createSortTestSubjectConditionSets([]string{"sort-scs-updated-asc-0", "sort-scs-updated-asc-1", "sort-scs-updated-asc-2"})
- defer s.deleteSortTestSubjectConditionSets(ids)
+ defer s.deleteTestSCSs(ids)
// Update the last SCS so its updated_at is the most recent
time.Sleep(5 * time.Millisecond)
@@ -1594,7 +1714,7 @@ func (s *SubjectMappingsSuite) Test_ListSubjectConditionSets_SortTieBreaker_Crea
s.Require().NoError(err)
ids[i] = created.GetId()
}
- defer s.deleteSortTestSubjectConditionSets(ids)
+ defer s.deleteTestSCSs(ids)
s.Require().NoError(forceCreatedAtTie(s.ctx, s.db, "subject_condition_set", ids))
@@ -1613,7 +1733,7 @@ func (s *SubjectMappingsSuite) Test_ListSubjectConditionSets_SortTieBreaker_Crea
func (s *SubjectMappingsSuite) Test_ListSubjectConditionSets_SortByUnspecifiedField_DefaultsToCreatedAt() {
ids := s.createSortTestSubjectConditionSets([]string{"unspecified-field-scs-0", "unspecified-field-scs-1", "unspecified-field-scs-2"})
- defer s.deleteSortTestSubjectConditionSets(ids)
+ defer s.deleteTestSCSs(ids)
listRsp, err := s.db.PolicyClient.ListSubjectConditionSets(s.ctx, &subjectmapping.ListSubjectConditionSetsRequest{
Sort: []*subjectmapping.SubjectConditionSetsSort{
@@ -1629,7 +1749,7 @@ func (s *SubjectMappingsSuite) Test_ListSubjectConditionSets_SortByUnspecifiedFi
func (s *SubjectMappingsSuite) Test_ListSubjectConditionSets_SortByUnspecifiedDirection_DefaultsToDESC() {
ids := s.createSortTestSubjectConditionSets([]string{"unspecified-dir-scs-0", "unspecified-dir-scs-1", "unspecified-dir-scs-2"})
- defer s.deleteSortTestSubjectConditionSets(ids)
+ defer s.deleteTestSCSs(ids)
listRsp, err := s.db.PolicyClient.ListSubjectConditionSets(s.ctx, &subjectmapping.ListSubjectConditionSetsRequest{
Sort: []*subjectmapping.SubjectConditionSetsSort{
@@ -1645,7 +1765,7 @@ func (s *SubjectMappingsSuite) Test_ListSubjectConditionSets_SortByUnspecifiedDi
func (s *SubjectMappingsSuite) Test_ListSubjectConditionSets_SortByBothUnspecified_DefaultsToCreatedAtDESC() {
ids := s.createSortTestSubjectConditionSets([]string{"both-unspecified-scs-0", "both-unspecified-scs-1", "both-unspecified-scs-2"})
- defer s.deleteSortTestSubjectConditionSets(ids)
+ defer s.deleteTestSCSs(ids)
listRsp, err := s.db.PolicyClient.ListSubjectConditionSets(s.ctx, &subjectmapping.ListSubjectConditionSetsRequest{
Sort: []*subjectmapping.SubjectConditionSetsSort{
@@ -1661,7 +1781,7 @@ func (s *SubjectMappingsSuite) Test_ListSubjectConditionSets_SortByBothUnspecifi
func (s *SubjectMappingsSuite) Test_ListSubjectConditionSets_SortOmitted() {
ids := s.createSortTestSubjectConditionSets([]string{"sort-omitted-scs-0", "sort-omitted-scs-1", "sort-omitted-scs-2"})
- defer s.deleteSortTestSubjectConditionSets(ids)
+ defer s.deleteTestSCSs(ids)
listRsp, err := s.db.PolicyClient.ListSubjectConditionSets(s.ctx, &subjectmapping.ListSubjectConditionSetsRequest{})
s.Require().NoError(err)
@@ -2859,6 +2979,32 @@ func (s *SubjectMappingsSuite) newSCSInNamespace(nsID string) *policy.SubjectCon
return scs
}
+func (s *SubjectMappingsSuite) newSearchTestSubjectConditionSet(selector string, values []string, labels map[string]string, namespaceID string) *policy.SubjectConditionSet {
+ scs, err := s.db.PolicyClient.CreateSubjectConditionSet(s.ctx, &subjectmapping.SubjectConditionSetCreate{
+ SubjectSets: []*policy.SubjectSet{
+ {
+ ConditionGroups: []*policy.ConditionGroup{
+ {
+ BooleanOperator: policy.ConditionBooleanTypeEnum_CONDITION_BOOLEAN_TYPE_ENUM_AND,
+ Conditions: []*policy.Condition{
+ {
+ SubjectExternalSelectorValue: selector,
+ Operator: policy.SubjectMappingOperatorEnum_SUBJECT_MAPPING_OPERATOR_ENUM_IN,
+ SubjectExternalValues: values,
+ },
+ },
+ },
+ },
+ },
+ },
+ Metadata: &common.MetadataMutable{
+ Labels: labels,
+ },
+ }, namespaceID, "")
+ s.Require().NoError(err)
+ return scs
+}
+
func (s *SubjectMappingsSuite) createSortTestSubjectMappings(prefixes []string) []string {
fixtureAttrValID := s.f.GetAttributeValueKey("example.net/attr/attr1/value/value2").ID
actionRead := s.f.GetStandardAction(policydb.ActionRead.String())
@@ -2937,8 +3083,8 @@ func (s *SubjectMappingsSuite) deleteSortTestSubjectMappings(ids []string) {
}
}
-// deleteSortTestSubjectConditionSets cleans up subject condition sets created by sort tests.
-func (s *SubjectMappingsSuite) deleteSortTestSubjectConditionSets(ids []string) {
+// deleteTestSCSs cleans up subject condition sets created by sort tests.
+func (s *SubjectMappingsSuite) deleteTestSCSs(ids []string) {
for _, id := range ids {
_, err := s.db.PolicyClient.DeleteSubjectConditionSet(s.ctx, id)
s.Require().NoError(err)
diff --git a/service/policy/db/queries/subject_mappings.sql b/service/policy/db/queries/subject_mappings.sql
index 3b75417519..e3db68777d 100644
--- a/service/policy/db/queries/subject_mappings.sql
+++ b/service/policy/db/queries/subject_mappings.sql
@@ -22,9 +22,19 @@ LEFT JOIN attribute_namespaces n ON n.id = scs.namespace_id
LEFT JOIN attribute_fqns ns_fqns ON ns_fqns.namespace_id = n.id AND ns_fqns.attribute_id IS NULL AND ns_fqns.value_id IS NULL
CROSS JOIN params p
WHERE
- (sqlc.narg('namespace_id')::uuid IS NULL AND sqlc.narg('namespace_fqn')::text IS NULL)
- OR scs.namespace_id = sqlc.narg('namespace_id')::uuid
- OR ns_fqns.fqn = sqlc.narg('namespace_fqn')::text
+ (
+ (sqlc.narg('namespace_id')::uuid IS NULL AND sqlc.narg('namespace_fqn')::text IS NULL)
+ OR scs.namespace_id = sqlc.narg('namespace_id')::uuid
+ OR ns_fqns.fqn = sqlc.narg('namespace_fqn')::text
+ )
+ AND CASE
+ WHEN sqlc.narg('search')::TEXT IS NULL THEN TRUE
+ ELSE EXISTS (
+ SELECT 1
+ FROM JSONB_EACH_TEXT(COALESCE(scs.metadata -> 'labels', '{}'::JSONB)) AS label(key, value)
+ WHERE label.value ILIKE sqlc.narg('search')::TEXT ESCAPE '\'
+ )
+ END
ORDER BY
CASE WHEN p.resolved_field = 'created_at' AND p.resolved_direction = 'ASC' THEN scs.created_at END ASC,
CASE WHEN p.resolved_field = 'created_at' AND p.resolved_direction = 'DESC' THEN scs.created_at END DESC,
diff --git a/service/policy/db/subject_mappings.go b/service/policy/db/subject_mappings.go
index 6153629e5a..c8ae25d99f 100644
--- a/service/policy/db/subject_mappings.go
+++ b/service/policy/db/subject_mappings.go
@@ -124,10 +124,12 @@ func (c PolicyDBClient) ListSubjectConditionSets(ctx context.Context, r *subject
}
sortField, sortDirection := GetSubjectConditionSetsSortParams(r.GetSort())
+ search := pgtypeSubstringSearchPattern(r.GetSearch().GetTerm())
list, err := c.queries.listSubjectConditionSets(ctx, listSubjectConditionSetsParams{
NamespaceID: pgtypeUUID(r.GetNamespaceId()),
NamespaceFqn: pgtypeText(r.GetNamespaceFqn()),
+ Search: search,
Limit: limit,
Offset: offset,
SortField: sortField,
diff --git a/service/policy/db/subject_mappings.sql.go b/service/policy/db/subject_mappings.sql.go
index d1a646c60e..b822bbcefb 100644
--- a/service/policy/db/subject_mappings.sql.go
+++ b/service/policy/db/subject_mappings.sql.go
@@ -356,8 +356,8 @@ const listSubjectConditionSets = `-- name: listSubjectConditionSets :many
WITH params AS (
SELECT
- COALESCE(NULLIF($5::text, ''), 'created_at') AS resolved_field,
- COALESCE(NULLIF($6::text, ''), 'DESC') AS resolved_direction
+ COALESCE(NULLIF($6::text, ''), 'created_at') AS resolved_field,
+ COALESCE(NULLIF($7::text, ''), 'DESC') AS resolved_direction
)
SELECT
scs.id,
@@ -373,22 +373,33 @@ LEFT JOIN attribute_namespaces n ON n.id = scs.namespace_id
LEFT JOIN attribute_fqns ns_fqns ON ns_fqns.namespace_id = n.id AND ns_fqns.attribute_id IS NULL AND ns_fqns.value_id IS NULL
CROSS JOIN params p
WHERE
- ($1::uuid IS NULL AND $2::text IS NULL)
- OR scs.namespace_id = $1::uuid
- OR ns_fqns.fqn = $2::text
+ (
+ ($1::uuid IS NULL AND $2::text IS NULL)
+ OR scs.namespace_id = $1::uuid
+ OR ns_fqns.fqn = $2::text
+ )
+ AND CASE
+ WHEN $3::TEXT IS NULL THEN TRUE
+ ELSE EXISTS (
+ SELECT 1
+ FROM JSONB_EACH_TEXT(COALESCE(scs.metadata -> 'labels', '{}'::JSONB)) AS label(key, value)
+ WHERE label.value ILIKE $3::TEXT ESCAPE '\'
+ )
+ END
ORDER BY
CASE WHEN p.resolved_field = 'created_at' AND p.resolved_direction = 'ASC' THEN scs.created_at END ASC,
CASE WHEN p.resolved_field = 'created_at' AND p.resolved_direction = 'DESC' THEN scs.created_at END DESC,
CASE WHEN p.resolved_field = 'updated_at' AND p.resolved_direction = 'ASC' THEN scs.updated_at END ASC,
CASE WHEN p.resolved_field = 'updated_at' AND p.resolved_direction = 'DESC' THEN scs.updated_at END DESC,
scs.id ASC
-LIMIT $4
-OFFSET $3
+LIMIT $5
+OFFSET $4
`
type listSubjectConditionSetsParams struct {
NamespaceID pgtype.UUID `json:"namespace_id"`
NamespaceFqn pgtype.Text `json:"namespace_fqn"`
+ Search pgtype.Text `json:"search"`
Offset int32 `json:"offset_"`
Limit int32 `json:"limit_"`
SortField string `json:"sort_field"`
@@ -409,8 +420,8 @@ type listSubjectConditionSetsRow struct {
//
// WITH params AS (
// SELECT
-// COALESCE(NULLIF($5::text, ''), 'created_at') AS resolved_field,
-// COALESCE(NULLIF($6::text, ''), 'DESC') AS resolved_direction
+// COALESCE(NULLIF($6::text, ''), 'created_at') AS resolved_field,
+// COALESCE(NULLIF($7::text, ''), 'DESC') AS resolved_direction
// )
// SELECT
// scs.id,
@@ -426,21 +437,32 @@ type listSubjectConditionSetsRow struct {
// LEFT JOIN attribute_fqns ns_fqns ON ns_fqns.namespace_id = n.id AND ns_fqns.attribute_id IS NULL AND ns_fqns.value_id IS NULL
// CROSS JOIN params p
// WHERE
-// ($1::uuid IS NULL AND $2::text IS NULL)
-// OR scs.namespace_id = $1::uuid
-// OR ns_fqns.fqn = $2::text
+// (
+// ($1::uuid IS NULL AND $2::text IS NULL)
+// OR scs.namespace_id = $1::uuid
+// OR ns_fqns.fqn = $2::text
+// )
+// AND CASE
+// WHEN $3::TEXT IS NULL THEN TRUE
+// ELSE EXISTS (
+// SELECT 1
+// FROM JSONB_EACH_TEXT(COALESCE(scs.metadata -> 'labels', '{}'::JSONB)) AS label(key, value)
+// WHERE label.value ILIKE $3::TEXT ESCAPE '\'
+// )
+// END
// ORDER BY
// CASE WHEN p.resolved_field = 'created_at' AND p.resolved_direction = 'ASC' THEN scs.created_at END ASC,
// CASE WHEN p.resolved_field = 'created_at' AND p.resolved_direction = 'DESC' THEN scs.created_at END DESC,
// CASE WHEN p.resolved_field = 'updated_at' AND p.resolved_direction = 'ASC' THEN scs.updated_at END ASC,
// CASE WHEN p.resolved_field = 'updated_at' AND p.resolved_direction = 'DESC' THEN scs.updated_at END DESC,
// scs.id ASC
-// LIMIT $4
-// OFFSET $3
+// LIMIT $5
+// OFFSET $4
func (q *Queries) listSubjectConditionSets(ctx context.Context, arg listSubjectConditionSetsParams) ([]listSubjectConditionSetsRow, error) {
rows, err := q.db.Query(ctx, listSubjectConditionSets,
arg.NamespaceID,
arg.NamespaceFqn,
+ arg.Search,
arg.Offset,
arg.Limit,
arg.SortField,
diff --git a/service/policy/db/utils.go b/service/policy/db/utils.go
index a156322ad7..2b56f384d8 100644
--- a/service/policy/db/utils.go
+++ b/service/policy/db/utils.go
@@ -430,7 +430,8 @@ func UUIDToString(uuid pgtype.UUID) string {
return ""
}
- return fmt.Sprintf("%08x-%04x-%04x-%04x-%012x",
+ return fmt.Sprintf(
+ "%08x-%04x-%04x-%04x-%012x",
uuid.Bytes[0:4],
uuid.Bytes[4:6],
uuid.Bytes[6:8],
From b658796478e65634bafd776ddc5c1ec87bcd9317 Mon Sep 17 00:00:00 2001
From: Chris Reed <87077975+c-r33d@users.noreply.github.com>
Date: Wed, 3 Jun 2026 10:18:05 -0500
Subject: [PATCH 09/10] feat(policy): add search support to ListSubjectMappings
(#3555)
## Summary
- Adds ListSubjectMappings RPC search support by wiring request search
into the policy DB list query.
- Applies escaped, case-insensitive matching in the subject mappings SQL
path and adds integration coverage for search behavior, wildcard
literals, empty search, and pagination after filtering.
## Summary by CodeRabbit
* **New Features**
* Subject mappings now support search filtering by attribute values and
metadata labels
* Search results can be combined with namespace filters for refined
queries
* Automatic whitespace trimming and special character handling ensure
accurate searches
* Result pagination works correctly with all filters applied
---------
Signed-off-by: Chris Reed
---
service/integration/subject_mappings_test.go | 301 ++++++++++++++++++
.../policy/db/queries/subject_mappings.sql | 33 +-
service/policy/db/subject_mappings.go | 2 +
service/policy/db/subject_mappings.sql.go | 92 ++++--
4 files changed, 389 insertions(+), 39 deletions(-)
diff --git a/service/integration/subject_mappings_test.go b/service/integration/subject_mappings_test.go
index bff23910d8..ae3c03bfdf 100644
--- a/service/integration/subject_mappings_test.go
+++ b/service/integration/subject_mappings_test.go
@@ -12,6 +12,7 @@ import (
"github.com/opentdf/platform/protocol/go/common"
"github.com/opentdf/platform/protocol/go/policy"
"github.com/opentdf/platform/protocol/go/policy/actions"
+ "github.com/opentdf/platform/protocol/go/policy/attributes"
"github.com/opentdf/platform/protocol/go/policy/namespaces"
"github.com/opentdf/platform/protocol/go/policy/subjectmapping"
"github.com/opentdf/platform/service/internal/fixtures"
@@ -1040,6 +1041,237 @@ func (s *SubjectMappingsSuite) Test_ListSubjectMappings_NoNamespaceFilter_Return
s.True(foundUnnamespaced)
}
+func (s *SubjectMappingsSuite) Test_ListSubjectMappings_SearchByAttributeValueFQNAndLabels_Succeeds() {
+ suffix := time.Now().UnixNano()
+ attrName := fmt.Sprintf("list-sm-search-attr-%d", suffix)
+ valueToken := fmt.Sprintf("fqn-only-%d", suffix)
+ ns, values := s.createSearchSubjectMappingNamespace(suffix, []string{
+ valueToken,
+ fmt.Sprintf("label-holder-%d", suffix),
+ fmt.Sprintf("label-key-holder-%d", suffix),
+ fmt.Sprintf("condition-holder-%d", suffix),
+ fmt.Sprintf("unmatched-%d", suffix),
+ })
+ s.T().Cleanup(func() {
+ s.deleteSearchSubjectMappingNamespace(ns)
+ })
+
+ actionToken := fmt.Sprintf("action-only-%d", suffix)
+ labelToken := fmt.Sprintf("label-only-%d", suffix)
+ labelKeyToken := fmt.Sprintf("label-key-only-%d", suffix)
+ selectorToken := fmt.Sprintf(".selector-only-%d", suffix)
+ externalToken := fmt.Sprintf("external-only-%d@example.com", suffix)
+
+ fqnSM := s.createSearchSubjectMapping(ns.GetId(), values[0].GetId(), ".fqn-holder", []string{"fqn-holder@example.com"}, "read", nil)
+ labelSM := s.createSearchSubjectMapping(ns.GetId(), values[1].GetId(), ".label-holder", []string{"label-holder@example.com"}, actionToken, map[string]string{
+ "search-label": labelToken,
+ "other-label": fmt.Sprintf("other-label-%d", suffix),
+ })
+ labelKeySM := s.createSearchSubjectMapping(ns.GetId(), values[2].GetId(), ".label-key-holder", []string{"label-key-holder@example.com"}, "read", map[string]string{labelKeyToken: "not-searchable-by-key"})
+ conditionSM := s.createSearchSubjectMapping(ns.GetId(), values[3].GetId(), selectorToken, []string{externalToken}, "read", nil)
+ unmatchedSM := s.createSearchSubjectMapping(ns.GetId(), values[4].GetId(), ".unmatched", []string{"unmatched@example.com"}, "read", map[string]string{"unused": fmt.Sprintf("unused-%d", suffix)})
+
+ tests := []struct {
+ name string
+ term string
+ ids []string
+ }{
+ {name: "attribute value fqn", term: strings.ToUpper(values[0].GetFqn()), ids: []string{fqnSM.GetId()}},
+ {name: "attribute name in fqn", term: attrName, ids: []string{fqnSM.GetId(), labelSM.GetId(), labelKeySM.GetId(), conditionSM.GetId(), unmatchedSM.GetId()}},
+ {name: "attribute value in fqn", term: valueToken, ids: []string{fqnSM.GetId()}},
+ {name: "metadata label value among multiple labels", term: strings.ToUpper(labelToken), ids: []string{labelSM.GetId()}},
+ }
+
+ for _, tc := range tests {
+ s.Run(tc.name, func() {
+ list, err := s.db.PolicyClient.ListSubjectMappings(s.ctx, &subjectmapping.ListSubjectMappingsRequest{
+ NamespaceId: ns.GetId(),
+ Search: &policy.Search{Term: tc.term},
+ })
+ s.Require().NoError(err)
+ gotIDs := make([]string, 0, len(list.GetSubjectMappings()))
+ for _, sm := range list.GetSubjectMappings() {
+ gotIDs = append(gotIDs, sm.GetId())
+ }
+ s.ElementsMatch(tc.ids, gotIDs)
+ s.Equal(int32(len(tc.ids)), list.GetPagination().GetTotal())
+ })
+ }
+
+ // ListSubjectMappings search is intentionally limited to attribute value FQNs
+ // and metadata label values; action names, label keys, and subject condition
+ // selectors/external values should not affect filtered results.
+ for _, term := range []string{
+ actionToken,
+ labelKeyToken,
+ selectorToken,
+ externalToken,
+ } {
+ list, err := s.db.PolicyClient.ListSubjectMappings(s.ctx, &subjectmapping.ListSubjectMappingsRequest{
+ NamespaceId: ns.GetId(),
+ Search: &policy.Search{Term: term},
+ })
+ s.Require().NoError(err)
+ s.Empty(list.GetSubjectMappings())
+ s.Equal(int32(0), list.GetPagination().GetTotal())
+ }
+}
+
+func (s *SubjectMappingsSuite) Test_ListSubjectMappings_SearchTrimsWhitespace_Succeeds() {
+ suffix := time.Now().UnixNano()
+ labelToken := fmt.Sprintf("trimmed-label-%d", suffix)
+
+ ns, values := s.createSearchSubjectMappingNamespace(suffix, []string{fmt.Sprintf("trimmed-%d", suffix)})
+ s.T().Cleanup(func() {
+ s.deleteSearchSubjectMappingNamespace(ns)
+ })
+
+ sm := s.createSearchSubjectMapping(ns.GetId(), values[0].GetId(), ".trimmed", []string{"trimmed@example.com"}, "read", map[string]string{"search-label": labelToken})
+
+ list, err := s.db.PolicyClient.ListSubjectMappings(s.ctx, &subjectmapping.ListSubjectMappingsRequest{
+ NamespaceId: ns.GetId(),
+ Search: &policy.Search{Term: " " + labelToken + " "},
+ })
+ s.Require().NoError(err)
+ s.Require().Len(list.GetSubjectMappings(), 1)
+ s.Equal(sm.GetId(), list.GetSubjectMappings()[0].GetId())
+ s.Equal(int32(1), list.GetPagination().GetTotal())
+}
+
+func (s *SubjectMappingsSuite) Test_ListSubjectMappings_SearchEscapesLikeWildcardLiterals_Succeeds() {
+ suffix := time.Now().UnixNano()
+
+ ns, values := s.createSearchSubjectMappingNamespace(suffix, []string{
+ fmt.Sprintf("wildcarda-%d", suffix),
+ fmt.Sprintf("wildcardb-%d", suffix),
+ })
+ s.T().Cleanup(func() {
+ s.deleteSearchSubjectMappingNamespace(ns)
+ })
+
+ s.createSearchSubjectMapping(ns.GetId(), values[0].GetId(), ".wildcard-a", []string{"wildcard-a@example.com"}, "read", map[string]string{"wildcard": fmt.Sprintf("wildcarda-%d", suffix)})
+ s.createSearchSubjectMapping(ns.GetId(), values[1].GetId(), ".wildcard-b", []string{"wildcard-b@example.com"}, "read", map[string]string{"wildcard": fmt.Sprintf("wildcardb-%d", suffix)})
+
+ for _, term := range []string{
+ fmt.Sprintf("wildcard_-%d", suffix),
+ fmt.Sprintf("wildcard%%-%d", suffix),
+ } {
+ list, err := s.db.PolicyClient.ListSubjectMappings(s.ctx, &subjectmapping.ListSubjectMappingsRequest{
+ NamespaceId: ns.GetId(),
+ Search: &policy.Search{Term: term},
+ })
+ s.Require().NoError(err)
+ s.Empty(list.GetSubjectMappings())
+ s.Equal(int32(0), list.GetPagination().GetTotal())
+ }
+}
+
+func (s *SubjectMappingsSuite) Test_ListSubjectMappings_SearchCombinesWithNamespace_Succeeds() {
+ suffix := time.Now().UnixNano()
+ searchToken := fmt.Sprintf("namespace-and-search-%d", suffix)
+
+ firstNS, firstValues := s.createSearchSubjectMappingNamespace(suffix, []string{fmt.Sprintf("first-%d", suffix)})
+ s.T().Cleanup(func() {
+ s.deleteSearchSubjectMappingNamespace(firstNS)
+ })
+ secondNS, secondValues := s.createSearchSubjectMappingNamespace(suffix+1, []string{fmt.Sprintf("second-%d", suffix)})
+ s.T().Cleanup(func() {
+ s.deleteSearchSubjectMappingNamespace(secondNS)
+ })
+
+ firstSM := s.createSearchSubjectMapping(firstNS.GetId(), firstValues[0].GetId(), ".first", []string{"first@example.com"}, "read", map[string]string{"search": searchToken})
+ secondSM := s.createSearchSubjectMapping(secondNS.GetId(), secondValues[0].GetId(), ".second", []string{"second@example.com"}, "read", map[string]string{"search": searchToken})
+
+ byFirstNS, err := s.db.PolicyClient.ListSubjectMappings(s.ctx, &subjectmapping.ListSubjectMappingsRequest{
+ NamespaceId: firstNS.GetId(),
+ Search: &policy.Search{Term: searchToken},
+ })
+ s.Require().NoError(err)
+ s.Require().Len(byFirstNS.GetSubjectMappings(), 1)
+ s.Equal(firstSM.GetId(), byFirstNS.GetSubjectMappings()[0].GetId())
+ s.Equal(int32(1), byFirstNS.GetPagination().GetTotal())
+
+ bySecondFQN, err := s.db.PolicyClient.ListSubjectMappings(s.ctx, &subjectmapping.ListSubjectMappingsRequest{
+ NamespaceFqn: secondNS.GetFqn(),
+ Search: &policy.Search{Term: searchToken},
+ })
+ s.Require().NoError(err)
+ s.Require().Len(bySecondFQN.GetSubjectMappings(), 1)
+ s.Equal(secondSM.GetId(), bySecondFQN.GetSubjectMappings()[0].GetId())
+ s.Equal(int32(1), bySecondFQN.GetPagination().GetTotal())
+}
+
+func (s *SubjectMappingsSuite) Test_ListSubjectMappings_SearchEmptyQuery_Succeeds() {
+ suffix := time.Now().UnixNano()
+ ns, values := s.createSearchSubjectMappingNamespace(suffix, []string{fmt.Sprintf("empty-search-%d", suffix)})
+ s.T().Cleanup(func() {
+ s.deleteSearchSubjectMappingNamespace(ns)
+ })
+ s.createSearchSubjectMapping(ns.GetId(), values[0].GetId(), ".empty-search", []string{"empty-search@example.com"}, "read", nil)
+
+ noSearch, err := s.db.PolicyClient.ListSubjectMappings(s.ctx, &subjectmapping.ListSubjectMappingsRequest{
+ NamespaceId: ns.GetId(),
+ })
+ s.Require().NoError(err)
+ emptySearch, err := s.db.PolicyClient.ListSubjectMappings(s.ctx, &subjectmapping.ListSubjectMappingsRequest{
+ NamespaceId: ns.GetId(),
+ Search: &policy.Search{Term: ""},
+ })
+ s.Require().NoError(err)
+ s.Equal(noSearch.GetPagination().GetTotal(), emptySearch.GetPagination().GetTotal())
+ s.Len(emptySearch.GetSubjectMappings(), len(noSearch.GetSubjectMappings()))
+}
+
+func (s *SubjectMappingsSuite) Test_ListSubjectMappings_SearchPaginationAppliesAfterFiltering_Succeeds() {
+ suffix := time.Now().UnixNano()
+ searchToken := fmt.Sprintf("search-page-%d", suffix)
+ ns, values := s.createSearchSubjectMappingNamespace(suffix, []string{
+ fmt.Sprintf("page-a-%d", suffix),
+ fmt.Sprintf("page-b-%d", suffix),
+ fmt.Sprintf("page-c-%d", suffix),
+ fmt.Sprintf("page-other-%d", suffix),
+ })
+ s.T().Cleanup(func() {
+ s.deleteSearchSubjectMappingNamespace(ns)
+ })
+
+ ids := make([]string, 3)
+ for i := range ids {
+ ids[i] = s.createSearchSubjectMapping(ns.GetId(), values[i].GetId(), fmt.Sprintf(".page-%d", i), []string{fmt.Sprintf("page-%d@example.com", i)}, "read", map[string]string{"search": searchToken}).GetId()
+ }
+ s.createSearchSubjectMapping(ns.GetId(), values[3].GetId(), ".page-other", []string{"page-other@example.com"}, "read", map[string]string{"other": fmt.Sprintf("other-%d", suffix)})
+
+ firstPage, err := s.db.PolicyClient.ListSubjectMappings(s.ctx, &subjectmapping.ListSubjectMappingsRequest{
+ NamespaceId: ns.GetId(),
+ Search: &policy.Search{Term: searchToken},
+ Pagination: &policy.PageRequest{Limit: 2},
+ Sort: []*subjectmapping.SubjectMappingsSort{
+ {Field: subjectmapping.SortSubjectMappingsType_SORT_SUBJECT_MAPPINGS_TYPE_CREATED_AT, Direction: policy.SortDirection_SORT_DIRECTION_ASC},
+ },
+ })
+ s.Require().NoError(err)
+ s.Require().Len(firstPage.GetSubjectMappings(), 2)
+ s.Equal(int32(3), firstPage.GetPagination().GetTotal())
+ s.Equal(int32(2), firstPage.GetPagination().GetNextOffset())
+ s.Equal(ids[0], firstPage.GetSubjectMappings()[0].GetId())
+ s.Equal(ids[1], firstPage.GetSubjectMappings()[1].GetId())
+
+ secondPage, err := s.db.PolicyClient.ListSubjectMappings(s.ctx, &subjectmapping.ListSubjectMappingsRequest{
+ NamespaceId: ns.GetId(),
+ Search: &policy.Search{Term: searchToken},
+ Pagination: &policy.PageRequest{Limit: 2, Offset: 2},
+ Sort: []*subjectmapping.SubjectMappingsSort{
+ {Field: subjectmapping.SortSubjectMappingsType_SORT_SUBJECT_MAPPINGS_TYPE_CREATED_AT, Direction: policy.SortDirection_SORT_DIRECTION_ASC},
+ },
+ })
+ s.Require().NoError(err)
+ s.Require().Len(secondPage.GetSubjectMappings(), 1)
+ s.Equal(int32(3), secondPage.GetPagination().GetTotal())
+ s.Equal(int32(2), secondPage.GetPagination().GetCurrentOffset())
+ s.Equal(int32(0), secondPage.GetPagination().GetNextOffset())
+ s.Equal(ids[2], secondPage.GetSubjectMappings()[0].GetId())
+}
+
func (s *SubjectMappingsSuite) TestDeleteSubjectMapping() {
// create a new subject mapping, delete it, and verify get fails with not found
fixtureAttrValID := s.f.GetAttributeValueKey("example.com/attr/attr2/value/value1").ID
@@ -3075,6 +3307,75 @@ func (s *SubjectMappingsSuite) createSortTestSubjectConditionSets(prefixes []str
return ids
}
+func (s *SubjectMappingsSuite) createSearchSubjectMappingNamespace(suffix int64, values []string) (*policy.Namespace, []*policy.Value) {
+ ns, err := s.db.PolicyClient.CreateNamespace(s.ctx, &namespaces.CreateNamespaceRequest{
+ Name: fmt.Sprintf("list-sm-search-%d.example", suffix),
+ })
+ s.Require().NoError(err)
+ s.Require().NotNil(ns)
+
+ attr, err := s.db.PolicyClient.CreateAttribute(s.ctx, &attributes.CreateAttributeRequest{
+ Name: fmt.Sprintf("list-sm-search-attr-%d", suffix),
+ NamespaceId: ns.GetId(),
+ Rule: policy.AttributeRuleTypeEnum_ATTRIBUTE_RULE_TYPE_ENUM_ALL_OF,
+ })
+ s.Require().NoError(err)
+ s.Require().NotNil(attr)
+
+ createdValues := make([]*policy.Value, len(values))
+ for i, value := range values {
+ created, err := s.db.PolicyClient.CreateAttributeValue(s.ctx, attr.GetId(), &attributes.CreateAttributeValueRequest{
+ Value: value,
+ })
+ s.Require().NoError(err)
+ createdValues[i] = created
+ }
+
+ return ns, createdValues
+}
+
+func (s *SubjectMappingsSuite) createSearchSubjectMapping(
+ namespaceID string,
+ attributeValueID string,
+ selector string,
+ externalValues []string,
+ actionName string,
+ labels map[string]string,
+) *policy.SubjectMapping {
+ created, err := s.db.PolicyClient.CreateSubjectMapping(s.ctx, &subjectmapping.CreateSubjectMappingRequest{
+ NamespaceId: namespaceID,
+ AttributeValueId: attributeValueID,
+ Actions: []*policy.Action{{Name: actionName}},
+ Metadata: &common.MetadataMutable{Labels: labels},
+ NewSubjectConditionSet: &subjectmapping.SubjectConditionSetCreate{
+ SubjectSets: []*policy.SubjectSet{
+ {
+ ConditionGroups: []*policy.ConditionGroup{
+ {
+ BooleanOperator: policy.ConditionBooleanTypeEnum_CONDITION_BOOLEAN_TYPE_ENUM_AND,
+ Conditions: []*policy.Condition{
+ {
+ SubjectExternalSelectorValue: selector,
+ Operator: policy.SubjectMappingOperatorEnum_SUBJECT_MAPPING_OPERATOR_ENUM_IN,
+ SubjectExternalValues: externalValues,
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ })
+ s.Require().NoError(err)
+ s.Require().NotNil(created)
+ return created
+}
+
+func (s *SubjectMappingsSuite) deleteSearchSubjectMappingNamespace(ns *policy.Namespace) {
+ _, err := s.db.PolicyClient.UnsafeDeleteNamespace(s.ctx, ns, ns.GetFqn())
+ s.Require().NoError(err)
+}
+
// deleteSortTestSubjectMappings cleans up subject mappings created by sort tests.
func (s *SubjectMappingsSuite) deleteSortTestSubjectMappings(ids []string) {
for _, id := range ids {
diff --git a/service/policy/db/queries/subject_mappings.sql b/service/policy/db/queries/subject_mappings.sql
index e3db68777d..c82c6b6211 100644
--- a/service/policy/db/queries/subject_mappings.sql
+++ b/service/policy/db/queries/subject_mappings.sql
@@ -116,15 +116,33 @@ subject_actions AS (
LEFT JOIN attribute_namespaces ans ON ans.id = a.namespace_id
LEFT JOIN attribute_fqns ans_fqns ON ans_fqns.namespace_id = ans.id AND ans_fqns.attribute_id IS NULL AND ans_fqns.value_id IS NULL
GROUP BY sma.subject_mapping_id
-), counted AS (
- SELECT COUNT(sm.id) AS total
+), filtered_subject_mappings AS (
+ SELECT DISTINCT sm.id
FROM subject_mappings sm
+ LEFT JOIN attribute_values av ON sm.attribute_value_id = av.id
+ LEFT JOIN attribute_fqns fqns ON av.id = fqns.value_id
LEFT JOIN attribute_namespaces sm_ns ON sm_ns.id = sm.namespace_id
LEFT JOIN attribute_fqns sm_ns_fqns ON sm_ns_fqns.namespace_id = sm_ns.id AND sm_ns_fqns.attribute_id IS NULL AND sm_ns_fqns.value_id IS NULL
WHERE
- (sqlc.narg('namespace_id')::uuid IS NULL AND sqlc.narg('namespace_fqn')::text IS NULL)
- OR sm.namespace_id = sqlc.narg('namespace_id')::uuid
- OR sm_ns_fqns.fqn = sqlc.narg('namespace_fqn')::text
+ (
+ (sqlc.narg('namespace_id')::uuid IS NULL AND sqlc.narg('namespace_fqn')::text IS NULL)
+ OR sm.namespace_id = sqlc.narg('namespace_id')::uuid
+ OR sm_ns_fqns.fqn = sqlc.narg('namespace_fqn')::text
+ )
+ AND CASE
+ WHEN sqlc.narg('search')::TEXT IS NULL THEN TRUE
+ ELSE (
+ fqns.fqn LIKE sqlc.narg('search')::TEXT ESCAPE '\'
+ OR EXISTS (
+ SELECT 1
+ FROM JSONB_EACH_TEXT(COALESCE(sm.metadata -> 'labels', '{}'::JSONB)) AS label(key, value)
+ WHERE label.value ILIKE sqlc.narg('search')::TEXT ESCAPE '\'
+ )
+ )
+ END
+), counted AS (
+ SELECT COUNT(id) AS total
+ FROM filtered_subject_mappings
)
SELECT
sm.id,
@@ -152,6 +170,7 @@ SELECT
END AS namespace,
counted.total
FROM subject_mappings sm
+JOIN filtered_subject_mappings fsm ON fsm.id = sm.id
CROSS JOIN counted
CROSS JOIN params p
LEFT JOIN subject_actions sa ON sm.id = sa.subject_mapping_id
@@ -162,10 +181,6 @@ LEFT JOIN attribute_namespaces scs_ns ON scs_ns.id = scs.namespace_id
LEFT JOIN attribute_fqns scs_ns_fqns ON scs_ns_fqns.namespace_id = scs_ns.id AND scs_ns_fqns.attribute_id IS NULL AND scs_ns_fqns.value_id IS NULL
LEFT JOIN attribute_namespaces sm_ns ON sm_ns.id = sm.namespace_id
LEFT JOIN attribute_fqns sm_ns_fqns ON sm_ns_fqns.namespace_id = sm_ns.id AND sm_ns_fqns.attribute_id IS NULL AND sm_ns_fqns.value_id IS NULL
-WHERE
- (sqlc.narg('namespace_id')::uuid IS NULL AND sqlc.narg('namespace_fqn')::text IS NULL)
- OR sm.namespace_id = sqlc.narg('namespace_id')::uuid
- OR sm_ns_fqns.fqn = sqlc.narg('namespace_fqn')::text
GROUP BY
sm.id,
sa.standard_actions,
diff --git a/service/policy/db/subject_mappings.go b/service/policy/db/subject_mappings.go
index c8ae25d99f..04fd2fb45c 100644
--- a/service/policy/db/subject_mappings.go
+++ b/service/policy/db/subject_mappings.go
@@ -361,10 +361,12 @@ func (c PolicyDBClient) ListSubjectMappings(ctx context.Context, r *subjectmappi
}
sortField, sortDirection := GetSubjectMappingsSortParams(r.GetSort())
+ search := pgtypeSubstringSearchPattern(r.GetSearch().GetTerm())
list, err := c.queries.listSubjectMappings(ctx, listSubjectMappingsParams{
NamespaceID: pgtypeUUID(r.GetNamespaceId()),
NamespaceFqn: pgtypeText(r.GetNamespaceFqn()),
+ Search: search,
Limit: limit,
Offset: offset,
SortField: sortField,
diff --git a/service/policy/db/subject_mappings.sql.go b/service/policy/db/subject_mappings.sql.go
index b822bbcefb..ea5411c3e6 100644
--- a/service/policy/db/subject_mappings.sql.go
+++ b/service/policy/db/subject_mappings.sql.go
@@ -496,8 +496,8 @@ const listSubjectMappings = `-- name: listSubjectMappings :many
WITH params AS (
SELECT
- COALESCE(NULLIF($5::text, ''), 'created_at') AS resolved_field,
- COALESCE(NULLIF($6::text, ''), 'DESC') AS resolved_direction
+ COALESCE(NULLIF($3::text, ''), 'created_at') AS resolved_field,
+ COALESCE(NULLIF($4::text, ''), 'DESC') AS resolved_direction
),
subject_actions AS (
SELECT
@@ -523,15 +523,33 @@ subject_actions AS (
LEFT JOIN attribute_namespaces ans ON ans.id = a.namespace_id
LEFT JOIN attribute_fqns ans_fqns ON ans_fqns.namespace_id = ans.id AND ans_fqns.attribute_id IS NULL AND ans_fqns.value_id IS NULL
GROUP BY sma.subject_mapping_id
-), counted AS (
- SELECT COUNT(sm.id) AS total
+), filtered_subject_mappings AS (
+ SELECT DISTINCT sm.id
FROM subject_mappings sm
+ LEFT JOIN attribute_values av ON sm.attribute_value_id = av.id
+ LEFT JOIN attribute_fqns fqns ON av.id = fqns.value_id
LEFT JOIN attribute_namespaces sm_ns ON sm_ns.id = sm.namespace_id
LEFT JOIN attribute_fqns sm_ns_fqns ON sm_ns_fqns.namespace_id = sm_ns.id AND sm_ns_fqns.attribute_id IS NULL AND sm_ns_fqns.value_id IS NULL
WHERE
- ($1::uuid IS NULL AND $2::text IS NULL)
- OR sm.namespace_id = $1::uuid
- OR sm_ns_fqns.fqn = $2::text
+ (
+ ($5::uuid IS NULL AND $6::text IS NULL)
+ OR sm.namespace_id = $5::uuid
+ OR sm_ns_fqns.fqn = $6::text
+ )
+ AND CASE
+ WHEN $7::TEXT IS NULL THEN TRUE
+ ELSE (
+ fqns.fqn LIKE $7::TEXT ESCAPE '\'
+ OR EXISTS (
+ SELECT 1
+ FROM JSONB_EACH_TEXT(COALESCE(sm.metadata -> 'labels', '{}'::JSONB)) AS label(key, value)
+ WHERE label.value ILIKE $7::TEXT ESCAPE '\'
+ )
+ )
+ END
+), counted AS (
+ SELECT COUNT(id) AS total
+ FROM filtered_subject_mappings
)
SELECT
sm.id,
@@ -559,6 +577,7 @@ SELECT
END AS namespace,
counted.total
FROM subject_mappings sm
+JOIN filtered_subject_mappings fsm ON fsm.id = sm.id
CROSS JOIN counted
CROSS JOIN params p
LEFT JOIN subject_actions sa ON sm.id = sa.subject_mapping_id
@@ -569,10 +588,6 @@ LEFT JOIN attribute_namespaces scs_ns ON scs_ns.id = scs.namespace_id
LEFT JOIN attribute_fqns scs_ns_fqns ON scs_ns_fqns.namespace_id = scs_ns.id AND scs_ns_fqns.attribute_id IS NULL AND scs_ns_fqns.value_id IS NULL
LEFT JOIN attribute_namespaces sm_ns ON sm_ns.id = sm.namespace_id
LEFT JOIN attribute_fqns sm_ns_fqns ON sm_ns_fqns.namespace_id = sm_ns.id AND sm_ns_fqns.attribute_id IS NULL AND sm_ns_fqns.value_id IS NULL
-WHERE
- ($1::uuid IS NULL AND $2::text IS NULL)
- OR sm.namespace_id = $1::uuid
- OR sm_ns_fqns.fqn = $2::text
GROUP BY
sm.id,
sa.standard_actions,
@@ -591,17 +606,18 @@ ORDER BY
CASE WHEN p.resolved_field = 'updated_at' AND p.resolved_direction = 'ASC' THEN sm.updated_at END ASC,
CASE WHEN p.resolved_field = 'updated_at' AND p.resolved_direction = 'DESC' THEN sm.updated_at END DESC,
sm.id ASC
-LIMIT $4
-OFFSET $3
+LIMIT $2
+OFFSET $1
`
type listSubjectMappingsParams struct {
- NamespaceID pgtype.UUID `json:"namespace_id"`
- NamespaceFqn pgtype.Text `json:"namespace_fqn"`
Offset int32 `json:"offset_"`
Limit int32 `json:"limit_"`
SortField string `json:"sort_field"`
SortDirection string `json:"sort_direction"`
+ NamespaceID pgtype.UUID `json:"namespace_id"`
+ NamespaceFqn pgtype.Text `json:"namespace_fqn"`
+ Search pgtype.Text `json:"search"`
}
type listSubjectMappingsRow struct {
@@ -621,8 +637,8 @@ type listSubjectMappingsRow struct {
//
// WITH params AS (
// SELECT
-// COALESCE(NULLIF($5::text, ''), 'created_at') AS resolved_field,
-// COALESCE(NULLIF($6::text, ''), 'DESC') AS resolved_direction
+// COALESCE(NULLIF($3::text, ''), 'created_at') AS resolved_field,
+// COALESCE(NULLIF($4::text, ''), 'DESC') AS resolved_direction
// ),
// subject_actions AS (
// SELECT
@@ -648,15 +664,33 @@ type listSubjectMappingsRow struct {
// LEFT JOIN attribute_namespaces ans ON ans.id = a.namespace_id
// LEFT JOIN attribute_fqns ans_fqns ON ans_fqns.namespace_id = ans.id AND ans_fqns.attribute_id IS NULL AND ans_fqns.value_id IS NULL
// GROUP BY sma.subject_mapping_id
-// ), counted AS (
-// SELECT COUNT(sm.id) AS total
+// ), filtered_subject_mappings AS (
+// SELECT DISTINCT sm.id
// FROM subject_mappings sm
+// LEFT JOIN attribute_values av ON sm.attribute_value_id = av.id
+// LEFT JOIN attribute_fqns fqns ON av.id = fqns.value_id
// LEFT JOIN attribute_namespaces sm_ns ON sm_ns.id = sm.namespace_id
// LEFT JOIN attribute_fqns sm_ns_fqns ON sm_ns_fqns.namespace_id = sm_ns.id AND sm_ns_fqns.attribute_id IS NULL AND sm_ns_fqns.value_id IS NULL
// WHERE
-// ($1::uuid IS NULL AND $2::text IS NULL)
-// OR sm.namespace_id = $1::uuid
-// OR sm_ns_fqns.fqn = $2::text
+// (
+// ($5::uuid IS NULL AND $6::text IS NULL)
+// OR sm.namespace_id = $5::uuid
+// OR sm_ns_fqns.fqn = $6::text
+// )
+// AND CASE
+// WHEN $7::TEXT IS NULL THEN TRUE
+// ELSE (
+// fqns.fqn LIKE $7::TEXT ESCAPE '\'
+// OR EXISTS (
+// SELECT 1
+// FROM JSONB_EACH_TEXT(COALESCE(sm.metadata -> 'labels', '{}'::JSONB)) AS label(key, value)
+// WHERE label.value ILIKE $7::TEXT ESCAPE '\'
+// )
+// )
+// END
+// ), counted AS (
+// SELECT COUNT(id) AS total
+// FROM filtered_subject_mappings
// )
// SELECT
// sm.id,
@@ -684,6 +718,7 @@ type listSubjectMappingsRow struct {
// END AS namespace,
// counted.total
// FROM subject_mappings sm
+// JOIN filtered_subject_mappings fsm ON fsm.id = sm.id
// CROSS JOIN counted
// CROSS JOIN params p
// LEFT JOIN subject_actions sa ON sm.id = sa.subject_mapping_id
@@ -694,10 +729,6 @@ type listSubjectMappingsRow struct {
// LEFT JOIN attribute_fqns scs_ns_fqns ON scs_ns_fqns.namespace_id = scs_ns.id AND scs_ns_fqns.attribute_id IS NULL AND scs_ns_fqns.value_id IS NULL
// LEFT JOIN attribute_namespaces sm_ns ON sm_ns.id = sm.namespace_id
// LEFT JOIN attribute_fqns sm_ns_fqns ON sm_ns_fqns.namespace_id = sm_ns.id AND sm_ns_fqns.attribute_id IS NULL AND sm_ns_fqns.value_id IS NULL
-// WHERE
-// ($1::uuid IS NULL AND $2::text IS NULL)
-// OR sm.namespace_id = $1::uuid
-// OR sm_ns_fqns.fqn = $2::text
// GROUP BY
// sm.id,
// sa.standard_actions,
@@ -716,16 +747,17 @@ type listSubjectMappingsRow struct {
// CASE WHEN p.resolved_field = 'updated_at' AND p.resolved_direction = 'ASC' THEN sm.updated_at END ASC,
// CASE WHEN p.resolved_field = 'updated_at' AND p.resolved_direction = 'DESC' THEN sm.updated_at END DESC,
// sm.id ASC
-// LIMIT $4
-// OFFSET $3
+// LIMIT $2
+// OFFSET $1
func (q *Queries) listSubjectMappings(ctx context.Context, arg listSubjectMappingsParams) ([]listSubjectMappingsRow, error) {
rows, err := q.db.Query(ctx, listSubjectMappings,
- arg.NamespaceID,
- arg.NamespaceFqn,
arg.Offset,
arg.Limit,
arg.SortField,
arg.SortDirection,
+ arg.NamespaceID,
+ arg.NamespaceFqn,
+ arg.Search,
)
if err != nil {
return nil, err
From 8b33e1ce8060d5af7ab301a11ffe06c2d7d2d516 Mon Sep 17 00:00:00 2001
From: Chris Reed <87077975+c-r33d@users.noreply.github.com>
Date: Wed, 3 Jun 2026 13:41:22 -0500
Subject: [PATCH 10/10] feat(policy): add search support to ListKeys (#3558)
## Summary
- Adds ListKeys RPC search support by wiring request search into the
policy DB list query.
- Applies escaped, case-insensitive matching in the KAS key SQL path and
adds integration coverage for search behavior, wildcard literals, empty
search, whitespace handling, and pagination after filtering.
## Summary by CodeRabbit
## Release Notes
* **New Features**
* Search capability for KAS registry keys by key ID.
* Search input automatically trims leading and trailing whitespace.
* Wildcard characters in search queries are properly escaped.
* Search results work seamlessly with existing filters and pagination.
* **Tests**
* Added comprehensive test coverage for search functionality.
---------
Signed-off-by: Chris Reed
---
service/integration/kas_registry_key_test.go | 1018 ++++++++++-------
.../policy/db/key_access_server_registry.go | 2 +
.../db/key_access_server_registry.sql.go | 38 +-
.../db/queries/key_access_server_registry.sql | 4 +
4 files changed, 652 insertions(+), 410 deletions(-)
diff --git a/service/integration/kas_registry_key_test.go b/service/integration/kas_registry_key_test.go
index 819ce9ff59..c5bc0a620d 100644
--- a/service/integration/kas_registry_key_test.go
+++ b/service/integration/kas_registry_key_test.go
@@ -6,6 +6,7 @@ import (
"fmt"
"log/slog"
"slices"
+ "strings"
"testing"
"time"
@@ -208,14 +209,14 @@ func (s *KasRegistryKeySuite) Test_CreateKasKey_Legacy_MultipleOnSameKas_Fail()
s.NotNil(resp)
s.True(resp.GetKasKey().GetKey().GetLegacy())
- defer func() {
+ s.T().Cleanup(func() {
_, err := s.db.PolicyClient.UnsafeDeleteKey(s.ctx, resp.GetKasKey(), &unsafe.UnsafeDeleteKasKeyRequest{
Id: resp.GetKasKey().GetKey().GetId(),
KasUri: resp.GetKasKey().GetKasUri(),
Kid: resp.GetKasKey().GetKey().GetKeyId(),
})
s.Require().NoError(err)
- }()
+ })
req2 := kasregistry.CreateKeyRequest{
KasId: s.kasKeys[0].KeyAccessServerID,
@@ -253,14 +254,14 @@ func (s *KasRegistryKeySuite) Test_CreateKasKey_Legacy_MultipleOnDifferentKas_Su
s.NotNil(resp)
s.True(resp.GetKasKey().GetKey().GetLegacy())
- defer func() {
+ s.T().Cleanup(func() {
_, err := s.db.PolicyClient.UnsafeDeleteKey(s.ctx, resp.GetKasKey(), &unsafe.UnsafeDeleteKasKeyRequest{
Id: resp.GetKasKey().GetKey().GetId(),
KasUri: resp.GetKasKey().GetKasUri(),
Kid: resp.GetKasKey().GetKey().GetKeyId(),
})
s.Require().NoError(err)
- }()
+ })
// Create a new KAS server
kasReq := kasregistry.CreateKeyAccessServerRequest{
@@ -274,9 +275,9 @@ func (s *KasRegistryKeySuite) Test_CreateKasKey_Legacy_MultipleOnDifferentKas_Su
kasIDs := []string{kas.GetId()}
keyIDs := []string{}
- defer func() {
+ s.T().Cleanup(func() {
s.cleanupKeys(keyIDs, kasIDs)
- }()
+ })
req2 := kasregistry.CreateKeyRequest{
KasId: kas.GetId(),
@@ -488,9 +489,9 @@ func (s *KasRegistryKeySuite) Test_ListKeys_OrdersByCreatedAt_Succeeds() {
keyIDs := make([]string, 0, 3)
kasIDs := []string{kas.GetId()}
- defer func() {
+ s.T().Cleanup(func() {
s.cleanupKeys(keyIDs, kasIDs)
- }()
+ })
createKey := func() string {
keyReq := kasregistry.CreateKeyRequest{
@@ -656,9 +657,9 @@ func (s *KasRegistryKeySuite) Test_ListKeys_Legacy_Success() {
kasIDs := make([]string, 0)
keyIDs := make([]string, 0)
- defer func() {
+ s.T().Cleanup(func() {
s.cleanupKeys(keyIDs, kasIDs)
- }()
+ })
kas, err := s.db.PolicyClient.CreateKeyAccessServer(s.ctx, &kasregistry.CreateKeyAccessServerRequest{
Uri: "https://legacy-kas.opentdf.io",
@@ -759,15 +760,177 @@ func (s *KasRegistryKeySuite) Test_ListKeys_Legacy_Success() {
s.False(foundLegacy)
}
+func (s *KasRegistryKeySuite) Test_ListKeys_SearchByKeyID_Succeeds() {
+ searchToken := fmt.Sprintf("alpha-%x", time.Now().UnixNano())
+ matchedKID := "SEARCH-KEY-" + searchToken
+ otherKID := fmt.Sprintf("other-beta-%x", time.Now().UnixNano())
+ kasID, keyIDsByKID := s.createListKeysSearchTestKeys([]string{matchedKID, otherKID})
+ s.T().Cleanup(func() {
+ s.cleanupKeys(listKeysSearchIDs(keyIDsByKID), []string{kasID})
+ })
+
+ list, err := s.db.PolicyClient.ListKeys(s.ctx, &kasregistry.ListKeysRequest{
+ KasFilter: &kasregistry.ListKeysRequest_KasId{KasId: kasID},
+ Search: &policy.Search{Term: strings.ToUpper(searchToken)},
+ })
+ s.Require().NoError(err)
+ s.Require().Len(list.GetKasKeys(), 1)
+ s.Equal(keyIDsByKID[matchedKID], list.GetKasKeys()[0].GetKey().GetId())
+ s.Equal(int32(1), list.GetPagination().GetTotal())
+}
+
+func (s *KasRegistryKeySuite) Test_ListKeys_SearchCombinesWithFilters_Succeeds() {
+ searchToken := fmt.Sprintf("combo-%x", time.Now().UnixNano())
+ matchedKID := searchToken + "-matched"
+ otherKID := searchToken + "-other-kas"
+ kasID, keyIDsByKID := s.createListKeysSearchTestKeys([]string{matchedKID})
+ otherKasID, otherKeyIDsByKID := s.createListKeysSearchTestKeys([]string{otherKID})
+ s.T().Cleanup(func() {
+ s.cleanupKeys(listKeysSearchIDs(keyIDsByKID), []string{kasID})
+ })
+ s.T().Cleanup(func() {
+ s.cleanupKeys(listKeysSearchIDs(otherKeyIDsByKID), []string{otherKasID})
+ })
+
+ list, err := s.db.PolicyClient.ListKeys(s.ctx, &kasregistry.ListKeysRequest{
+ KasFilter: &kasregistry.ListKeysRequest_KasId{KasId: kasID},
+ Search: &policy.Search{Term: searchToken},
+ })
+ s.Require().NoError(err)
+ s.Require().Len(list.GetKasKeys(), 1)
+ s.Equal(keyIDsByKID[matchedKID], list.GetKasKeys()[0].GetKey().GetId())
+ s.Equal(int32(1), list.GetPagination().GetTotal())
+}
+
+func (s *KasRegistryKeySuite) Test_ListKeys_SearchEmptyQuery_Succeeds() {
+ kasID, keyIDsByKID := s.createListKeysSearchTestKeys([]string{
+ fmt.Sprintf("search-empty-%d", time.Now().UnixNano()),
+ })
+ s.T().Cleanup(func() {
+ s.cleanupKeys(listKeysSearchIDs(keyIDsByKID), []string{kasID})
+ })
+
+ noSearch, err := s.db.PolicyClient.ListKeys(s.ctx, &kasregistry.ListKeysRequest{
+ KasFilter: &kasregistry.ListKeysRequest_KasId{KasId: kasID},
+ })
+ s.Require().NoError(err)
+ emptySearch, err := s.db.PolicyClient.ListKeys(s.ctx, &kasregistry.ListKeysRequest{
+ KasFilter: &kasregistry.ListKeysRequest_KasId{KasId: kasID},
+ Search: &policy.Search{Term: ""},
+ })
+ s.Require().NoError(err)
+ s.Require().Len(noSearch.GetKasKeys(), 1)
+ s.Equal(noSearch.GetPagination().GetTotal(), emptySearch.GetPagination().GetTotal())
+ s.Len(emptySearch.GetKasKeys(), len(noSearch.GetKasKeys()))
+}
+
+func (s *KasRegistryKeySuite) Test_ListKeys_SearchTrimsWhitespace_Succeeds() {
+ keyID := fmt.Sprintf("search-space-%d", time.Now().UnixNano())
+ kasID, keyIDsByKID := s.createListKeysSearchTestKeys([]string{keyID})
+ s.T().Cleanup(func() {
+ s.cleanupKeys(listKeysSearchIDs(keyIDsByKID), []string{kasID})
+ })
+
+ for _, query := range []string{
+ " " + keyID,
+ keyID + " ",
+ " " + keyID + " ",
+ } {
+ list, err := s.db.PolicyClient.ListKeys(s.ctx, &kasregistry.ListKeysRequest{
+ KasFilter: &kasregistry.ListKeysRequest_KasId{KasId: kasID},
+ Search: &policy.Search{Term: query},
+ })
+ s.Require().NoError(err)
+ s.Require().Len(list.GetKasKeys(), 1)
+ s.Equal(keyIDsByKID[keyID], list.GetKasKeys()[0].GetKey().GetId())
+ s.Equal(int32(1), list.GetPagination().GetTotal())
+ }
+
+ list, err := s.db.PolicyClient.ListKeys(s.ctx, &kasregistry.ListKeysRequest{
+ KasFilter: &kasregistry.ListKeysRequest_KasId{KasId: kasID},
+ Search: &policy.Search{Term: " "},
+ })
+ s.Require().NoError(err)
+ s.Require().Len(list.GetKasKeys(), 1)
+ s.Equal(keyIDsByKID[keyID], list.GetKasKeys()[0].GetKey().GetId())
+ s.Equal(int32(1), list.GetPagination().GetTotal())
+}
+
+func (s *KasRegistryKeySuite) Test_ListKeys_SearchEscapesLikeWildcardLiterals_Succeeds() {
+ searchToken := fmt.Sprintf("like-%x", time.Now().UnixNano())
+ kasID, keyIDsByKID := s.createListKeysSearchTestKeys([]string{
+ "wildcarda-" + searchToken,
+ "wildcardb-" + searchToken,
+ })
+ s.T().Cleanup(func() {
+ s.cleanupKeys(listKeysSearchIDs(keyIDsByKID), []string{kasID})
+ })
+
+ for _, query := range []string{
+ "wildcard_-" + searchToken,
+ "wildcard%-" + searchToken,
+ } {
+ list, err := s.db.PolicyClient.ListKeys(s.ctx, &kasregistry.ListKeysRequest{
+ KasFilter: &kasregistry.ListKeysRequest_KasId{KasId: kasID},
+ Search: &policy.Search{Term: query},
+ })
+ s.Require().NoError(err)
+ s.Empty(list.GetKasKeys())
+ s.Equal(int32(0), list.GetPagination().GetTotal())
+ }
+}
+
+func (s *KasRegistryKeySuite) Test_ListKeys_SearchPaginationAppliesAfterFiltering_Succeeds() {
+ searchToken := fmt.Sprintf("page-%x", time.Now().UnixNano())
+ firstKID := "a-" + searchToken
+ secondKID := "b-" + searchToken
+ thirdKID := "c-" + searchToken
+ otherKID := fmt.Sprintf("other-%x", time.Now().UnixNano())
+ kasID, keyIDsByKID := s.createListKeysSearchTestKeys([]string{firstKID, secondKID, thirdKID, otherKID})
+ s.T().Cleanup(func() {
+ s.cleanupKeys(listKeysSearchIDs(keyIDsByKID), []string{kasID})
+ })
+
+ firstPage, err := s.db.PolicyClient.ListKeys(s.ctx, &kasregistry.ListKeysRequest{
+ KasFilter: &kasregistry.ListKeysRequest_KasId{KasId: kasID},
+ Search: &policy.Search{Term: searchToken},
+ Pagination: &policy.PageRequest{Limit: 2},
+ Sort: []*kasregistry.KasKeysSort{
+ {Field: kasregistry.SortKasKeysType_SORT_KAS_KEYS_TYPE_KEY_ID, Direction: policy.SortDirection_SORT_DIRECTION_ASC},
+ },
+ })
+ s.Require().NoError(err)
+ s.Require().Len(firstPage.GetKasKeys(), 2)
+ s.Equal(int32(3), firstPage.GetPagination().GetTotal())
+ s.Equal(int32(2), firstPage.GetPagination().GetNextOffset())
+ s.Equal(keyIDsByKID[firstKID], firstPage.GetKasKeys()[0].GetKey().GetId())
+ s.Equal(keyIDsByKID[secondKID], firstPage.GetKasKeys()[1].GetKey().GetId())
+
+ secondPage, err := s.db.PolicyClient.ListKeys(s.ctx, &kasregistry.ListKeysRequest{
+ KasFilter: &kasregistry.ListKeysRequest_KasId{KasId: kasID},
+ Search: &policy.Search{Term: searchToken},
+ Pagination: &policy.PageRequest{Limit: 2, Offset: 2},
+ Sort: []*kasregistry.KasKeysSort{
+ {Field: kasregistry.SortKasKeysType_SORT_KAS_KEYS_TYPE_KEY_ID, Direction: policy.SortDirection_SORT_DIRECTION_ASC},
+ },
+ })
+ s.Require().NoError(err)
+ s.Require().Len(secondPage.GetKasKeys(), 1)
+ s.Equal(int32(3), secondPage.GetPagination().GetTotal())
+ s.Equal(int32(2), secondPage.GetPagination().GetCurrentOffset())
+ s.Equal(int32(0), secondPage.GetPagination().GetNextOffset())
+ s.Equal(keyIDsByKID[thirdKID], secondPage.GetKasKeys()[0].GetKey().GetId())
+}
+
func (s *KasRegistryKeySuite) Test_RotateKey_Multiple_Attributes_Values_Namespaces_Success() {
namespaceIDs := make([]string, 0)
keyIDs := make([]string, 0)
kasIDs := make([]string, 0)
- defer func() {
+ s.T().Cleanup(func() {
s.cleanupNamespacesAndAttrsByIDs(namespaceIDs)
s.cleanupKeys(keyIDs, kasIDs)
- }()
+ })
// Create a new KAS server
kasReq := kasregistry.CreateKeyAccessServerRequest{
@@ -885,10 +1048,10 @@ func (s *KasRegistryKeySuite) Test_RotateKey_Two_Attribute_Two_Namespace_0_Attri
keyIDs := make([]string, 0)
kasIDs := make([]string, 0)
- defer func() {
+ s.T().Cleanup(func() {
s.cleanupNamespacesAndAttrsByIDs(namespaceIDs)
s.cleanupKeys(keyIDs, kasIDs)
- }()
+ })
// Create a new KAS server
kasReq := kasregistry.CreateKeyAccessServerRequest{
@@ -1010,9 +1173,9 @@ func (s *KasRegistryKeySuite) Test_RotateKey_Two_Attribute_Two_Namespace_0_Attri
func (s *KasRegistryKeySuite) Test_RotateKey_NoAttributeKeyMapping_Success() {
keyIDs := make([]string, 0)
kasIDs := make([]string, 0)
- defer func() {
+ s.T().Cleanup(func() {
s.cleanupKeys(keyIDs, kasIDs)
- }()
+ })
kasReq := kasregistry.CreateKeyAccessServerRequest{
Name: "test_rotate_key_kas",
@@ -1075,9 +1238,9 @@ func (s *KasRegistryKeySuite) Test_RotateKey_NoAttributeKeyMapping_Success() {
func (s *KasRegistryKeySuite) Test_RotateKey_NoBaseKeyRotated_Success() {
keyIDs := make([]string, 0)
kasIDs := make([]string, 0)
- defer func() {
+ s.T().Cleanup(func() {
s.cleanupKeys(keyIDs, kasIDs)
- }()
+ })
kasReq := kasregistry.CreateKeyAccessServerRequest{
Name: "test_rotate_key_kas",
@@ -1127,9 +1290,9 @@ func (s *KasRegistryKeySuite) Test_RotateKey_NoBaseKeyRotated_Success() {
func (s *KasRegistryKeySuite) Test_RotateKey_BaseKeyRotated_Success() {
keyIDs := make([]string, 0)
kasIDs := make([]string, 0)
- defer func() {
+ s.T().Cleanup(func() {
s.cleanupKeys(keyIDs, kasIDs)
- }()
+ })
kasReq := kasregistry.CreateKeyAccessServerRequest{
Name: "test_rotate_key_kas",
@@ -1175,9 +1338,9 @@ func (s *KasRegistryKeySuite) Test_RotateKey_BaseKeyRotated_Success() {
func (s *KasRegistryKeySuite) Test_SetBaseKey_KasKeyNotFound_Fails() {
keyIDs := make([]string, 0)
kasIDs := make([]string, 0)
- defer func() {
+ s.T().Cleanup(func() {
s.cleanupKeys(keyIDs, kasIDs)
- }()
+ })
// Create a new KAS server
kasReq := kasregistry.CreateKeyAccessServerRequest{
@@ -1226,9 +1389,9 @@ func (s *KasRegistryKeySuite) Test_SetBaseKey_KasKeyNotFound_Fails() {
func (s *KasRegistryKeySuite) Test_SetBaseKey_Insert_Success() {
keyIDs := make([]string, 0)
kasIDs := make([]string, 0)
- defer func() {
+ s.T().Cleanup(func() {
s.cleanupKeys(keyIDs, kasIDs)
- }()
+ })
// Create a new KAS server
kasReq := kasregistry.CreateKeyAccessServerRequest{
@@ -1283,9 +1446,9 @@ func (s *KasRegistryKeySuite) Test_SetBaseKey_Insert_Success() {
func (s *KasRegistryKeySuite) Test_SetBaseKey_CannotSetPublicKeyOnlyKey_Fails() {
keyIDs := make([]string, 0)
kasIDs := make([]string, 0)
- defer func() {
+ s.T().Cleanup(func() {
s.cleanupKeys(keyIDs, kasIDs)
- }()
+ })
// Create a new KAS server
kasReq := kasregistry.CreateKeyAccessServerRequest{
@@ -1330,9 +1493,9 @@ func (s *KasRegistryKeySuite) Test_SetBaseKey_CannotSetPublicKeyOnlyKey_Fails()
func (s *KasRegistryKeySuite) Test_SetBaseKey_CannotSetNonActiveKey_Fails() {
keyIDs := make([]string, 0)
kasIDs := make([]string, 0)
- defer func() {
+ s.T().Cleanup(func() {
s.cleanupKeys(keyIDs, kasIDs)
- }()
+ })
// Create a new KAS server
kasReq := kasregistry.CreateKeyAccessServerRequest{
@@ -1369,7 +1532,8 @@ func (s *KasRegistryKeySuite) Test_SetBaseKey_CannotSetNonActiveKey_Fails() {
s.Require().Nil(baseKey)
// Update the key status to rotated
- rotatedKeysResp, err := s.db.PolicyClient.RotateKey(s.ctx,
+ rotatedKeysResp, err := s.db.PolicyClient.RotateKey(
+ s.ctx,
key.GetKasKey(),
&kasregistry.RotateKeyRequest_NewKey{
KeyId: "rotated_key_id",
@@ -1401,9 +1565,9 @@ func (s *KasRegistryKeySuite) Test_SetBaseKey_CannotSetNonActiveKey_Fails() {
func (s *KasRegistryKeySuite) Test_RotateKey_MetadataUnchanged_Success() {
keyIDs := make([]string, 0)
kasIDs := make([]string, 0)
- defer func() {
+ s.T().Cleanup(func() {
s.cleanupKeys(keyIDs, kasIDs)
- }()
+ })
kasReq := kasregistry.CreateKeyAccessServerRequest{
Name: "test_rotate_key_kas",
@@ -1477,14 +1641,14 @@ func (s *KasRegistryKeySuite) Test_ListKeyMappings_OrdersByCreatedAt_Succeeds()
kasKeys := make([]*policy.KasKey, 0, 2)
kasIDs := make([]string, 0, 2)
namespaces := make([]*policy.Namespace, 0, 1)
- defer func() {
+ s.T().Cleanup(func() {
keyIDs := make([]string, 0, len(kasKeys))
for _, key := range kasKeys {
keyIDs = append(keyIDs, key.GetKey().GetId())
}
s.cleanupKeys(keyIDs, kasIDs)
s.cleanupNamespacesAndAttrs(namespaces)
- }()
+ })
kasKey1 := s.createKeyAndKas()
kasKeys = append(kasKeys, kasKey1)
@@ -1532,14 +1696,14 @@ func (s *KasRegistryKeySuite) Test_ListKeyMappings_ByID_OneAttrValue_Success() {
namespaces := make([]*policy.Namespace, 0)
attributeDefs := make([]*policy.Attribute, 0)
attrValues := make([]*policy.Value, 0)
- defer func() {
+ s.T().Cleanup(func() {
keyIDs := make([]string, 0)
for _, key := range kasKeys {
keyIDs = append(keyIDs, key.GetKey().GetId())
}
s.cleanupKeys(keyIDs, kasIDs)
s.cleanupNamespacesAndAttrs(namespaces)
- }()
+ })
kasKey := s.createKeyAndKas()
kasKeys = append(kasKeys, kasKey)
kasIDs = append(kasIDs, kasKey.GetKasId())
@@ -1598,14 +1762,14 @@ func (s *KasRegistryKeySuite) Test_ListKeyMappings_By_Key_Success() {
namespaces := make([]*policy.Namespace, 0)
attributeDefs := make([]*policy.Attribute, 0)
attrValues := make([]*policy.Value, 0)
- defer func() {
+ s.T().Cleanup(func() {
keyIDs := make([]string, 0)
for _, key := range kasKeys {
keyIDs = append(keyIDs, key.GetKey().GetId())
}
s.cleanupKeys(keyIDs, kasIDs)
s.cleanupNamespacesAndAttrs(namespaces)
- }()
+ })
kasKey := s.createKeyAndKas()
kasKeys = append(kasKeys, kasKey)
kasIDs = append(kasIDs, kasKey.GetKasId())
@@ -1697,14 +1861,14 @@ func (s *KasRegistryKeySuite) Test_ListKeyMappings_SameKeyId_DifferentKas_Succes
namespaces := make([]*policy.Namespace, 0)
attributeDefs := make([]*policy.Attribute, 0)
attrValues := make([]*policy.Value, 0)
- defer func() {
+ s.T().Cleanup(func() {
keyIDs := make([]string, 0)
for _, key := range kasKeys {
keyIDs = append(keyIDs, key.GetKey().GetId())
}
s.cleanupKeys(keyIDs, kasIDs)
s.cleanupNamespacesAndAttrs(namespaces)
- }()
+ })
kasKey := s.createKeyAndKas()
s.NotNil(kasKey)
@@ -1768,13 +1932,13 @@ func (s *KasRegistryKeySuite) Test_ListKeyMappings_SameKeyId_DifferentKas_Succes
func (s *KasRegistryKeySuite) Test_ListKeyMappings_By_Key_Success_EmptyMappings() {
kasKeys := make([]*policy.KasKey, 0)
kasIDs := make([]string, 0)
- defer func() {
+ s.T().Cleanup(func() {
keyIDs := make([]string, 0)
for _, key := range kasKeys {
keyIDs = append(keyIDs, key.GetKey().GetId())
}
s.cleanupKeys(keyIDs, kasIDs)
- }()
+ })
kasKey := s.createKeyAndKas()
kasKeys = append(kasKeys, kasKey)
kasIDs = append(kasIDs, kasKey.GetKasId())
@@ -1800,14 +1964,14 @@ func (s *KasRegistryKeySuite) Test_ListKeyMappings_Multiple_Keys_Pagination_Succ
namespaces := make([]*policy.Namespace, 0)
attributeDefs := make([]*policy.Attribute, 0)
attrValues := make([]*policy.Value, 0)
- defer func() {
+ s.T().Cleanup(func() {
keyIDs := make([]string, 0)
for _, key := range kasKeys {
keyIDs = append(keyIDs, key.GetKey().GetId())
}
s.cleanupKeys(keyIDs, kasIDs)
s.cleanupNamespacesAndAttrs(namespaces)
- }()
+ })
for i := range 2 {
kasKey := s.createKeyAndKas()
kasKeys = append(kasKeys, kasKey)
@@ -1871,14 +2035,14 @@ func (s *KasRegistryKeySuite) Test_ListKeyMappings_Multiple_Mixed_Mappings() {
namespaces := make([]*policy.Namespace, 0)
attributeDefs := make([]*policy.Attribute, 0)
attrValues := make([]*policy.Value, 0)
- defer func() {
+ s.T().Cleanup(func() {
keyIDs := make([]string, 0)
for _, key := range kasKeys {
keyIDs = append(keyIDs, key.GetKey().GetId())
}
s.cleanupKeys(keyIDs, kasIDs)
s.cleanupNamespacesAndAttrs(namespaces)
- }()
+ })
for range 3 {
kasKey := s.createKeyAndKas()
@@ -1933,7 +2097,7 @@ func (s *KasRegistryKeySuite) Test_DeleteKey_WrongKasUriOrKid_Fail() {
s.Require().NoError(err)
s.NotNil(resp)
- defer func() {
+ s.T().Cleanup(func() {
r := unsafe.UnsafeDeleteKasKeyRequest{
Id: resp.GetKasKey().GetKey().GetId(),
KasUri: resp.GetKasKey().GetKasUri(),
@@ -1941,7 +2105,7 @@ func (s *KasRegistryKeySuite) Test_DeleteKey_WrongKasUriOrKid_Fail() {
}
_, err := s.db.PolicyClient.UnsafeDeleteKey(s.ctx, resp.GetKasKey(), &r)
s.Require().NoError(err)
- }()
+ })
// Attempt to delete with incorrect Kid
deleteResp, err := s.db.PolicyClient.UnsafeDeleteKey(s.ctx, resp.GetKasKey(), &unsafe.UnsafeDeleteKasKeyRequest{Id: resp.GetKasKey().GetKey().GetId(), KasUri: resp.GetKasKey().GetKasUri(), Kid: "wrong-KID"})
@@ -2059,135 +2223,392 @@ func (s *KasRegistryKeySuite) Test_ListKeyMappings_AllParameterCombinations() {
s.NotNil(mappingsByKeyID)
}
-func (s *KasRegistryKeySuite) validateKeyMapping(mapping *kasregistry.KeyMapping, expectedKey *policy.KasKey, expectedNamespace []*policy.Namespace, expectedAttrDef []*policy.Attribute, expectedValue []*policy.Value) {
- s.Equal(expectedKey.GetKey().GetKeyId(), mapping.GetKid())
- s.Equal(expectedKey.GetKasUri(), mapping.GetKasUri())
- s.Len(mapping.GetNamespaceMappings(), len(expectedNamespace))
- s.Len(mapping.GetAttributeMappings(), len(expectedAttrDef))
- s.Len(mapping.GetValueMappings(), len(expectedValue))
+func (s *KasRegistryKeySuite) Test_ListKeys_SortByKeyId_ASC() {
+ ids, kasID := s.createSortTestKasKeys([]string{"aaa-kksort", "bbb-kksort", "ccc-kksort"})
+ s.T().Cleanup(func() {
+ s.deleteSortTestKasKeys(ids, kasID)
+ })
- if len(expectedNamespace) > 0 {
- for _, ns := range expectedNamespace {
- found := false
- for _, nsMapping := range mapping.GetNamespaceMappings() {
- if nsMapping.GetId() == ns.GetId() && nsMapping.GetFqn() == ns.GetFqn() {
- found = true
- break
- }
- }
- s.True(found, "Namespace mapping not found: %s", ns.GetFqn())
- }
- }
- if len(expectedAttrDef) > 0 {
- for _, attr := range expectedAttrDef {
- found := false
- for _, attrMapping := range mapping.GetAttributeMappings() {
- if attrMapping.GetId() == attr.GetId() && attrMapping.GetFqn() == attr.GetFqn() {
- found = true
- break
- }
- }
- s.True(found, "Attribute mapping not found: %s", attr.GetFqn())
- }
- }
- if len(expectedValue) > 0 {
- for _, val := range expectedValue {
- found := false
- for _, valMapping := range mapping.GetValueMappings() {
- if valMapping.GetId() == val.GetId() && valMapping.GetFqn() == val.GetFqn() {
- found = true
- break
- }
- }
- s.True(found, "Value mapping not found: %s", val.GetFqn())
- }
- }
+ list, err := s.db.PolicyClient.ListKeys(s.ctx, &kasregistry.ListKeysRequest{
+ KasFilter: &kasregistry.ListKeysRequest_KasId{KasId: kasID},
+ Sort: []*kasregistry.KasKeysSort{
+ {Field: kasregistry.SortKasKeysType_SORT_KAS_KEYS_TYPE_KEY_ID, Direction: policy.SortDirection_SORT_DIRECTION_ASC},
+ },
+ })
+ s.Require().NoError(err)
+ s.NotNil(list)
+
+ // aaa < bbb < ccc in ASC order
+ assertIDsInOrder(s.T(), list.GetKasKeys(), func(k *policy.KasKey) string { return k.GetKey().GetId() }, ids[0], ids[1], ids[2])
}
-func (s *KasRegistryKeySuite) setupKeysForRotate(kasID string) map[string]*policy.KasKey {
- // Create a key for the KAS
- keyReq := kasregistry.CreateKeyRequest{
- KasId: kasID,
- KeyId: "original_key_id_to_rotate",
- KeyAlgorithm: policy.Algorithm_ALGORITHM_EC_P384,
- KeyMode: policy.KeyMode_KEY_MODE_CONFIG_ROOT_KEY,
- PublicKeyCtx: &policy.PublicKeyCtx{
- Pem: keyCtx,
- },
- PrivateKeyCtx: &policy.PrivateKeyCtx{
- KeyId: validKeyID1,
- WrappedKey: keyCtx,
+func (s *KasRegistryKeySuite) Test_ListKeys_SortByKeyId_DESC() {
+ ids, kasID := s.createSortTestKasKeys([]string{"aaa-kksortdesc", "bbb-kksortdesc", "ccc-kksortdesc"})
+ s.T().Cleanup(func() {
+ s.deleteSortTestKasKeys(ids, kasID)
+ })
+
+ list, err := s.db.PolicyClient.ListKeys(s.ctx, &kasregistry.ListKeysRequest{
+ KasFilter: &kasregistry.ListKeysRequest_KasId{KasId: kasID},
+ Sort: []*kasregistry.KasKeysSort{
+ {Field: kasregistry.SortKasKeysType_SORT_KAS_KEYS_TYPE_KEY_ID, Direction: policy.SortDirection_SORT_DIRECTION_DESC},
},
- }
- keyToRotate, err := s.db.PolicyClient.CreateKey(s.ctx, &keyReq)
+ })
s.Require().NoError(err)
- s.NotNil(rotateKey)
+ s.NotNil(list)
- keyReq2 := kasregistry.CreateKeyRequest{
- KasId: kasID,
- KeyId: "second_original_key_id",
- KeyAlgorithm: policy.Algorithm_ALGORITHM_EC_P256,
- KeyMode: policy.KeyMode_KEY_MODE_CONFIG_ROOT_KEY,
- PublicKeyCtx: &policy.PublicKeyCtx{
- Pem: keyCtx,
- },
- PrivateKeyCtx: &policy.PrivateKeyCtx{
- KeyId: validKeyID2,
- WrappedKey: keyCtx,
+ // ccc > bbb > aaa in DESC order
+ assertIDsInOrder(s.T(), list.GetKasKeys(), func(k *policy.KasKey) string { return k.GetKey().GetId() }, ids[2], ids[1], ids[0])
+}
+
+func (s *KasRegistryKeySuite) Test_ListKeys_SortByCreatedAt_ASC() {
+ ids, kasID := s.createSortTestKasKeys([]string{"createdasc-kk-0", "createdasc-kk-1", "createdasc-kk-2"})
+ s.T().Cleanup(func() {
+ s.deleteSortTestKasKeys(ids, kasID)
+ })
+
+ list, err := s.db.PolicyClient.ListKeys(s.ctx, &kasregistry.ListKeysRequest{
+ KasFilter: &kasregistry.ListKeysRequest_KasId{KasId: kasID},
+ Sort: []*kasregistry.KasKeysSort{
+ {Field: kasregistry.SortKasKeysType_SORT_KAS_KEYS_TYPE_CREATED_AT, Direction: policy.SortDirection_SORT_DIRECTION_ASC},
},
- }
- secondKey, err := s.db.PolicyClient.CreateKey(s.ctx, &keyReq2)
+ })
s.Require().NoError(err)
- s.NotNil(secondKey)
+ s.NotNil(list)
- return map[string]*policy.KasKey{
- rotateKey: keyToRotate.GetKasKey(),
- nonRotateKey: secondKey.GetKasKey(),
- }
+ // oldest first in ASC order
+ assertIDsInOrder(s.T(), list.GetKasKeys(), func(k *policy.KasKey) string { return k.GetKey().GetId() }, ids[0], ids[1], ids[2])
}
-func (s *KasRegistryKeySuite) setupNamespaceForRotate(numNSToRotate, numNSToNotRotate int, keyToRotate, secondKey *policy.AsymmetricKey) map[string][]*policy.Namespace {
- namespacesToRotate := make([]*policy.Namespace, numNSToRotate)
- namespacesToNotRotate := make([]*policy.Namespace, numNSToNotRotate)
+func (s *KasRegistryKeySuite) Test_ListKeys_SortByCreatedAt_DESC() {
+ ids, kasID := s.createSortTestKasKeys([]string{"createddesc-kk-0", "createddesc-kk-1", "createddesc-kk-2"})
+ s.T().Cleanup(func() {
+ s.deleteSortTestKasKeys(ids, kasID)
+ })
- for i := 0; i < numNSToRotate+numNSToNotRotate; i++ {
- if i < numNSToRotate {
- // Create a namespace
- nsReq := namespaces.CreateNamespaceRequest{
- Name: rotatePrefix + uuid.New().String(),
- }
- namespaceWithKeyToRotate, err := s.db.PolicyClient.CreateNamespace(s.ctx, &nsReq)
- s.Require().NoError(err)
- s.NotNil(namespaceWithKeyToRotate)
+ list, err := s.db.PolicyClient.ListKeys(s.ctx, &kasregistry.ListKeysRequest{
+ KasFilter: &kasregistry.ListKeysRequest_KasId{KasId: kasID},
+ Sort: []*kasregistry.KasKeysSort{
+ {Field: kasregistry.SortKasKeysType_SORT_KAS_KEYS_TYPE_CREATED_AT, Direction: policy.SortDirection_SORT_DIRECTION_DESC},
+ },
+ })
+ s.Require().NoError(err)
+ s.NotNil(list)
- assignKeyReq := namespaces.NamespaceKey{
- NamespaceId: namespaceWithKeyToRotate.GetId(),
- KeyId: keyToRotate.GetId(),
- }
- namespace, err := s.db.PolicyClient.AssignPublicKeyToNamespace(s.ctx, &assignKeyReq)
- s.Require().NoError(err)
- s.NotNil(namespace)
+ // newest first in DESC order
+ assertIDsInOrder(s.T(), list.GetKasKeys(), func(k *policy.KasKey) string { return k.GetKey().GetId() }, ids[2], ids[1], ids[0])
+}
- namespacesToRotate[i] = namespaceWithKeyToRotate
- } else {
- nsReq2 := namespaces.CreateNamespaceRequest{
- Name: nonRotatePrefix + uuid.New().String(),
- }
- namespaceWithoutKeyToRotate, err := s.db.PolicyClient.CreateNamespace(s.ctx, &nsReq2)
- s.Require().NoError(err)
- s.NotNil(namespaceWithoutKeyToRotate)
+func (s *KasRegistryKeySuite) Test_ListKeys_SortByUpdatedAt_DESC() {
+ ids, kasID := s.createSortTestKasKeys([]string{"upd-sort-kk-0", "upd-sort-kk-1", "upd-sort-kk-2"})
+ s.T().Cleanup(func() {
+ s.deleteSortTestKasKeys(ids, kasID)
+ })
- assignKeyReq2 := namespaces.NamespaceKey{
- NamespaceId: namespaceWithoutKeyToRotate.GetId(),
- KeyId: secondKey.GetId(),
- }
- namespace2, err := s.db.PolicyClient.AssignPublicKeyToNamespace(s.ctx, &assignKeyReq2)
- s.Require().NoError(err)
- s.NotNil(namespace2)
- namespacesToNotRotate[i-numNSToRotate] = namespaceWithoutKeyToRotate
- }
- }
- return map[string][]*policy.Namespace{
+ // Update the first key so its updated_at is the most recent
+ time.Sleep(5 * time.Millisecond)
+ _, err := s.db.PolicyClient.UpdateKey(s.ctx, &kasregistry.UpdateKeyRequest{
+ Id: ids[0],
+ Metadata: &common.MetadataMutable{
+ Labels: map[string]string{"updated": "true"},
+ },
+ MetadataUpdateBehavior: common.MetadataUpdateEnum_METADATA_UPDATE_ENUM_REPLACE,
+ })
+ s.Require().NoError(err)
+
+ list, err := s.db.PolicyClient.ListKeys(s.ctx, &kasregistry.ListKeysRequest{
+ KasFilter: &kasregistry.ListKeysRequest_KasId{KasId: kasID},
+ Sort: []*kasregistry.KasKeysSort{
+ {Field: kasregistry.SortKasKeysType_SORT_KAS_KEYS_TYPE_UPDATED_AT, Direction: policy.SortDirection_SORT_DIRECTION_DESC},
+ },
+ })
+ s.Require().NoError(err)
+ s.NotNil(list)
+
+ // The updated key (ids[0]) should appear before the others
+ assertIDsInOrder(s.T(), list.GetKasKeys(), func(k *policy.KasKey) string { return k.GetKey().GetId() }, ids[0], ids[2], ids[1])
+}
+
+func (s *KasRegistryKeySuite) Test_ListKeys_SortByUpdatedAt_ASC() {
+ ids, kasID := s.createSortTestKasKeys([]string{"updasc-kk-0", "updasc-kk-1", "updasc-kk-2"})
+ s.T().Cleanup(func() {
+ s.deleteSortTestKasKeys(ids, kasID)
+ })
+
+ // Update the last key so its updated_at is the most recent
+ time.Sleep(5 * time.Millisecond)
+ _, err := s.db.PolicyClient.UpdateKey(s.ctx, &kasregistry.UpdateKeyRequest{
+ Id: ids[2],
+ Metadata: &common.MetadataMutable{
+ Labels: map[string]string{"updated": "true"},
+ },
+ MetadataUpdateBehavior: common.MetadataUpdateEnum_METADATA_UPDATE_ENUM_REPLACE,
+ })
+ s.Require().NoError(err)
+
+ list, err := s.db.PolicyClient.ListKeys(s.ctx, &kasregistry.ListKeysRequest{
+ KasFilter: &kasregistry.ListKeysRequest_KasId{KasId: kasID},
+ Sort: []*kasregistry.KasKeysSort{
+ {Field: kasregistry.SortKasKeysType_SORT_KAS_KEYS_TYPE_UPDATED_AT, Direction: policy.SortDirection_SORT_DIRECTION_ASC},
+ },
+ })
+ s.Require().NoError(err)
+ s.NotNil(list)
+
+ // The updated key (ids[2]) should appear last in ASC order
+ assertIDsInOrder(s.T(), list.GetKasKeys(), func(k *policy.KasKey) string { return k.GetKey().GetId() }, ids[0], ids[1], ids[2])
+}
+
+func (s *KasRegistryKeySuite) Test_ListKeys_SortTieBreaker_CreatedAtWithIDFallback() {
+ kasReq := kasregistry.CreateKeyAccessServerRequest{
+ Name: "tiebreaker-kk-kas-" + uuid.NewString(),
+ Uri: "https://tiebreaker-kk-kas-" + uuid.NewString() + ".opentdf.io",
+ }
+ kas, err := s.db.PolicyClient.CreateKeyAccessServer(s.ctx, &kasReq)
+ s.Require().NoError(err)
+
+ suffix := time.Now().UnixNano()
+ ids := make([]string, 3)
+ for i := range 3 {
+ keyReq := kasregistry.CreateKeyRequest{
+ KasId: kas.GetId(),
+ KeyId: fmt.Sprintf("tiebreaker-kk-%d-%d", i, suffix),
+ KeyAlgorithm: policy.Algorithm_ALGORITHM_RSA_2048,
+ KeyMode: policy.KeyMode_KEY_MODE_CONFIG_ROOT_KEY,
+ PublicKeyCtx: &policy.PublicKeyCtx{Pem: keyCtx},
+ PrivateKeyCtx: &policy.PrivateKeyCtx{
+ KeyId: fmt.Sprintf("tiebreaker-kk-priv-%d-%d", i, suffix),
+ WrappedKey: keyCtx,
+ },
+ }
+ resp, err := s.db.PolicyClient.CreateKey(s.ctx, &keyReq)
+ s.Require().NoError(err)
+ ids[i] = resp.GetKasKey().GetKey().GetId()
+ }
+ s.T().Cleanup(func() {
+ s.deleteSortTestKasKeys(ids, kas.GetId())
+ })
+
+ s.Require().NoError(forceCreatedAtTie(s.ctx, s.db, "key_access_server_keys", ids))
+
+ sorted := slices.Sorted(slices.Values(ids))
+
+ listRsp, err := s.db.PolicyClient.ListKeys(s.ctx, &kasregistry.ListKeysRequest{
+ KasFilter: &kasregistry.ListKeysRequest_KasId{
+ KasId: kas.GetId(),
+ },
+ Sort: []*kasregistry.KasKeysSort{
+ {Field: kasregistry.SortKasKeysType_SORT_KAS_KEYS_TYPE_CREATED_AT, Direction: policy.SortDirection_SORT_DIRECTION_ASC},
+ },
+ })
+ s.Require().NoError(err)
+ s.NotNil(listRsp)
+
+ assertIDsInOrder(s.T(), listRsp.GetKasKeys(), func(k *policy.KasKey) string { return k.GetKey().GetId() }, sorted[0], sorted[1], sorted[2])
+}
+
+func (s *KasRegistryKeySuite) Test_ListKeys_SortByUnspecifiedField_DefaultsToCreatedAt() {
+ ids, kasID := s.createSortTestKasKeys([]string{"unsf-kk-0", "unsf-kk-1", "unsf-kk-2"})
+ s.T().Cleanup(func() {
+ s.deleteSortTestKasKeys(ids, kasID)
+ })
+
+ list, err := s.db.PolicyClient.ListKeys(s.ctx, &kasregistry.ListKeysRequest{
+ KasFilter: &kasregistry.ListKeysRequest_KasId{KasId: kasID},
+ Sort: []*kasregistry.KasKeysSort{
+ {Field: kasregistry.SortKasKeysType_SORT_KAS_KEYS_TYPE_UNSPECIFIED, Direction: policy.SortDirection_SORT_DIRECTION_ASC},
+ },
+ })
+ s.Require().NoError(err)
+ s.NotNil(list)
+
+ // Field defaults to created_at, explicit ASC is preserved
+ assertIDsInOrder(s.T(), list.GetKasKeys(), func(k *policy.KasKey) string { return k.GetKey().GetId() }, ids[0], ids[1], ids[2])
+}
+
+func (s *KasRegistryKeySuite) Test_ListKeys_SortByUnspecifiedDirection_DefaultsToDESC() {
+ ids, kasID := s.createSortTestKasKeys([]string{"unsd-kk-0", "unsd-kk-1", "unsd-kk-2"})
+ s.T().Cleanup(func() {
+ s.deleteSortTestKasKeys(ids, kasID)
+ })
+
+ list, err := s.db.PolicyClient.ListKeys(s.ctx, &kasregistry.ListKeysRequest{
+ KasFilter: &kasregistry.ListKeysRequest_KasId{KasId: kasID},
+ Sort: []*kasregistry.KasKeysSort{
+ {Field: kasregistry.SortKasKeysType_SORT_KAS_KEYS_TYPE_CREATED_AT, Direction: policy.SortDirection_SORT_DIRECTION_UNSPECIFIED},
+ },
+ })
+ s.Require().NoError(err)
+ s.NotNil(list)
+
+ // Direction defaults to DESC, explicit created_at field is preserved
+ assertIDsInOrder(s.T(), list.GetKasKeys(), func(k *policy.KasKey) string { return k.GetKey().GetId() }, ids[2], ids[1], ids[0])
+}
+
+func (s *KasRegistryKeySuite) Test_ListKeys_SortByBothUnspecified_DefaultsToCreatedAtDESC() {
+ ids, kasID := s.createSortTestKasKeys([]string{"unsb-kk-0", "unsb-kk-1", "unsb-kk-2"})
+ s.T().Cleanup(func() {
+ s.deleteSortTestKasKeys(ids, kasID)
+ })
+
+ list, err := s.db.PolicyClient.ListKeys(s.ctx, &kasregistry.ListKeysRequest{
+ KasFilter: &kasregistry.ListKeysRequest_KasId{KasId: kasID},
+ Sort: []*kasregistry.KasKeysSort{
+ {Field: kasregistry.SortKasKeysType_SORT_KAS_KEYS_TYPE_UNSPECIFIED, Direction: policy.SortDirection_SORT_DIRECTION_UNSPECIFIED},
+ },
+ })
+ s.Require().NoError(err)
+ s.NotNil(list)
+
+ // Both default: created_at DESC
+ assertIDsInOrder(s.T(), list.GetKasKeys(), func(k *policy.KasKey) string { return k.GetKey().GetId() }, ids[2], ids[1], ids[0])
+}
+
+func (s *KasRegistryKeySuite) Test_ListKeys_SortOmitted() {
+ ids, kasID := s.createSortTestKasKeys([]string{"omit-kk-0", "omit-kk-1", "omit-kk-2"})
+ s.T().Cleanup(func() {
+ s.deleteSortTestKasKeys(ids, kasID)
+ })
+
+ list, err := s.db.PolicyClient.ListKeys(s.ctx, &kasregistry.ListKeysRequest{
+ KasFilter: &kasregistry.ListKeysRequest_KasId{KasId: kasID},
+ })
+ s.Require().NoError(err)
+ s.NotNil(list)
+
+ // No sort provided: created_at DESC
+ assertIDsInOrder(s.T(), list.GetKasKeys(), func(k *policy.KasKey) string { return k.GetKey().GetId() }, ids[2], ids[1], ids[0])
+}
+
+func (s *KasRegistryKeySuite) validateKeyMapping(mapping *kasregistry.KeyMapping, expectedKey *policy.KasKey, expectedNamespace []*policy.Namespace, expectedAttrDef []*policy.Attribute, expectedValue []*policy.Value) {
+ s.Equal(expectedKey.GetKey().GetKeyId(), mapping.GetKid())
+ s.Equal(expectedKey.GetKasUri(), mapping.GetKasUri())
+ s.Len(mapping.GetNamespaceMappings(), len(expectedNamespace))
+ s.Len(mapping.GetAttributeMappings(), len(expectedAttrDef))
+ s.Len(mapping.GetValueMappings(), len(expectedValue))
+
+ if len(expectedNamespace) > 0 {
+ for _, ns := range expectedNamespace {
+ found := false
+ for _, nsMapping := range mapping.GetNamespaceMappings() {
+ if nsMapping.GetId() == ns.GetId() && nsMapping.GetFqn() == ns.GetFqn() {
+ found = true
+ break
+ }
+ }
+ s.True(found, "Namespace mapping not found: %s", ns.GetFqn())
+ }
+ }
+ if len(expectedAttrDef) > 0 {
+ for _, attr := range expectedAttrDef {
+ found := false
+ for _, attrMapping := range mapping.GetAttributeMappings() {
+ if attrMapping.GetId() == attr.GetId() && attrMapping.GetFqn() == attr.GetFqn() {
+ found = true
+ break
+ }
+ }
+ s.True(found, "Attribute mapping not found: %s", attr.GetFqn())
+ }
+ }
+ if len(expectedValue) > 0 {
+ for _, val := range expectedValue {
+ found := false
+ for _, valMapping := range mapping.GetValueMappings() {
+ if valMapping.GetId() == val.GetId() && valMapping.GetFqn() == val.GetFqn() {
+ found = true
+ break
+ }
+ }
+ s.True(found, "Value mapping not found: %s", val.GetFqn())
+ }
+ }
+}
+
+func (s *KasRegistryKeySuite) setupKeysForRotate(kasID string) map[string]*policy.KasKey {
+ // Create a key for the KAS
+ keyReq := kasregistry.CreateKeyRequest{
+ KasId: kasID,
+ KeyId: "original_key_id_to_rotate",
+ KeyAlgorithm: policy.Algorithm_ALGORITHM_EC_P384,
+ KeyMode: policy.KeyMode_KEY_MODE_CONFIG_ROOT_KEY,
+ PublicKeyCtx: &policy.PublicKeyCtx{
+ Pem: keyCtx,
+ },
+ PrivateKeyCtx: &policy.PrivateKeyCtx{
+ KeyId: validKeyID1,
+ WrappedKey: keyCtx,
+ },
+ }
+ keyToRotate, err := s.db.PolicyClient.CreateKey(s.ctx, &keyReq)
+ s.Require().NoError(err)
+ s.NotNil(keyToRotate)
+
+ keyReq2 := kasregistry.CreateKeyRequest{
+ KasId: kasID,
+ KeyId: "second_original_key_id",
+ KeyAlgorithm: policy.Algorithm_ALGORITHM_EC_P256,
+ KeyMode: policy.KeyMode_KEY_MODE_CONFIG_ROOT_KEY,
+ PublicKeyCtx: &policy.PublicKeyCtx{
+ Pem: keyCtx,
+ },
+ PrivateKeyCtx: &policy.PrivateKeyCtx{
+ KeyId: validKeyID2,
+ WrappedKey: keyCtx,
+ },
+ }
+ secondKey, err := s.db.PolicyClient.CreateKey(s.ctx, &keyReq2)
+ s.Require().NoError(err)
+ s.NotNil(secondKey)
+
+ return map[string]*policy.KasKey{
+ rotateKey: keyToRotate.GetKasKey(),
+ nonRotateKey: secondKey.GetKasKey(),
+ }
+}
+
+func (s *KasRegistryKeySuite) setupNamespaceForRotate(numNSToRotate, numNSToNotRotate int, keyToRotate, secondKey *policy.AsymmetricKey) map[string][]*policy.Namespace {
+ namespacesToRotate := make([]*policy.Namespace, numNSToRotate)
+ namespacesToNotRotate := make([]*policy.Namespace, numNSToNotRotate)
+
+ for i := 0; i < numNSToRotate+numNSToNotRotate; i++ {
+ if i < numNSToRotate {
+ // Create a namespace
+ nsReq := namespaces.CreateNamespaceRequest{
+ Name: rotatePrefix + uuid.New().String(),
+ }
+ namespaceWithKeyToRotate, err := s.db.PolicyClient.CreateNamespace(s.ctx, &nsReq)
+ s.Require().NoError(err)
+ s.NotNil(namespaceWithKeyToRotate)
+
+ assignKeyReq := namespaces.NamespaceKey{
+ NamespaceId: namespaceWithKeyToRotate.GetId(),
+ KeyId: keyToRotate.GetId(),
+ }
+ namespace, err := s.db.PolicyClient.AssignPublicKeyToNamespace(s.ctx, &assignKeyReq)
+ s.Require().NoError(err)
+ s.NotNil(namespace)
+
+ namespacesToRotate[i] = namespaceWithKeyToRotate
+ } else {
+ nsReq2 := namespaces.CreateNamespaceRequest{
+ Name: nonRotatePrefix + uuid.New().String(),
+ }
+ namespaceWithoutKeyToRotate, err := s.db.PolicyClient.CreateNamespace(s.ctx, &nsReq2)
+ s.Require().NoError(err)
+ s.NotNil(namespaceWithoutKeyToRotate)
+
+ assignKeyReq2 := namespaces.NamespaceKey{
+ NamespaceId: namespaceWithoutKeyToRotate.GetId(),
+ KeyId: secondKey.GetId(),
+ }
+ namespace2, err := s.db.PolicyClient.AssignPublicKeyToNamespace(s.ctx, &assignKeyReq2)
+ s.Require().NoError(err)
+ s.NotNil(namespace2)
+ namespacesToNotRotate[i-numNSToRotate] = namespaceWithoutKeyToRotate
+ }
+ }
+ return map[string][]*policy.Namespace{
rotateKey: namespacesToRotate,
nonRotateKey: namespacesToNotRotate,
}
@@ -2318,6 +2739,14 @@ func (s *KasRegistryKeySuite) cleanupKeys(keyIDs []string, keyAccessServerIDs []
}
}
+func listKeysSearchIDs(keyIDsByKID map[string]string) []string {
+ keyIDs := make([]string, 0, len(keyIDsByKID))
+ for _, id := range keyIDsByKID {
+ keyIDs = append(keyIDs, id)
+ }
+ return keyIDs
+}
+
func (s *KasRegistryKeySuite) getKasRegistryServerKeysFixtures() []fixtures.FixtureDataKasRegistryKey {
return []fixtures.FixtureDataKasRegistryKey{
s.f.GetKasRegistryServerKeys("kas_key_1"),
@@ -2474,241 +2903,6 @@ func (s *KasRegistryKeySuite) createKeyAndKas() *policy.KasKey {
return keyResp.GetKasKey()
}
-func (s *KasRegistryKeySuite) Test_ListKeys_SortByKeyId_ASC() {
- ids, kasID := s.createSortTestKasKeys([]string{"aaa-kksort", "bbb-kksort", "ccc-kksort"})
- defer s.deleteSortTestKasKeys(ids, kasID)
-
- list, err := s.db.PolicyClient.ListKeys(s.ctx, &kasregistry.ListKeysRequest{
- KasFilter: &kasregistry.ListKeysRequest_KasId{KasId: kasID},
- Sort: []*kasregistry.KasKeysSort{
- {Field: kasregistry.SortKasKeysType_SORT_KAS_KEYS_TYPE_KEY_ID, Direction: policy.SortDirection_SORT_DIRECTION_ASC},
- },
- })
- s.Require().NoError(err)
- s.NotNil(list)
-
- // aaa < bbb < ccc in ASC order
- assertIDsInOrder(s.T(), list.GetKasKeys(), func(k *policy.KasKey) string { return k.GetKey().GetId() }, ids[0], ids[1], ids[2])
-}
-
-func (s *KasRegistryKeySuite) Test_ListKeys_SortByKeyId_DESC() {
- ids, kasID := s.createSortTestKasKeys([]string{"aaa-kksortdesc", "bbb-kksortdesc", "ccc-kksortdesc"})
- defer s.deleteSortTestKasKeys(ids, kasID)
-
- list, err := s.db.PolicyClient.ListKeys(s.ctx, &kasregistry.ListKeysRequest{
- KasFilter: &kasregistry.ListKeysRequest_KasId{KasId: kasID},
- Sort: []*kasregistry.KasKeysSort{
- {Field: kasregistry.SortKasKeysType_SORT_KAS_KEYS_TYPE_KEY_ID, Direction: policy.SortDirection_SORT_DIRECTION_DESC},
- },
- })
- s.Require().NoError(err)
- s.NotNil(list)
-
- // ccc > bbb > aaa in DESC order
- assertIDsInOrder(s.T(), list.GetKasKeys(), func(k *policy.KasKey) string { return k.GetKey().GetId() }, ids[2], ids[1], ids[0])
-}
-
-func (s *KasRegistryKeySuite) Test_ListKeys_SortByCreatedAt_ASC() {
- ids, kasID := s.createSortTestKasKeys([]string{"createdasc-kk-0", "createdasc-kk-1", "createdasc-kk-2"})
- defer s.deleteSortTestKasKeys(ids, kasID)
-
- list, err := s.db.PolicyClient.ListKeys(s.ctx, &kasregistry.ListKeysRequest{
- KasFilter: &kasregistry.ListKeysRequest_KasId{KasId: kasID},
- Sort: []*kasregistry.KasKeysSort{
- {Field: kasregistry.SortKasKeysType_SORT_KAS_KEYS_TYPE_CREATED_AT, Direction: policy.SortDirection_SORT_DIRECTION_ASC},
- },
- })
- s.Require().NoError(err)
- s.NotNil(list)
-
- // oldest first in ASC order
- assertIDsInOrder(s.T(), list.GetKasKeys(), func(k *policy.KasKey) string { return k.GetKey().GetId() }, ids[0], ids[1], ids[2])
-}
-
-func (s *KasRegistryKeySuite) Test_ListKeys_SortByCreatedAt_DESC() {
- ids, kasID := s.createSortTestKasKeys([]string{"createddesc-kk-0", "createddesc-kk-1", "createddesc-kk-2"})
- defer s.deleteSortTestKasKeys(ids, kasID)
-
- list, err := s.db.PolicyClient.ListKeys(s.ctx, &kasregistry.ListKeysRequest{
- KasFilter: &kasregistry.ListKeysRequest_KasId{KasId: kasID},
- Sort: []*kasregistry.KasKeysSort{
- {Field: kasregistry.SortKasKeysType_SORT_KAS_KEYS_TYPE_CREATED_AT, Direction: policy.SortDirection_SORT_DIRECTION_DESC},
- },
- })
- s.Require().NoError(err)
- s.NotNil(list)
-
- // newest first in DESC order
- assertIDsInOrder(s.T(), list.GetKasKeys(), func(k *policy.KasKey) string { return k.GetKey().GetId() }, ids[2], ids[1], ids[0])
-}
-
-func (s *KasRegistryKeySuite) Test_ListKeys_SortByUpdatedAt_DESC() {
- ids, kasID := s.createSortTestKasKeys([]string{"upd-sort-kk-0", "upd-sort-kk-1", "upd-sort-kk-2"})
- defer s.deleteSortTestKasKeys(ids, kasID)
-
- // Update the first key so its updated_at is the most recent
- time.Sleep(5 * time.Millisecond)
- _, err := s.db.PolicyClient.UpdateKey(s.ctx, &kasregistry.UpdateKeyRequest{
- Id: ids[0],
- Metadata: &common.MetadataMutable{
- Labels: map[string]string{"updated": "true"},
- },
- MetadataUpdateBehavior: common.MetadataUpdateEnum_METADATA_UPDATE_ENUM_REPLACE,
- })
- s.Require().NoError(err)
-
- list, err := s.db.PolicyClient.ListKeys(s.ctx, &kasregistry.ListKeysRequest{
- KasFilter: &kasregistry.ListKeysRequest_KasId{KasId: kasID},
- Sort: []*kasregistry.KasKeysSort{
- {Field: kasregistry.SortKasKeysType_SORT_KAS_KEYS_TYPE_UPDATED_AT, Direction: policy.SortDirection_SORT_DIRECTION_DESC},
- },
- })
- s.Require().NoError(err)
- s.NotNil(list)
-
- // The updated key (ids[0]) should appear before the others
- assertIDsInOrder(s.T(), list.GetKasKeys(), func(k *policy.KasKey) string { return k.GetKey().GetId() }, ids[0], ids[2], ids[1])
-}
-
-func (s *KasRegistryKeySuite) Test_ListKeys_SortByUpdatedAt_ASC() {
- ids, kasID := s.createSortTestKasKeys([]string{"updasc-kk-0", "updasc-kk-1", "updasc-kk-2"})
- defer s.deleteSortTestKasKeys(ids, kasID)
-
- // Update the last key so its updated_at is the most recent
- time.Sleep(5 * time.Millisecond)
- _, err := s.db.PolicyClient.UpdateKey(s.ctx, &kasregistry.UpdateKeyRequest{
- Id: ids[2],
- Metadata: &common.MetadataMutable{
- Labels: map[string]string{"updated": "true"},
- },
- MetadataUpdateBehavior: common.MetadataUpdateEnum_METADATA_UPDATE_ENUM_REPLACE,
- })
- s.Require().NoError(err)
-
- list, err := s.db.PolicyClient.ListKeys(s.ctx, &kasregistry.ListKeysRequest{
- KasFilter: &kasregistry.ListKeysRequest_KasId{KasId: kasID},
- Sort: []*kasregistry.KasKeysSort{
- {Field: kasregistry.SortKasKeysType_SORT_KAS_KEYS_TYPE_UPDATED_AT, Direction: policy.SortDirection_SORT_DIRECTION_ASC},
- },
- })
- s.Require().NoError(err)
- s.NotNil(list)
-
- // The updated key (ids[2]) should appear last in ASC order
- assertIDsInOrder(s.T(), list.GetKasKeys(), func(k *policy.KasKey) string { return k.GetKey().GetId() }, ids[0], ids[1], ids[2])
-}
-
-func (s *KasRegistryKeySuite) Test_ListKeys_SortTieBreaker_CreatedAtWithIDFallback() {
- kasReq := kasregistry.CreateKeyAccessServerRequest{
- Name: "tiebreaker-kk-kas-" + uuid.NewString(),
- Uri: "https://tiebreaker-kk-kas-" + uuid.NewString() + ".opentdf.io",
- }
- kas, err := s.db.PolicyClient.CreateKeyAccessServer(s.ctx, &kasReq)
- s.Require().NoError(err)
-
- suffix := time.Now().UnixNano()
- ids := make([]string, 3)
- for i := range 3 {
- keyReq := kasregistry.CreateKeyRequest{
- KasId: kas.GetId(),
- KeyId: fmt.Sprintf("tiebreaker-kk-%d-%d", i, suffix),
- KeyAlgorithm: policy.Algorithm_ALGORITHM_RSA_2048,
- KeyMode: policy.KeyMode_KEY_MODE_CONFIG_ROOT_KEY,
- PublicKeyCtx: &policy.PublicKeyCtx{Pem: keyCtx},
- PrivateKeyCtx: &policy.PrivateKeyCtx{
- KeyId: fmt.Sprintf("tiebreaker-kk-priv-%d-%d", i, suffix),
- WrappedKey: keyCtx,
- },
- }
- resp, err := s.db.PolicyClient.CreateKey(s.ctx, &keyReq)
- s.Require().NoError(err)
- ids[i] = resp.GetKasKey().GetKey().GetId()
- }
- defer s.deleteSortTestKasKeys(ids, kas.GetId())
-
- s.Require().NoError(forceCreatedAtTie(s.ctx, s.db, "key_access_server_keys", ids))
-
- sorted := slices.Sorted(slices.Values(ids))
-
- listRsp, err := s.db.PolicyClient.ListKeys(s.ctx, &kasregistry.ListKeysRequest{
- KasFilter: &kasregistry.ListKeysRequest_KasId{
- KasId: kas.GetId(),
- },
- Sort: []*kasregistry.KasKeysSort{
- {Field: kasregistry.SortKasKeysType_SORT_KAS_KEYS_TYPE_CREATED_AT, Direction: policy.SortDirection_SORT_DIRECTION_ASC},
- },
- })
- s.Require().NoError(err)
- s.NotNil(listRsp)
-
- assertIDsInOrder(s.T(), listRsp.GetKasKeys(), func(k *policy.KasKey) string { return k.GetKey().GetId() }, sorted[0], sorted[1], sorted[2])
-}
-
-func (s *KasRegistryKeySuite) Test_ListKeys_SortByUnspecifiedField_DefaultsToCreatedAt() {
- ids, kasID := s.createSortTestKasKeys([]string{"unsf-kk-0", "unsf-kk-1", "unsf-kk-2"})
- defer s.deleteSortTestKasKeys(ids, kasID)
-
- list, err := s.db.PolicyClient.ListKeys(s.ctx, &kasregistry.ListKeysRequest{
- KasFilter: &kasregistry.ListKeysRequest_KasId{KasId: kasID},
- Sort: []*kasregistry.KasKeysSort{
- {Field: kasregistry.SortKasKeysType_SORT_KAS_KEYS_TYPE_UNSPECIFIED, Direction: policy.SortDirection_SORT_DIRECTION_ASC},
- },
- })
- s.Require().NoError(err)
- s.NotNil(list)
-
- // Field defaults to created_at, explicit ASC is preserved
- assertIDsInOrder(s.T(), list.GetKasKeys(), func(k *policy.KasKey) string { return k.GetKey().GetId() }, ids[0], ids[1], ids[2])
-}
-
-func (s *KasRegistryKeySuite) Test_ListKeys_SortByUnspecifiedDirection_DefaultsToDESC() {
- ids, kasID := s.createSortTestKasKeys([]string{"unsd-kk-0", "unsd-kk-1", "unsd-kk-2"})
- defer s.deleteSortTestKasKeys(ids, kasID)
-
- list, err := s.db.PolicyClient.ListKeys(s.ctx, &kasregistry.ListKeysRequest{
- KasFilter: &kasregistry.ListKeysRequest_KasId{KasId: kasID},
- Sort: []*kasregistry.KasKeysSort{
- {Field: kasregistry.SortKasKeysType_SORT_KAS_KEYS_TYPE_CREATED_AT, Direction: policy.SortDirection_SORT_DIRECTION_UNSPECIFIED},
- },
- })
- s.Require().NoError(err)
- s.NotNil(list)
-
- // Direction defaults to DESC, explicit created_at field is preserved
- assertIDsInOrder(s.T(), list.GetKasKeys(), func(k *policy.KasKey) string { return k.GetKey().GetId() }, ids[2], ids[1], ids[0])
-}
-
-func (s *KasRegistryKeySuite) Test_ListKeys_SortByBothUnspecified_DefaultsToCreatedAtDESC() {
- ids, kasID := s.createSortTestKasKeys([]string{"unsb-kk-0", "unsb-kk-1", "unsb-kk-2"})
- defer s.deleteSortTestKasKeys(ids, kasID)
-
- list, err := s.db.PolicyClient.ListKeys(s.ctx, &kasregistry.ListKeysRequest{
- KasFilter: &kasregistry.ListKeysRequest_KasId{KasId: kasID},
- Sort: []*kasregistry.KasKeysSort{
- {Field: kasregistry.SortKasKeysType_SORT_KAS_KEYS_TYPE_UNSPECIFIED, Direction: policy.SortDirection_SORT_DIRECTION_UNSPECIFIED},
- },
- })
- s.Require().NoError(err)
- s.NotNil(list)
-
- // Both default: created_at DESC
- assertIDsInOrder(s.T(), list.GetKasKeys(), func(k *policy.KasKey) string { return k.GetKey().GetId() }, ids[2], ids[1], ids[0])
-}
-
-func (s *KasRegistryKeySuite) Test_ListKeys_SortOmitted() {
- ids, kasID := s.createSortTestKasKeys([]string{"omit-kk-0", "omit-kk-1", "omit-kk-2"})
- defer s.deleteSortTestKasKeys(ids, kasID)
-
- list, err := s.db.PolicyClient.ListKeys(s.ctx, &kasregistry.ListKeysRequest{
- KasFilter: &kasregistry.ListKeysRequest_KasId{KasId: kasID},
- })
- s.Require().NoError(err)
- s.NotNil(list)
-
- // No sort provided: created_at DESC
- assertIDsInOrder(s.T(), list.GetKasKeys(), func(k *policy.KasKey) string { return k.GetKey().GetId() }, ids[2], ids[1], ids[0])
-}
-
// Sort test helpers
// createSortTestKasKeys creates kas keys with the given prefixes, adding 5ms gaps
@@ -2756,3 +2950,35 @@ func (s *KasRegistryKeySuite) createSortTestKasKeys(prefixes []string) ([]string
func (s *KasRegistryKeySuite) deleteSortTestKasKeys(keyIDs []string, kasID string) {
s.cleanupKeys(keyIDs, []string{kasID})
}
+
+func (s *KasRegistryKeySuite) createListKeysSearchTestKeys(kids []string) (string, map[string]string) {
+ kasUUID := uuid.NewString()
+ kasReq := kasregistry.CreateKeyAccessServerRequest{
+ Name: "list-keys-search-kas-" + kasUUID,
+ Uri: "https://list-keys-search-kas-" + kasUUID + ".opentdf.io",
+ }
+ kas, err := s.db.PolicyClient.CreateKeyAccessServer(s.ctx, &kasReq)
+ s.Require().NoError(err)
+ s.NotNil(kas)
+
+ keyIDsByKID := make(map[string]string, len(kids))
+ for _, kid := range kids {
+ keyReq := kasregistry.CreateKeyRequest{
+ KasId: kas.GetId(),
+ KeyId: kid,
+ KeyAlgorithm: policy.Algorithm_ALGORITHM_RSA_2048,
+ KeyMode: policy.KeyMode_KEY_MODE_CONFIG_ROOT_KEY,
+ PublicKeyCtx: &policy.PublicKeyCtx{Pem: keyCtx},
+ PrivateKeyCtx: &policy.PrivateKeyCtx{
+ KeyId: kid + "-private",
+ WrappedKey: keyCtx,
+ },
+ }
+ keyResp, err := s.db.PolicyClient.CreateKey(s.ctx, &keyReq)
+ s.Require().NoError(err)
+ s.NotNil(keyResp)
+ keyIDsByKID[kid] = keyResp.GetKasKey().GetKey().GetId()
+ }
+
+ return kas.GetId(), keyIDsByKID
+}
diff --git a/service/policy/db/key_access_server_registry.go b/service/policy/db/key_access_server_registry.go
index c41c6b321e..82ae8e3cf7 100644
--- a/service/policy/db/key_access_server_registry.go
+++ b/service/policy/db/key_access_server_registry.go
@@ -611,10 +611,12 @@ func (c PolicyDBClient) ListKeys(ctx context.Context, r *kasregistry.ListKeysReq
}
sortField, sortDirection := GetKasKeysSortParams(r.GetSort())
+ search := pgtypeSubstringSearchPattern(r.GetSearch().GetTerm())
params := listKeysParams{
Legacy: legacy,
KeyAlgorithm: algo,
+ Search: search,
KasID: kasID,
KasUri: kasURI,
KasName: kasName,
diff --git a/service/policy/db/key_access_server_registry.sql.go b/service/policy/db/key_access_server_registry.sql.go
index 628d65d87e..aff7345304 100644
--- a/service/policy/db/key_access_server_registry.sql.go
+++ b/service/policy/db/key_access_server_registry.sql.go
@@ -1084,17 +1084,17 @@ func (q *Queries) listKeyMappings(ctx context.Context, arg listKeyMappingsParams
const listKeys = `-- name: listKeys :many
WITH params AS (
SELECT
- COALESCE(NULLIF($5::text, ''), 'created_at') AS resolved_field,
- COALESCE(NULLIF($6::text, ''), 'DESC') AS resolved_direction
+ COALESCE(NULLIF($6::text, ''), 'created_at') AS resolved_field,
+ COALESCE(NULLIF($7::text, ''), 'DESC') AS resolved_direction
),
listed AS (
SELECT
kas.id AS kas_id,
kas.uri AS kas_uri
FROM key_access_servers AS kas
- WHERE ($7::uuid IS NULL OR kas.id = $7::uuid)
- AND ($8::text IS NULL OR kas.name = $8::text)
- AND ($9::text IS NULL OR kas.uri = $9::text)
+ WHERE ($8::uuid IS NULL OR kas.id = $8::uuid)
+ AND ($9::text IS NULL OR kas.name = $9::text)
+ AND ($10::text IS NULL OR kas.uri = $10::text)
)
SELECT
COUNT(*) OVER () AS total,
@@ -1128,6 +1128,10 @@ LEFT JOIN
WHERE
($1::integer IS NULL OR kask.key_algorithm = $1::integer)
AND ($2::boolean IS NULL OR kask.legacy = $2::boolean)
+ AND (
+ $3::TEXT IS NULL
+ OR kask.key_id ILIKE $3::TEXT ESCAPE '\'
+ )
ORDER BY
CASE WHEN p.resolved_field = 'key_id' AND p.resolved_direction = 'ASC' THEN kask.key_id END ASC,
CASE WHEN p.resolved_field = 'key_id' AND p.resolved_direction = 'DESC' THEN kask.key_id END DESC,
@@ -1136,13 +1140,14 @@ ORDER BY
CASE WHEN p.resolved_field = 'updated_at' AND p.resolved_direction = 'ASC' THEN kask.updated_at END ASC,
CASE WHEN p.resolved_field = 'updated_at' AND p.resolved_direction = 'DESC' THEN kask.updated_at END DESC,
kask.id ASC
-LIMIT $4
-OFFSET $3
+LIMIT $5
+OFFSET $4
`
type listKeysParams struct {
KeyAlgorithm pgtype.Int4 `json:"key_algorithm"`
Legacy pgtype.Bool `json:"legacy"`
+ Search pgtype.Text `json:"search"`
Offset int32 `json:"offset_"`
Limit int32 `json:"limit_"`
SortField string `json:"sort_field"`
@@ -1175,17 +1180,17 @@ type listKeysRow struct {
//
// WITH params AS (
// SELECT
-// COALESCE(NULLIF($5::text, ''), 'created_at') AS resolved_field,
-// COALESCE(NULLIF($6::text, ''), 'DESC') AS resolved_direction
+// COALESCE(NULLIF($6::text, ''), 'created_at') AS resolved_field,
+// COALESCE(NULLIF($7::text, ''), 'DESC') AS resolved_direction
// ),
// listed AS (
// SELECT
// kas.id AS kas_id,
// kas.uri AS kas_uri
// FROM key_access_servers AS kas
-// WHERE ($7::uuid IS NULL OR kas.id = $7::uuid)
-// AND ($8::text IS NULL OR kas.name = $8::text)
-// AND ($9::text IS NULL OR kas.uri = $9::text)
+// WHERE ($8::uuid IS NULL OR kas.id = $8::uuid)
+// AND ($9::text IS NULL OR kas.name = $9::text)
+// AND ($10::text IS NULL OR kas.uri = $10::text)
// )
// SELECT
// COUNT(*) OVER () AS total,
@@ -1219,6 +1224,10 @@ type listKeysRow struct {
// WHERE
// ($1::integer IS NULL OR kask.key_algorithm = $1::integer)
// AND ($2::boolean IS NULL OR kask.legacy = $2::boolean)
+// AND (
+// $3::TEXT IS NULL
+// OR kask.key_id ILIKE $3::TEXT ESCAPE '\'
+// )
// ORDER BY
// CASE WHEN p.resolved_field = 'key_id' AND p.resolved_direction = 'ASC' THEN kask.key_id END ASC,
// CASE WHEN p.resolved_field = 'key_id' AND p.resolved_direction = 'DESC' THEN kask.key_id END DESC,
@@ -1227,12 +1236,13 @@ type listKeysRow struct {
// CASE WHEN p.resolved_field = 'updated_at' AND p.resolved_direction = 'ASC' THEN kask.updated_at END ASC,
// CASE WHEN p.resolved_field = 'updated_at' AND p.resolved_direction = 'DESC' THEN kask.updated_at END DESC,
// kask.id ASC
-// LIMIT $4
-// OFFSET $3
+// LIMIT $5
+// OFFSET $4
func (q *Queries) listKeys(ctx context.Context, arg listKeysParams) ([]listKeysRow, error) {
rows, err := q.db.Query(ctx, listKeys,
arg.KeyAlgorithm,
arg.Legacy,
+ arg.Search,
arg.Offset,
arg.Limit,
arg.SortField,
diff --git a/service/policy/db/queries/key_access_server_registry.sql b/service/policy/db/queries/key_access_server_registry.sql
index 8711f33976..d06bd5cb73 100644
--- a/service/policy/db/queries/key_access_server_registry.sql
+++ b/service/policy/db/queries/key_access_server_registry.sql
@@ -407,6 +407,10 @@ LEFT JOIN
WHERE
(sqlc.narg('key_algorithm')::integer IS NULL OR kask.key_algorithm = sqlc.narg('key_algorithm')::integer)
AND (sqlc.narg('legacy')::boolean IS NULL OR kask.legacy = sqlc.narg('legacy')::boolean)
+ AND (
+ sqlc.narg('search')::TEXT IS NULL
+ OR kask.key_id ILIKE sqlc.narg('search')::TEXT ESCAPE '\'
+ )
ORDER BY
CASE WHEN p.resolved_field = 'key_id' AND p.resolved_direction = 'ASC' THEN kask.key_id END ASC,
CASE WHEN p.resolved_field = 'key_id' AND p.resolved_direction = 'DESC' THEN kask.key_id END DESC,